Должны ли интерфейсы быть в отдельном проекте от их реализации?

StackOverflow https://stackoverflow.com/questions/1636970

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top