我目前的申请结构是:
- 模型组装
- 数据组装
- 定义由 ORM 实现的存储库接口
- ORM 组装
- 从数据组装实现存储库接口
- 使用统一(IoC 容器)注册
Data.IRepository<>
到ORM.GenericRepository<>
- 商务组装
- 引用数据和模型程序集
- 使用统一来解决类型
IRepository<>
- 界面组装
- 引用业务程序集
这种结构从本质上将业务层与实现IRepository<T>
.
这种解耦结构的好处之一是我应该能够相对轻松地替换 ORM - 例如,从实体框架迁移到 NHibernate 或只是升级现有的 ORM。我目前首先使用 EF 4.1 代码,并且正在为 NHibernate 构建另一个程序集。
我正在考虑实施工作单元模式。
我读过这个模式应该在业务层中使用(在我的数据程序集中定义接口,并在 ORM 程序集中实现,就像我对存储库模式所做的那样)。目前,所有实例化的存储库都有自己的 DbContext / session,并且它的生命周期设置为存储库的生命周期 - 这可能很糟糕 - 我的问题是我不确定是否可以实现一个可以使用的工作单元模式不同的ORM(更确切地说,它可能是,我只是跟不上速度)。
这是唯一想到的:
在我的数据程序集中创建具有函数的 IUnitOfWork: object GetCurrentSession();
,然后在 ORM 程序集中的存储库的构造函数中有一个参数,并将其转换为适当的会话/DbContext(如果 NHibernate 然后是 ISession,如果是实体框架然后是 DbContext)
如果有人对这种情况有所了解,我将不胜感激。