我正在开发一个实现多层模式的应用程序,其中 MySQL 用于持久性。有一个 WCF 服务提供对数据的访问并提供 DTO。
此外,我计划实现以下模式: - DTO - MVP(尚不确定是被动视图还是监督控制器) - 在适用的情况下针对接口编写代码
目前,我原始具有以下项目结构:
+-------------------------------+
| MySQL DB Server |
+------+------------------------+
^
| Uses Entity Framework 5.0
|
+
+-------------------------------------------------------------------------------+
| Application Server |
|-------------------------------------------------------------------------------|
|+------------------+ +----------------+ +--------------+ +--------------------+|
|| Data Access Layer| | Contracts | | Communication| | Business Layer ||
||------------------| |----------------| |--------------| |--------------------||
|| - EF 5.0 Entities| | - WCF Contracts| | - WCF Service| | - Actual Service ||
|| | | | | Hosts | | - Session management|
|| | | | | | | - Security and ||
|+------------------+ +----------------+ +--------------+ +--------------------+|
+-------------------------------------------------------------------------------+
^
| Communicates via DTOs which are acutally wrappers for Entities
| eg. GetUserByID() or SaveUser(userDTO)
|
|
+-------+-----------------------------------------------------------------------+
| Clients |
|-------------------------------------------------------------------------------|
|+-------------------+ +-------------------+|
|| Business Layer |+----------------------------------->| GUI (Winforms) ||
||-------------------| BLL receives DTOs and creates |-------------------||
|| -Provide WCF Servi| Domain Objects (eg. User) which are| -Implementation of||
|| ce Access | Processed by presenters and passed | View Interfaces ||
|| -Service Reference| to views where they are bound to | ||
|| -Implementation of| controls. | ||
|| Presenter Interf.| | ||
|+-------------------+ +-------------------+|
+-------------------------------------------------------------------------------+
+------------------------------------------------------------------------+
| General |
|------------------------------------------------------------------------|
|+---------------------+ +--------------------+ +-----------------------+|
|| DTOs | | Interfaces | | Library ||
||---------------------| |--------------------| |-----------------------||
|| -DTO Definitions | | -View Interfaces | | -General Helper Classe||
|| | | -Presenter Interf. | | s eg. Cryptography ||
|| | | -Domain Model IF. | | ||
|+---------------------+ +--------------------+ +-----------------------+|
+------------------------------------------------------------------------+
外框是 Visual Studio 中的项目文件夹。内盒是 C# 项目
在我继续编码并花更多时间在实际实现之前,我只是想获得一些关于我项目的结构/架构的反馈。
我正在思考以下问题:
- 上述结构是否符合“最佳实践”?例如。接口、DTO 的位置
- 可以有两个业务层还是将业务层拆分为客户端和服务器?服务器 BLL 旨在提供会话管理和安全等通用功能,而客户端 BLL 提供服务访问。它还控制其演示者的视图。
- 服务器端目前不知道域对象。在这里也使用它们会更好吗?这将导致我的实体映射到域对象,然后映射到 DTO
- 从 WCF 服务接收 DTO 是常见的还是我应该使用域对象(我知道这里已经讨论了很多,但据我了解,如果域对象不是那么复杂并且可以节省映射和编码,它将适用更改我的域对象和数据库时需要努力)这会不会导致非常难以维护的通信链,例如:实体<->域对象<->DTO<->域对象
- 你把验证放在哪里?我想将基本验证放入视图或演示者中(例如,格式化、null/not null 值,......),而主要验证进入域对象......?
- 在数据库中创建新记录时,假设是一个新用户,客户端是否也应该将新的 DTO 传递给服务器,还是创建一个接受简单数据类型(如字符串和 int)的服务方法更好?
很抱歉这篇长篇文章,但我认为最好将我的问题合并到一篇文章中并在其中提供项目结构。
提前感谢您的任何回答。
问候