В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Поместите свои объекты области и интерфейсы в отдельном "доменном" блоке.
Этот блок ни на что никогда не должен ссылаться кроме базовых блоков .NET.
Таким образом, Вы получаете чистое разделение от своего домена/модели услуг и своей реализации.
Править:
http://jeffreypalermo.com/blog/the-onion-architecture-part-1/
Я предпочитаю сохранять наиболее распространенные или простые реализации интерфейса в подпапке (и пространство имен) после названия интерфейса.
\project\ \project\IAppender.cs \project\Appender\ \project\Appender\FileAppender.cs \project\Appender\ConsoleAppender.cs
Если я расширяю этот класс вне проекта. В специальном проекте повторите папки/пространство имен так же.
\specialproject\ \specialproject\Appender\ \specialproject\Appender\MemoryAppender.cs
Я не поместил бы интерфейсы в отдельный блок только ради него. Однако, если интерфейсы принимают участие в какой-либо форме IPC или архитектуры расширяемости затем, часто имеет смысл давать им их собственный блок.
Если у Вас будут проекты, которые должны сослаться друг на друга, то да, Вам будет нужен отдельный блок для интерфейсов, но необходимо также тщательно исследовать архитектуру, чтобы видеть, существует ли другой способ разрешить круговую зависимость.
В проекте я продолжаю работать прямо сейчас, интерфейсы и связанные базовые классы входят в блоки, которые логически разделены между функциями. Реализации этих поставщиков и классов входят в базовый блок. Так как идея - это люди, которые используют наш API, может сослаться на больше или один из API dlls ясным и логическим способом.
Для малых приложений не нужен этот вид разделения. Но, неважно, где я сохраняю интерфейсы, я сохранил бы их в том же пространстве имен как любые базовые классы.