我正在开发一个实现多层模式的应用程序,其中MySQL用于持久化。有一个WCF服务,它提供数据访问和DTO。
此外,我还计划实现以下模式:- DTOs 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中的项目文件夹。内框是C#项目
在继续编写代码和在实际实现中花费更多时间之前,我只想得到一些关于我的项目的结构/架构的反馈。
我想问以下几个问题:
很抱歉这么长的帖子,但我认为最好把我的问题合并到一个帖子中,并在其中提供项目结构。
谢谢您的任何回答。
问候
发布于 2013-04-02 15:42:00
您提议的结构与我们两年前在生产中部署的应用程序之一非常相似(比照)。它可以工作,但您必须仔细设计域模型,在不同的有界上下文中分离应用程序的各个方面。
以下是我自己的答案:
在你开始之前,我想你应该问自己一些问题:
最后,如果您真的需要DDD,并且您是新手,您会发现Epic造型模式很有用(免责声明,我是Epic之一,在过去5年的DDD试用和错误中我都设计了它们)。
发布于 2013-04-02 14:20:46
我一个接一个地回答
1)它取决于应用程序的复杂性。如果您正在从事复杂领域的工作,那么遵循域驱动设计是很好的。
2)如果你说的是BLL,它应该只考虑业务逻辑,而不是任何技术细节,比如会话、安全性。
3)服务器端有域对象是很好的。它提高了可重用性。
4)不应在外部公开域对象。DTO是更好的选择。您可以使用Automapper进行所有与映射相关的工作
5)根据范围对每个组件进行验证是很好的
6) DTO会更好
此外,您还可以使用WCF以外的服务堆栈,因为它建立在行业最佳实践的基础上。
https://stackoverflow.com/questions/15765429
复制相似问题