Должны ли интерфейсы быть в отдельном проекте от их реализации? - PullRequest
9 голосов
/ 28 октября 2009

Мой вопрос не столько об использовании интерфейсов, сколько об организации проекта.

Примечание. Я использую VisualStudio в многослойном приложении.

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

Для пояснения на примере: предположим, у меня есть интерфейс бизнес-уровня с именем IBusinessService, который находится в пространстве имен MyApp.Business.Services. Моя реализация FooBusinessService будет существовать в том же пространстве имен, но в другом проекте в VisualStudio. Если впоследствии реализацию необходимо будет переработать, разработчик может удалить ссылку на FooService.proj и заменить ее ссылкой на BarService.proj.

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

1 Ответ

11 голосов
/ 28 октября 2009

Я с тобой. Я предпочитаю размещать свои интерфейсы в отдельном проекте И в другом пространстве имен. Классический пример - с классами доступа к данным. Вы хотите иметь возможность кодировать версию MSSQL и версию MySQL, оба реализующие один и тот же интерфейс. Поэтому я предпочитаю, чтобы определение интерфейса находилось в отдельной сборке / проекте. Вот пример того, как я размещаю сборки и пространства имен:

  • Elder.DataAccess.Core - содержит интерфейсы и общие утилиты
  • Elder.DataAccess.MSSQL - специфичные для MSSQL реализации интерфейсов
  • Elder.DataAccess.MySQL - конкретные реализации интерфейсов MySQL

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

...