Теоретическая точка зрения
Принцип открытия / закрытия как у целого ТВЕРДЫЙ равен Utopia
.Мы должны постоянно обновлять наш код в этом направлении, но, вероятно, мы никогда не окажемся там, потому что это невозможно.Давайте прочитаем статьи ниже, чтобы увидеть, как классические конструкции getters
и annotation
могут быть дискуссионными.
- Принтеры вместо получателей
- Java-аннотацииБольшая ошибка
Практическая точка зрения
Как и любой практический программист, мне нравится использовать хорошие инструменты для решения проблем вместо того, чтобы самому реализовывать что-то новое.Когда меня просят сериализовать данную модель в JSON
файлах, я проверяю, является ли она:
- с открытым исходным кодом
- Fast
- В процессе активной разработки
- Легко использовать
Когда мы говорим о Jackson
и его аннотациях, я думаю, мы можем найти золотую середину между теорией и практикой.И это благодаря функции MixIn
.Вы можете отделить модель от способа сериализации до JSON
.Конечно, когда вы добавляете новый класс, который расширяет базовый класс, вам нужно заменить MixIn
interface
аннотациями, но это цена, которую мы должны заплатить.
Изменить или Почему я забыл ответить на вопрос?
Извините, я забыл ответить на вопрос, нарушает ли приведенный выше пример Open/Closed principle
или нет.Во-первых, получите определение из Wikipedia
article :
Класс закрыт, так как он может быть скомпилирован, сохранен в библиотеке, базовым и использован клиентскими классами.Но он также открыт, поскольку любой новый класс может использовать его как родительский, добавляя новые функции.Когда класс-потомок определен, нет необходимости менять оригинал или беспокоить его клиентов.
Приведенный выше пример нарушает When a descendant class is defined, there is no need to change the original
часть.Даже если мы используем MixIn
, необходимо изменить другую часть приложения.Более того, если ваше решение использует annotations
в 99,99% случаев, вы нарушаете эту часть, поскольку необходимо каким-то образом настроить функциональность, которая скрыта за ними.