C# 客户端到WCF服务的应用程序体系结构
我很好奇如何正确地构建一个包含以下内容(需要重构)的应用程序: Excel插件 COM可视客户端库,包括WinForms和Excel公开的方法(计算调用和表单激活方法) 然后使用客户端库中的功能连接到WCF服务。 WCF服务目前包含计算逻辑、验证逻辑、通过ORM工具访问数据库 i、 e.加载项->客户端DLL中的Winform/直接调用->WCF->数据库或计算 目前只有2个项目存在这种情况。我的第一个想法是重新设计如下: 客户端项目C# 客户端到WCF服务的应用程序体系结构,c#,wcf,architecture,n-tier-architecture,C#,Wcf,Architecture,N Tier Architecture,我很好奇如何正确地构建一个包含以下内容(需要重构)的应用程序: Excel插件 COM可视客户端库,包括WinForms和Excel公开的方法(计算调用和表单激活方法) 然后使用客户端库中的功能连接到WCF服务。 WCF服务目前包含计算逻辑、验证逻辑、通过ORM工具访问数据库 i、 e.加载项->客户端DLL中的Winform/直接调用->WCF->数据库或计算 目前只有2个项目存在这种情况。我的第一个想法是重新设计如下: 客户端项目 Excel“视图”(Project.Client.Exce
- Excel“视图”(Project.Client.Excel),这将COM可见性级别限制为一个项目
- WinForm“视图”(Project.Client.UI)
- 两组“视图”(Project.Client.Presenter)的演示文稿
- WCF“视图”,包括数据传输对象?(Project.Server.WCF或服务)
- 服务器端演示者(Project.Server.presenter)
- 业务逻辑(Project.Business)
- 数据访问层(Project.DAL)
至于你的其他问题,在不了解更多关于你的需求和设计的信息的情况下,你的项目列表看起来是正确的。这就是我的结构,但这个问题没有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都使用的库
- 共享(Project.Shared)-用于更好地构建依赖关系的公共帮助程序李>
服务器端演示者(Project.Server.presenter)-这对我来说毫无意义,因为没有使用它的GUI请为演示者在解决方案中执行的每个项目(类库、WPF等)和角色添加类型。由于用户的工作方式,目前所有内容都以DLL结尾,因为Excel加载项是真正的前端。使用WinForms是因为它们比将所有内容都塞进用户表单更丰富、功能更强大。其目的是使所有内容都保持为DLL类库,但在体系结构上更好地在项目之间分割。作为工作的一部分,我想分离WinForms的代码以使用MVP,这样就可以添加单元测试。因此,我设想演示者既为表单MVP工作,又有效地作为Excel库的传递调用。即。DataService.GetTimeSeriesByID(…)传递给.TimeSeries.GetById(…),以便对表单(view/update/etc)和excel函数调用使用公共代码。Excel库将只是包装DTO以进行COM访问。这是否更清楚?我将使用MVP和WinForms来实现这一点,因为当您希望安装ASP.NET前端时(而不是Silverlight,它是一个非初学者),WPF和MVVM也不起作用(在我的阅读中),这可能是某个阶段对某些部分的要求。如果您建议在单独的通用项目中使用服务合同,这是否会违反企业设计的某些原则,即客户应该使用从服务生成的代理,该代理将包括相关的数据合同?在阅读了一些关于分离关注点的材料后,我认为转换器的位置现在对我来说更清楚了,即业务层是否应该知道数据访问层(下面的层)但反过来说,业务层自然需要进行所有转换