Общие определения в слабосвязанной конструкции - PullRequest
1 голос
/ 10 марта 2011

Я пытаюсь собрать очень гранулированный рыхлый дизайн.

Но я не могу решить, как обращаться с общими определениями.

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

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

Какой самый прагматичный способ?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 марта 2011

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

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

Надеюсь, это поможет хотя бы немного:)

0 голосов
/ 10 марта 2011

РЕДАКТИРОВАТЬ

Извините, мне кажется, я изначально неправильно понял ваш вопрос.Итак, у вас есть одна сборка, которая содержит ваши интерфейсы, и у вас есть свои реализации в других сборках, использующих DI для создания ваших зависимых объектов.Я склонен создавать базовую сборку в своем приложении, которая содержит основные поведения приложения (умные сущности, перечисления и интерфейсы).Эта сборка мало что зависит, но сильно зависит от остальной части приложения.Проверьте этот проект в качестве примера - whocanhelpme.codeplex.com.Вы можете назвать это ядро ​​раздутым, но оно, по определению, должно быть очень богатым.


Вы можете обнаружить, что многие из ваших абстрактных модулей следуют общим шаблонам проектирования.Вот сайт, который дает хорошее описание каждого из них - вы можете получить имена из них (Observer, Factory, Adapter и т. Д.):

http://www.dofactory.com/Patterns/Patterns.aspx

...