Есть ли стандарт для того, как решения/проекты организованы в отношении интерфейсов и классов, которые их реализуют? Я работаю над MVP, DDD-приложением и хотел бы услышать отзывы о том, как другие компонуют свои проекты и почему они это делают. Благодаря!!Должны ли интерфейсы жить в одном и том же пространстве имен как конкретные классы, которые их реализуют?
ответ
Они должны жить в пространстве имен, которое для них логично; это означает, что нет твердого правила для того, должны ли они находиться в одном и том же пространстве имен. Вы обнаружите, что относительно абстрактные пространства имен часто не живут рядом с их реализацией, тогда как интерфейсы, которые более 1: 1 со своими разработчиками, с большей вероятностью останутся рядом друг с другом.
Более важным соображением является сохранение интерфейсов, потребляемых для повторного использования - обычно это означает больше внимания к тому, что входит в сборку наряду с интерфейсами, а не пространствами имен.
Проверьте рисунок Мартина Фаулера на Separate Interfaces, это может помочь вам решить, где их разместить.
Разумеется, нет убедительных оснований для этого.
Фактически, если пользователи интерфейса не должны знать конкретный класс, а также если существует несколько реализаций, и если группа, определяющая интерфейс, отличается от группы, реализующей определенную ее версию (все которые являются действительными случаями), то, вероятно, разумно разделить пространства имён реализации и интерфейса.
Я не слишком уверен в C#, но в Java членство в пакетах является важным организационным шаблоном для обеспечения видимости метода. Если вы хотите использовать пакетные приложения, вам в основном придется группировать классы реализации вместе в одном пакете (так что вы, вероятно, не сможете объединить их с интерфейсами).
Правильно, я создавал свои проекты с пространством имен для объектов домена и другим пространством имен для своих интерфейсов. Я смотрел несколько примеров проектов в Интернете и заметил, что они объединили свои интерфейсы объектов домена и конкретные реализации вместе и просто хотят узнать, так ли это в большинстве случаев. – Cognitronic
+1 Интересно, что я знал трис как [принцип инверсии зависимостей (pdf)] (http://www.objectmentor.com/resources/articles/dip.pdf). –
Устранил мое сомнение в этой ситуации: http://stackoverflow.com/questions/5840219/why-should-we-place-interfaces-with-classes-that-use-them-rather-than-those-that –