Как реализовать принцип Open-close в указанной ниже ситуации - PullRequest
0 голосов
/ 02 декабря 2018

Мне известен принцип Открытого закрытия как части шаблонов объектно-ориентированного проектирования SOLID.У меня есть ситуация, когда у меня есть существующий класс POJO Employee с 10 полями, его методами получения и установки, переопределенными эквивалентами и методом хэш-кода.У меня есть новое требование добавить еще 5 полей в этот старый класс Employee.Просто хотел узнать мнение по этому поводу о том, как поступить в такой ситуации?Простой способ - добавить новые 5 полей в существующий класс сотрудников и добавить его в методы получения и установки и, таким образом, реализовать расширенную функциональность.Однако принцип открытого закрытия говорит, что вы не должны трогать существующий код и пытаться создать новый, расширяя существующий без изменения существующего кода.

Может кто-нибудь подсказать мне, как это сделать?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Посмотрев на страницу википедии принципа Открыто-закрыто, я нашел две цитаты из Бертрана Мейера:

Считается, что модуль открыт, если он еще доступен для расширения.Например, должна быть возможность добавить поля к структурам данных, которые он содержит, или новые элементы к набору функций, которые он выполняет.

Считается, что модуль закрыт, если [он] доступен для использованиядругими модулями.Это предполагает, что модулю было дано четкое, стабильное описание (интерфейс в смысле скрытия информации).

Используя эти правила, тогда ответ на ваш вопрос:Класс сотрудников уже используется на производстве.Если класс Employee уже используется другими классами в производственной среде, он считается «закрытым» и недоступным для изменения.Если класс Employee не используется другими производственными классами, он считается «открытым» и может быть изменен.

Источник: Википедия

0 голосов
/ 02 декабря 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...