0

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

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

即 Addin -> Winform/Direct call in client DLL -> WCF -> DB or 计算

目前,这仅存在于 2 个项目中。我的第一个想法是重新架构如下:

客户端项目

  • Excel“视图”(Project.Client.Excel),这将COM可见性级别限制为一个项目。
  • WinForm“视图”(Project.Client.UI)
  • 两组“视图”的演示文稿 (Project.Client.Presenter)

服务器端项目

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

我的问题是:

  1. DTO 应该放在哪里,在 WCF 项目中还是作为他们自己的库/项目?
  2. 实体转换例程属于哪里(数据实体 <> 业务实体 <> DTO)?全部在业务逻辑层中还是有些在服务器演示者中?
  3. 这种方案的正确架构应该是什么?
  4. 还有很多我可能错过了?

重构的部分想法是纠正架构、分离关注点等,并允许将单元测试包含到设计中。

4

2 回答 2

0

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

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

实体转换例程属于哪里?

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

至于您的其他问题,在不了解更多关于您的要求和设计的情况下,您看起来与您的项目列表相符。

于 2012-06-14T12:40:10.617 回答
0

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

  • Excel“视图”(Project.Client.Excel),这将COM可见性级别限制为一个项目。
  • WinForm“视图”(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

于 2012-06-14T16:29:16.047 回答