C# 干净的体系结构和ORM的使用

C# 干净的体系结构和ORM的使用,c#,design-patterns,orm,repository,C#,Design Patterns,Orm,Repository,我试图将我的应用程序分为3层(数据层、域层、表示层), 数据层正在使用ORM(XPO-DevExpress)。 领域层对数据库技术或ORM技术是100%不可知的。 数据层和域层由IRepository接口分隔 public interface IRepository<T> { void Insert(T entity); void Delete(T entity); IQueryable<T> GetAll(); T

我试图将我的应用程序分为3层(数据层、域层、表示层), 数据层正在使用ORM(XPO-DevExpress)。 领域层对数据库技术或ORM技术是100%不可知的。 数据层和域层由IRepository接口分隔

public interface IRepository<T>   
{  
    void Insert(T entity);  
    void Delete(T entity);  
    IQueryable<T> GetAll();  
    T GetById(int id);  
}  
公共接口IRepository
{  
无效插入(T实体);
无效删除(T实体);
IQueryable GetAll();
T GetById(int-id);
}  
在表示层中,我有一个包含网格控件和3个按钮(添加、修改、删除)的表单

我的第一个问题是:当我从数据库中添加或删除记录时,如何使网格控件刷新而不重新加载所有数据?(更改通知)

第二个问题是:如何利用ORM的强大功能,同时使我的领域层不可知

当我从数据库中添加或删除记录时,如何使网格控件刷新而不重新加载所有数据?(更改通知)

考虑域事件和事件聚合器

public class ThingCreatedEvent : DomainEvent
{
    public int NewThingId;
}
…如何利用ORM的强大功能,同时使我的领域层不可知

您的数据层正在执行以下操作:

public class XpoRepository<T> : IRepository<T>
{
}
公共类XpoRepository:IRepository
{
}

将XpoRepository放在哪里?如果您将其放在域层中,那么域层就知道您正在使用XPO ORM。我希望我的领域是不可知的。(干净的架构)当然。接口可以位于域层或单独的数据接口层中,但实现将位于引用域层及其接口的特定于实现的程序集中。类似于YourApp.Data.Xpo或YourApp.Data.EntityFramework的“干净”体系结构是六边形/端口和适配器的同义词。XPO实现是一个可以插入数据访问端口的适配器。