Должны ли интерфейсы быть в отдельном проекте от их реализации?
-
06-07-2019 - |
Вопрос
Мой вопрос касается не столько использования интерфейсов, сколько характера организации проекта.
Примечание:Я использую VisualStudio в многоуровневом приложении.
Должны ли мои файлы интерфейса находиться в отдельном проекте от их реализаций? Моя первоначальная мысль заключалась в том, что было бы полезно выделить все мои сервисные интерфейсы в отдельный проект (и проект для моих первоначальных реализаций), чтобы в дальнейшем реализацию/конкретный проект можно было удалить и при необходимости заменить новым. .
Поясним на примере:Предположим, у меня есть интерфейс бизнес-уровня под названием IBusinessService, который находится в пространстве имен MyApp.Business.Services.Моя реализация FooBusinessService будет существовать в том же пространстве имен, но в другом проекте VisualStudio.Если позже реализацию потребуется переработать, разработчик может удалить ссылку на FooService.proj и заменить ее ссылкой на BarService.proj.
Кажется, что это наведет порядок в решении приложения, позволяя вам ссылаться на проект только с интерфейсами, не приобретая при этом конкретных реализаций (которые могут быть устаревшими или бесполезными для вас), но я что-то упускаю?
Решение
Я с тобой.Я предпочитаю размещать свои интерфейсы в отдельном проекте И в другом пространстве имен.Классический пример — классы доступа к данным.Вы хотите иметь возможность кодировать версию MSSQL и версию MySQL, реализующие один и тот же интерфейс.Поэтому я предпочитаю, чтобы определение интерфейса было в отдельной сборке/проекте.Вот пример того, как я размещаю сборки и пространства имен:
- Elder.DataAccess.Core — содержит интерфейсы и общие утилиты.
- Elder.DataAccess.MSSQL — конкретные реализации интерфейсов MSSQL.
- Elder.DataAccess.MySQL — конкретные реализации интерфейсов MySQL.
Это позволяет мне изменять реализации, не затрагивая проект, содержащий определения интерфейсов.Это также помогает мне с контролем версий и отслеживанием изменений.Могут быть и другие способы содрать шкуру с этой кошки, поэтому мне будет интересно услышать ответы других людей.