我正在开发一个实现多层模式的应用程序 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#项目
在我继续编码并在实际实施中花费更多时间之前,我只是 想得到关于我的项目的结构/架构的一些反馈。
我正在围绕以下问题解决:
对于这篇长篇文章感到抱歉,但我认为将我的结合起来会更好 将问题分成一个帖子并提供项目结构。
提前感谢任何答案。
此致
答案 0 :(得分:3)
您建议的结构与我们2年前在生产中部署的应用程序非常相似( mutatis mutandis )。它有效,但您必须仔细设计域模型,在不同的有界上下文中分离应用程序的各个方面。
所以这些是我自己的答案:
在你开始之前,我想你应该问自己一些问题:
最后,如果你真的需要DDD,并且你是新手,你会发现Epic's modeling patterns很有用(免责声明,我是Epic开发者之一,我在过去的5年中设计了所有这些DDD试验和错误)。
答案 1 :(得分:0)
我将逐一回答
1)它取决于应用程序的复杂性。如果您正在开发复杂的域,那么可以遵循域驱动设计
2)如果你说BLL,它应该只关注业务逻辑而不是任何技术细节,如会话,安全性。
3)在服务器端拥有域对象很好。它促进了可重用性
4)您不应该在外面公开域对象。 DTO是更好的选择。您可以将Automapper用于所有与映射相关的工作
5)根据范围
,在每个组件中进行验证是件好事6)DTO会更好
此外,您可以使用服务堆栈而不是WCF,因为它基于行业最佳实践。