我最近一直在设计相当多的Windows窗体应用程序(数据输入应用程序,办公室集成等),虽然我一直在设计逻辑层,但“中间层”业务逻辑层始终如一已经托管在桌面PC上(即物理客户端 - 服务器)。
当我接近更复杂的应用程序时,我发现自己渴望物理中间层,桌面客户端将请求传递回应用程序服务器以处理业务逻辑(可能会定期更改)和接口。感觉我错过了Web应用程序更加原生的可扩展性和可维护性等因素。
我很想知道其他WinForms开发人员在中间层分离的程度:
将业务逻辑移到单独的层上是否有好处,或者在PC上本地托管组件更为实际(并确保您有一个良好的部署模型,以便在业务规则发生变化时推出常规版本) ?
或者,如果涉及这些因素,我是否应该完全引导客户远离WinForms?使用Silverlight甚至ASP.NET和AJAX等替代品,选择WinForms客户端的原因似乎正在缩小。
答案 0 :(得分:2)
重要的是要记住,在开发的简易性与单独的中间层与所有可扩展性优势等之间存在权衡。我的意思是你必须刷新接口映射等在您的代码中,您必须在某个地方部署中间层供测试人员使用,需要刷新等。此外,如果您像我一样懒惰并直接传递您的Entity Framework对象,则无法将它们序列化为中间层,因此您需要为所有操作等创建DTO。
这些开销中的一部分可以由一个体面的构建系统来处理,但这也需要设置和维护。
我首选的策略是在程序集方面保持物理分离(即我有一个单独的业务逻辑/数据访问程序集),并通过接口层将所有调用路由到业务层,这是一堆Facade类。因此所有这些程序集都驻留在我的Windows应用程序中。我还为所有这些外墙创建接口,并通过工厂访问它们。
这样,如果我需要分离中间层,并且在生产力方面的权衡是值得的,我可以将我的业务层分开,将其置于WCF服务之后(因为这是我的首选服务平台)并根据我的外观分发一些重构,以及他们对所接受的内容做了什么。
答案 1 :(得分:1)
这是我倾向于总是在网络环境中工作的一个例子。如果客户端应用程序可以使用网络进行服务调用,则可以从Web服务器发送和检索数据。
当然,客户限制可以改变你的最终路径,但是如果有机会影响方向,我会转向基于网络的解决方案。有一些部署技术可以为您提供比传统桌面软件包更容易的升级路径,但是没有真正的替代方案来更新基于服务器的应用程序。
答案 2 :(得分:0)
根据您的应用程序,要记住几个性能问题。
如果您的工作在各种客户端(共享数据)之间非常相似,那么在中间层上进行处理会更好,因为您可以利用缓存来减少整体处理。
如果客户端(私有数据)不同,那么在中间层进行处理就不会有太大的好处。