
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
![]() |
۩
Дата
|
![]() ![]() орангутанг ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 2120 Пользователь №: 36605 На форуме: Карма: 115 ![]() |
Как это ты не видишь? Там четко показано,
class NameView По сути тут если мы добавляем еще кучу всего, мы его должны изменять, но согласно открытия закрытия, мы не должны менять его, так как это не та причина для изменения, следовательно архитектура построена не верно, то есть требуется рефакторинг В результате у нас получается class NameView Что правильно, и теперь следуя принципа мы пишем только новый код, и не трогаем текущий, то есть тут уже архитектура верная |
![]() |
[x]
Дата
|
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 753 Пользователь №: 32032 На форуме: Карма: 18 ![]() |
Вот нашел ещё пример
http://binary.freeperspective.net/countzer...-design-in-php/ Постарался сделать что-то похожее, чтобы было проще разобраться. Надеюсь получилось. Проблемный класс. Кол-во типов ограничено двумя типами. Третий не проходит проверку. Чтобы добавить третий тип придется изменять базовый класс. class Person Следуя принципу Open/Close Principles, появляется возможность добавлять неограниченное кол-во типов при этом не изменяя базовый класс. abstract class AnyPerson |
![]() |
[x]
Дата
|
||
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 753 Пользователь №: 32032 На форуме: Карма: 18 ![]() |
Хотелось бы ещё обратить внимание на некоторые моменты. 1. Рабочий пример (на примрере ТС) несоответствующий OCP. Как видно, класс Manager расширяет класс Person. По условию все классы наследники Person - 'employee', что неправильно и требует изменений. class Person 2. Рабочий пример (на примрере ТС) соответствующий OCP (не полностью). Как видно, все классы расширяющие класс Person, возвращают требуемый результат, кроме одного - класс Worker. А если применить абстрактный класс и абстрактный метод, тогда класс Worker не останется без внимания. class Person |
||
![]() |
۩
Дата
|
![]() ![]() орангутанг ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 2120 Пользователь №: 36605 На форуме: Карма: 115 ![]() |
ты не прав тут
Worker это частный случай Person , и если он возвращает Person значит верно всё. |
![]() |
![]() ![]() ![]() |