2011-01-26 4 views
10

Есть ли стандарт для того, как решения/проекты организованы в отношении интерфейсов и классов, которые их реализуют? Я работаю над MVP, DDD-приложением и хотел бы услышать отзывы о том, как другие компонуют свои проекты и почему они это делают. Благодаря!!Должны ли интерфейсы жить в одном и том же пространстве имен как конкретные классы, которые их реализуют?

ответ

10

Они должны жить в пространстве имен, которое для них логично; это означает, что нет твердого правила для того, должны ли они находиться в одном и том же пространстве имен. Вы обнаружите, что относительно абстрактные пространства имен часто не живут рядом с их реализацией, тогда как интерфейсы, которые более 1: 1 со своими разработчиками, с большей вероятностью останутся рядом друг с другом.

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

4

Проверьте рисунок Мартина Фаулера на Separate Interfaces, это может помочь вам решить, где их разместить.

+1

+1 Интересно, что я знал трис как [принцип инверсии зависимостей (pdf)] (http://www.objectmentor.com/resources/articles/dip.pdf). –

+0

Устранил мое сомнение в этой ситуации: http://stackoverflow.com/questions/5840219/why-should-we-place-interfaces-with-classes-that-use-them-rather-than-those-that –

1

Разумеется, нет убедительных оснований для этого.

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

Я не слишком уверен в C#, но в Java членство в пакетах является важным организационным шаблоном для обеспечения видимости метода. Если вы хотите использовать пакетные приложения, вам в основном придется группировать классы реализации вместе в одном пакете (так что вы, вероятно, не сможете объединить их с интерфейсами).

+0

Правильно, я создавал свои проекты с пространством имен для объектов домена и другим пространством имен для своих интерфейсов. Я смотрел несколько примеров проектов в Интернете и заметил, что они объединили свои интерфейсы объектов домена и конкретные реализации вместе и просто хотят узнать, так ли это в большинстве случаев. – Cognitronic