Это хорошая идея, чтобы создать интерфейс для каждого объекта домена? - PullRequest
2 голосов
/ 11 мая 2010

Я просто просматривал исходный код существующего проекта, который использует nHibernate , и обнаружил, что для каждого класса сущностей созданы интерфейсы. Например, IКлиент для Заказчик класс. Мне просто интересно, что может быть преимуществом этого шаблона, так как ICustomer содержит в основном свойства и очень мало методов.

Ответы [ 2 ]

9 голосов
/ 11 мая 2010

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

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

1 голос
/ 14 мая 2010

Я не согласен с предыдущими комментариями ... Хотя, в сочетании с такими шаблонами, как Inversion of Control (IoC) и Dependency Injection, это значительно облегчает изоляцию таких слоев друг от друга. Это упрощает модульное тестирование, макетирование, а также может привести к более слабосвязанным архитектурам. Это по-прежнему может быть достигнуто без интерфейсов, хотя вам нужно убедиться, что вы не закрываете свои классы и не делаете членов виртуальными, чтобы потом можно было все же имитировать, генерировать перехватываемые прокси и т. Д. Наконец, использование интерфейсов вынуждает вас отбрасывать предположения, связанные с любым одна конкретная реализация и вместо этого сосредоточиться на контракте, представленном определением интерфейса.

...