固体-iOSразработке。 Принципоткрытостизакрытости

Ктобымогподумать,чтодвапротивоположныхпосмыслусловаокажутсярядом,образоваводинизосновныхпринциповпроектированияобъектно-ориентированногодизайна。 Напервыйвзглядтакоесловосочетаниеможетпоказатьсябессмыслицей。 Давайтевзглянемнаформулировку:

Программныесущности(классы,модули,функцииит.п.)должныбытьоткрытыдлярасширеииннозак

1988年ИменновтакомвидепринциппоявилсявкнигеБертранаМейераеевдалеком。 ПозжеРобертМартинпопуляризовалего,включиввсвоюизвестнуюаббревиатуруSOLIDподбуквойО。

Пожалуй,единственноо,чтостановитсяяснымпослепрочтенияэтогоопределения,этотоечтот Ночтоимеетсяввиду-по-прежнемунепонятно。

Закрытость

Начнемсзакрытостидляизменений。 Выкогда-нибудьзаходиливхедерыклассовот苹果,пытаясь(восновномслучайно)тамчто-тоизменить? Xcodeсразужесообщал,чутьлинецитируявышеупомянутуюформулировку,чтоданныйкларосзакрыт,ментель。 :тоиестьзакрытость:интерфейсыпривычнынам,потомучтоонинеизменны。 Мыпользуемсяимикаждыйдень,знаянаизустьназванияметодовисвойств。 Нопредставьте,еслибыназванияиливходныепараметрыуметодовменялисьскаждымобновлением。 Смоглибымыпомнитьих? Врядли,ноэтодаженесамоестрашное。 Чтобылобысмногочисленнымипроектамиповсемумиру,еслибывнезапноинженерыиз苹果решили,чтосвойство的backgroundColorкласса的UIViewчересчурдлинноеизаменилиегонаBGCOLOR,поставиввсехпередфактомсочереднымобновлением? Страшнопредставить,всколькихместахпридетсяменятькод,чтобыпростоскомпилироватьпроект。 Новсе-такиправокпроектыскомпилируются Такимиужаснымипоследствиямиможетобернутьсянарушениезакрытости。 Еслиперефразироватьэтучасть,классдолженоставатьсядоступнымдляиспользованиявдругихклассах。 Адляэтогоегопубличныйинтерфейс(поведение)надежнеевсегозафиксировать(закрытьотизменений)。

Открытость

Чтожетеперь,зафиксироватьинтерфейсыинедобавлятьничегонового? Конечнонет,мыдолжнырасширятьклассы,делаяихболеефункциональными,имыможем, ведьониеВозвращаяськэппловскимклассам,расширениемможноназватьвесьфункционал,околокотороговынайдетемакросNS_AVAILABLE(которыйобозначаетдоступностьсопределеннойверсииОС)。 Приэтомповедениестарыхметяднеменяется,какисамогоклассавцелом。 Такжерасширениеможетосуществлятьсяспомощьюнаследования:уклассов的UIImageViewили的UIScrollViewнамногобольшевозможностей,чемупростого的UIView,ноприэтомбазовоеповедениенеизменилось,мыуверенывэтом,чтопозволяетбезтрудазаменитьнанихвсе的UIViewвпроекте。 (чтотакжеявляетсяпримеромпринципаподстановки,окоторомпоговоримпозже)。 И,наконец,расширениефункциональностипрекраснореализуетсяспомощьюпротокола:объявиввнеминтерфейс,можносоздаватьсколькоугодновсеболееиболеесовременныхреализаций,отвечающихэтомуинтерфейсу。

应用程序:数据存储

删除:您需要先删除хранитьданныепользователя。 Выполнимеессамогоначала。 数据仓库(DataStore),数据仓库(отвечающийзалокальноехранение)中的Выделивответственностьизконтроллера。 Насталовремяреализоватьсохранениемоделипользователя,和самыйпростойспособ—照片作者

Вывод

Принципоткрытостизакрытостипозволяетстроитьсистемутакимобразом,чтобыеёлегкобыломасштабироватьвбудущем,незатрагиваяприэтомфункциональностьужесуществующихчастей。 Приэтомнетнеобходимостипытатьсяпредусматриватьвсёзаранее。 Можносказать,чтоэтонекаярекомендацияобизоляциикомпонентовмодулей, Втожевремя,принципнестоитвосприниматькритично,создаваяабстракциивезде和гдетольковозм。 Наиболееправильнаярекомендация:создаватьабстракции,