固体-iOSразработке。 Принципоткрытостизакрытости
Ктобымогподумать,чтодвапротивоположныхпосмыслусловаокажутсярядом,образоваводинизосновныхпринциповпроектированияобъектно-ориентированногодизайна。 Напервыйвзглядтакоесловосочетаниеможетпоказатьсябессмыслицей。 Давайтевзглянемнаформулировку:
Программныесущности(классы,модули,функцииит.п.)должныбытьоткрытыдлярасширеииннозак
1988年ИменновтакомвидепринциппоявилсявкнигеБертранаМейераеевдалеком。 ПозжеРобертМартинпопуляризовалего,включиввсвоюизвестнуюаббревиатуруSOLIDподбуквойО。
Пожалуй,единственноо,чтостановитсяяснымпослепрочтенияэтогоопределения,этотоечтот Ночтоимеетсяввиду-по-прежнемунепонятно。
Закрытость
Начнемсзакрытостидляизменений。 Выкогда-нибудьзаходиливхедерыклассовот苹果,пытаясь(восновномслучайно)тамчто-тоизменить? Xcodeсразужесообщал,чутьлинецитируявышеупомянутуюформулировку,чтоданныйкларосзакрыт,ментель。 :тоиестьзакрытость:интерфейсыпривычнынам,потомучтоонинеизменны。 Мыпользуемсяимикаждыйдень,знаянаизустьназванияметодовисвойств。 Нопредставьте,еслибыназванияиливходныепараметрыуметодовменялисьскаждымобновлением。 Смоглибымыпомнитьих? Врядли,ноэтодаженесамоестрашное。 Чтобылобысмногочисленнымипроектамиповсемумиру,еслибывнезапноинженерыиз苹果решили,чтосвойство的backgroundColorкласса的UIViewчересчурдлинноеизаменилиегонаBGCOLOR,поставиввсехпередфактомсочереднымобновлением? Страшнопредставить,всколькихместахпридетсяменятькод,чтобыпростоскомпилироватьпроект。 Новсе-такиправокпроектыскомпилируются Такимиужаснымипоследствиямиможетобернутьсянарушениезакрытости。 Еслиперефразироватьэтучасть,классдолженоставатьсядоступнымдляиспользованиявдругихклассах。 Адляэтогоегопубличныйинтерфейс(поведение)надежнеевсегозафиксировать(закрытьотизменений)。
Открытость
Чтожетеперь,зафиксироватьинтерфейсыинедобавлятьничегонового? Конечнонет,мыдолжнырасширятьклассы,делаяихболеефункциональными,имыможем, ведьоние 。 Возвращаяськэппловскимклассам,расширениемможноназватьвесьфункционал,околокотороговынайдетемакросNS_AVAILABLE(которыйобозначаетдоступностьсопределеннойверсииОС)。 Приэтомповедениестарыхметяднеменяется,какисамогоклассавцелом。 Такжерасширениеможетосуществлятьсяспомощьюнаследования:уклассов的UIImageViewили的UIScrollViewнамногобольшевозможностей,чемупростого的UIView,ноприэтомбазовоеповедениенеизменилось,мыуверенывэтом,чтопозволяетбезтрудазаменитьнанихвсе的UIViewвпроекте。 (чтотакжеявляетсяпримеромпринципаподстановки,окоторомпоговоримпозже)。 И,наконец,расширениефункциональностипрекраснореализуетсяспомощьюпротокола:объявиввнеминтерфейс,можносоздаватьсколькоугодновсеболееиболеесовременныхреализаций,отвечающихэтомуинтерфейсу。
应用程序:数据存储
删除:您需要先删除хранитьданныепользователя。 Выполнимеессамогоначала。 数据仓库(DataStore),数据仓库(отвечающийзалокальноехранение)中的Выделивответственностьизконтроллера。 Насталовремяреализоватьсохранениемоделипользователя,和самыйпростойспособ—照片作者
Вывод
Принципоткрытостизакрытостипозволяетстроитьсистемутакимобразом,чтобыеёлегкобыломасштабироватьвбудущем,незатрагиваяприэтомфункциональностьужесуществующихчастей。 Приэтомнетнеобходимостипытатьсяпредусматриватьвсёзаранее。 Можносказать,чтоэтонекаярекомендацияобизоляциикомпонентовмодулей, Втожевремя,принципнестоитвосприниматькритично,создаваяабстракциивезде和гдетольковозм。 Наиболееправильнаярекомендация:создаватьабстракции,