Я следую за книгой для модели Driven Driven в C# .NEt. У меня есть циклическая зависимость между инфраструктурой и уровнем домена (оба - проект библиотеки классов моего решения, а именно «ShareManagement»). Я хочу знать, как я могу избавиться от проблемы циклической зависимости в Visual Studio/C# .NET.Циклическая зависимость между инфраструктурой и слоями моделей/проектами DDD
Зависимость модели от инфраструктуры слоя: Определенно, Домен Слой использует инфраструктуру слой таким образом, чтобы объекты в модели слое зависит (вызовы) объектов в инфраструктуре слое (например, Хранилище, определенное в инфраструктуре слое доступны из домена модель слоя, используя ICompanyRepository, который реализует IRepository, определенный в уровне инфраструктуры).
Зависимость от инфраструктуры на класс Domain Model: Однако в инфраструктуре слоя, мой Entity Framework (Entity Factory) необходимо реализовать IEntityFactory где Т EntityBase (класс Entity в Domain Model Layer, полученного из EntityBase в Infrascture слоя; EntityBase - это базовый класс для всех объектов).
// Ниже приводится класс в infrasture слое (в разделе «Хранилища» папка)
using System.Text;
using System.Data;
using ShareManagement.Model.Company; // How to do this ??
ShareManagement.Infrastructure.EntityFactoryFramework;
namespace ShareManagement.Infrastructure.Repositories
{
internal class CompanyFactory: IEntityFactory<Company>
//Company is defined in Model Layer and derived from Abstract Base class "EntityBase"
//So, how to use "using ShareManagement.Model.Company" ?
{
}
}
Строго говоря, домен не должен зависеть от какой-либо инфраструктуры или служб уровня приложения. Может быть, статья [луковая архитектура] (http://jeffreypalermo.com/blog/the-onion-architecture-part-1/) станет хорошей ссылкой для этого. –
Как вы можете сказать, что когда слой модели домена содержит классы сущностей, все из которых получены из общего базового класса «EntityBase», который определен в слое InfraStructure и, согласно моим знаниям, для декалирования «с использованием myProjectName.Infrastructure.DomainBase»; в слое модели домена мы должны добавить ссылку/зависимость в проекте уровня модели домена в уровень инфраструктуры. Смотрите ниже код, в котором я должен использовать пространство имен ( с использованием системы; использованием SmartCA.Infrastructure.DomainBase, использованием SmartCA.Model.Companies; пространства имен SmartCA.Model.Projects { общественного класса договора: EntityBase { –
Снова, строго говоря, сущности не должны выводиться из базового класса (если вы не моделируете отношения, требующие наследования). Вы также просмотрели статьи, которые я связал? –