客户端到WCF服务的应用程序体系结构

时间:2012-06-13 21:05:38

标签: c# wcf architecture n-tier-architecture

我很好奇构建一个包含以下内容的应用程序的正确方法(需要重构):

Excel Addin COM-Visible客户端库,包括暴露给Excel的WinForms和方法(计算调用和表单激活方法) 然后,它使用客户端库中的功能连接到WCF服务。 WCF服务当前包含计算逻辑,验证逻辑,通过ORM工具访问数据库。

即。 Addin - >客户端DLL中的Winform / Direct调用 - > WCF - >数据库或计算

目前仅存在于2个项目中。我的第一个问题是重新设计如下:

客户端项目

  • Excel“View”(Project.Client.Excel),这限制了对一个项目的COM可见性级别。
  • WinForm“view”(Project.Client.UI)
  • 介绍两组“视图”(Project.Client.Presenter)

服务器端项目

  • WCF“视图”包括数据传输对象? (Project.Server.WCF或服务)
  • 服务器端演示者(Project.Server.Presenter)?
  • 业务逻辑(Project.Business)
  • 数据访问层(Project.DAL)

我的问题是:

  1. DTO应该放在哪里,在WCF项目中还是作为自己的库/项目?
  2. 实体转换例程属于哪里(数据实体<>业务实体<> DTO)?所有在业务逻辑层中还是在服务器演示者中有一些和一些?
  3. 这种方案的正确架构应该是什么?
  4. 很多其他我可能错过了?
  5. 重构的部分想法是纠正架构,分离关注点等,并将单元测试纳入设计中。

2 个答案:

答案 0 :(得分:0)

  

DTO应该放在哪里,在WCF项目中还是作为自己的库/项目?

您不希望它们出现在WCF项目中,因为这意味着客户端必须引用该服务器端项目。最好将DTO,WCF服务合同(接口)等保存在服务器和客户端项目都可以引用的单独“通用”项目中。

  

实体转换例程属于哪里?

数据实体< - >数据访问层中的业务实体;商业实体< - > DTO在业务逻辑中。当然,在所有层中使用您的数据实体也是完全可以接受的,从而无需使用所有这些不同的实体和映射代码来保持更新。我想这取决于系统的复杂程度,但请看一下EF4 POCO。

至于你的其他问题,在不了解更多关于你的要求和设计的情况下,你看起来与你的项目清单是对的。

答案 1 :(得分:0)

这就是我的结构,但这个问题没有100%正确答案。在让您的工作舒适之前,许多变化都是有意义的。

  • Excel“View”(Project.Client.Excel),这限制了对一个项目的COM可见性级别。
  • WinForm“view”(Project.Client.UI)
  • 介绍两组“视图”(Project.Presenter)
  • WCF主机(Project.Service) - 如果您在IIS中托管,则使用* .svc文件的网站(此处没有合同)。这里没有太多的业务代码,它只适用于在BLL中实现的托管方法。
  • 业务逻辑(Project.Business)
  • 数据访问层(Project.DAL)
  • 合同(Project.Contract) - 操作和数据合同。这是WCF客户端,服务器和BLL使用的库。
  • Shared(Project.Shared) - 更好地构建依赖关系的常用帮助程序。
  

DTO应该放在哪里,在WCF项目中,还是作为自己的   库/项目?

合同

  

实体转换例程属于哪里(数据实体<>   商业实体<> DTO)?全部在业务逻辑层中,还是在服务器主持人中有一些和一些?

中小型项目业务。

  

这种方案的正确架构应该是什么?

你似乎很好。

服务器端呈现器(Project.Server.Presenter) - 这对我来说没有意义,因为没有GUI可以使用它