m.e*_*son 9 c# oracle entity-framework repository repository-pattern
我有一个实现接口的存储库IRepository.存储库对应用程序的实体框架(代表)执行查询,并直接返回生成的实体对象.
实现的重点IRepository是,将来可以将其切换为不同的存储库.但是,返回实体框架返回的确切实体对象将会破坏这一点.这可以接受吗?
因此,在将所有Entity Framework对象暴露给应用程序之前,它是否应该将所有Entity Framework对象转换为业务对象?这些对象应该实现接口还是具有公共基类型?
Mik*_*eSW 12
存储库接口应仅处理业务/域实体,即存储库仅发送和接收应用程序已知的对象,与底层持久性访问实现无关的对象.
EF或Nhibernate实体正在为持久性数据建模而不是域数据.因此,IRepository不应该返回一个对象,该对象是ORM的实现细节,而是一个可以由应用程序直接使用的对象(域实体或简化视图模型,具体取决于操作).
在存储库实现中,您将处理将映射到相应应用程序实体的ORM实体(通常使用AutoMapper等映射器).长话短说,在设计IRepository时忘记了它的实现.这就是为什么在决定是否使用ORM之前设计界面更好的原因.
基本上,存储库是app域上下文和persitence上下文之间的网关,应用程序不应该与存储库的实现细节耦合.