Куда относятся интерфейсы в многоуровневом приложении - PullRequest
3 голосов
/ 22 февраля 2010

Допустим, у вас есть трехуровневое приложение с уровнями пользовательского интерфейса, служб и репозитория для простого приложения, скажем, для сохранения адресов.

Если AddressService имеет интерфейс IAddressService, где этот интерфейс принадлежит? Я знаю, что «в адресной службе» может показаться очевидным ответом, но если он находится в адресной службе, то, похоже, он лишает смысла наличие интерфейса, так что любая сервисная библиотека может быть заменена, пока она реализует IAddressService.

(в частности, в проблемном пространстве .net, но, вероятно, оно более общее, поэтому оно имеет теговую архитектуру)

Ответы [ 4 ]

3 голосов
/ 23 февраля 2010

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

если это в адресной службе Казалось бы, победить точку имея такой интерфейс, что любой сервисная библиотека может быть заменена как Пока это реализовано IAddressService

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

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

1 голос
/ 22 февраля 2010

Поместите их в отдельную сборку, например AddressService.Interfaces или AddressService.Contracts, которая является общей для всех трех уровней.

0 голосов
/ 21 марта 2010

Я использую, чтобы поместить сервисные интерфейсы в сборку, а реализацию в другую. Мне никогда не требовалось это в .NET, но я все равно делаю это, я думаю, что это способ отделить пользовательский интерфейс (или другой клиент API) от реализации службы.

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

0 голосов
/ 23 февраля 2010

Я склонен размещать их в соответствующей сборке в подпапке / каталоге.

Например, если у меня есть Сборка клиентов, тогда ICustomerRepository или ICustomerAddressRepository и т. Д. Будут находиться под

.. Customers.Interfaces.ICustomerRepository

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