我一直在尝试使用实体框架开发带有 WinForms 应用程序的 N 层设计。
下面的示例流程对于使用实体框架在 n 层设计中保存新记录是否正确?
表示层
A) UI 执行光屏输入数据验证。然后 UI 将视图模型转换为 DTO 并将其传递给应用程序层。
应用层
A) 应用层将 DTO 发送到领域层中的领域模型
领域层
A) 在创建域模型 SoftwareRequest 实体的新实例之前,验证符合业务规则的传入 DTO 值。
B) 如果所有值都已验证,则创建域模型 SoftwareRequest 实体的新实例。
C) 退出以将控制权返回给应用层
应用层
A) 调用基础设施层 SoftwareRequest Repository 并传入由域模型提供的新域模型 SoftwareRequest 实体
基础设施层数据访问
A) SoftwareRequest Repository 从应用层接收新的域模型 SoftwareRequest 实体。
B) 将新的域模型 SoftwareRequest 实体添加到实体框架 DBContext - context.SoftwareRequests.Add(NewDomainModelEntity)
C) 保存新实体 - context.SaveChanges()
D) 退出以将控制权返回给应用层
应用层
A) 将保存操作的结果转换为 DTO
B) 退出以使用包含添加新 SoftwareRequest 的结果的 DTO 将控制权返回给 UI
用户界面
A) 将收到的 DTO 转换为 View Model
B) 在屏幕上显示视图模型数据,显示添加新软件请求的结果
--------- 以下信息于太平洋标准时间 2016 年 2 月 22 日上午 6:49 添加 ---------
依赖总结:
表示层 - 引用应用层来发出请求 - 引用域层仅用于使用描述 DTO 的接口,这些 DTO 将从 UI 发送或从应用层接收
应用层 - 引用描述 DTO 的域层接口。还使用域模型实体的接口定义,因此它可以将来自基础设施层的实体响应转换为返回给 UI 的 DTO。此处还引用了基础设施层数据访问,因此在涉及的域模型实体已通过域层验证规则和值之后,可以访问存储库以执行 CRUD 操作。
域层 - 没有对上面或下面的任何层的引用。没有来自任何层的依赖注入服务。这不包括涉及具有基础设施存储库的 CRUD 的任务。所有请求(例如规则验证)都会收到 DTO,其中包含执行请求的域任务所需的所有信息。
Infrastructure Layer Data Access - 引用描述域模型实体的域层接口,这些实体用于在存储库中执行实体框架操作(即 CRUD 操作)。还参考域层来定义存储库的接口,这些接口在基础设施层数据访问中实现。该层不使用 DTO。该层通常以域模型实体响应应用层。应用层将所有域模型实体响应(即 IEnumerable)转换为 DTO,然后发送回 UI。