Должен ли каждый класс домена Java реализовывать интерфейс? - PullRequest
2 голосов
/ 03 декабря 2010

Я просматривал еще один Java-проект, выполненный в моей компании, и в этом проекте разработчики создали интерфейс для практически любого доменного объекта (их сотни).В некоторых случаях я думаю, что абстракция работает, но в других случаях это не кажется необходимым в данный момент.

Всякий раз, когда экземпляры передаются, к ним всегда обращаются и получают доступ через интерфейс.

Это чушь из-за слишком большого количества проверок на будущее?или это здравая инженерная практика?

Ответы [ 6 ]

3 голосов
/ 03 декабря 2010

Интерфейсы определяют требуемое поведение без реализации.Они позволяют вам менять реализации, не влияя на клиентов.Они могут быть особенно полезны для таких методов, как аспектно-ориентированное программирование или генерация прокси.

Но если реализация не изменится, я не вижу оправдания для интерфейса.

Большинство объектов модели попадают в этокатегория.Если нет различий в реализации, не используйте интерфейс.

Интерфейсы великолепны для сервисов и классов персистентности, но я никогда не видел, чтобы они использовались для абстрагирования объектов модели.

3 голосов
/ 03 декабря 2010

В первую очередь интерфейсы, очевидно, являются инструментом проектирования, объединяющим разнородные классы с общими чертами.

Но тогда интерфейсы, подобные упомянутым, также могут очень помочь при написании модульных тестов.Такие инструменты, как easymock , отлично работают с интерфейсами.

Лично мне нравится иметь интерфейсы для сервисов, но не обязательно доменные объекты, в зависимости от того, насколько "богаты" доменные объекты.Если они, например, выполняют много функций в файловой системе или действительно тесно связаны со слоем services / dao, я, вероятно, создам там и интерфейсы - чтобы упростить юнит-тесты.

2 голосов
/ 03 декабря 2010

Хорошее правило: не вводите абстракцию ради абстракции. Делайте это только в том случае, если это как-то разрешит ваш проект. Если это облегчает ваше модульное тестирование, или облегчает обновления, или позволяет внедрять зависимости и т. Д. Не усложняйте ваш проект, который полезен.

Для доменных объектов, если они являются POJO, то на самом деле нет никакой пользы от создания интерфейсов из них. Если они не POJO, то я бы сказал, что они не могут быть объектами домена ... но я думаю, это другой аргумент.

1 голос
/ 03 декабря 2010

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

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

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

Список можно продолжать и продолжать.Код для интерфейсов.Ваш код будет лучше для этого.

1 голос
/ 03 декабря 2010

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

0 голосов
/ 03 декабря 2010

Нет.Если вы говорите, что интерфейс был создан для каждого домена, то какой в ​​этом смысл?Интерфейсы на самом деле полезны только для группировки нескольких классов и представления общего поведения.

Абстракция иногда переоценивается и может быть легко переопределена.

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