Учитывая проект кода, который должен придерживаться принципа SoC путем реализации слабо связанных слоев, наличия контейнера IoC и т. Д., Например, простое решение ASP.NET MVC, которое разделено на следующие сборки:
- Приложение сборка + пространство имен
- Модель сборка + пространство имен (содержит конкретный репозиторий для доступа к данным БД)
и где конкретный репозиторий в сборке Model должен реализовывать общий интерфейс IMyBusinessRepository
, в какую сборку вы бы поместили этот интерфейс?
1) Если вы поместите этот интерфейс в Модель сборки, есть вероятность, что было бы невозможно заменить эту сборку другой (по крайней мере, если у нее другое пространство имен) без изменения кода Application сборки.Кроме того, альтернативная реализация IMyBusinessRepository
, находящаяся в другой сборке, должна ссылаться на исходную (Argh!)
2) Если вы поместите ее в сборку Application , она будетневозможно использовать сборку Model в других проектах без ссылки на сборку Application (Argh!)
3) Или вы создадите отдельную общую сборку только для этого интерфейсаи в этом отношении для каждого общего интерфейса или набора интерфейсов?(Argh?)
Подводя итог, можно сказать, что X сборка должна быть легко заменяемой в приложении A (просто путем изменения ссылки) и многократно использоваться в приложениях B, C , D .