使用WCF服务作为接口层时,使用5层架构(前端=>接口层=>业务层=>数据库层=>数据库),让客户端应用程序调用它的方法,我是否应该将WCF服务用于业务和数据库层?我问,因为3个服务之间将要进行的所有序列化/反序列化可能会占用服务器的大量CPU,并且对整个应用程序产生性能影响,或者我错了吗? /> 在一台机器上运行所有3个组件层的情况下,将业务和数据库层构建为简单的类库是否更好,并且只将接口层保留为WCF? TKS
答案 0 :(得分:1)
分层架构是一种SOA前方法,尽管我们今天仍然在我们的软件中构建逻辑层。但物理层,如果不止一个(除了UI和数据库),将导致你痛苦和心痛。有时你最终会有两个,但我个人反对它。
趋势是使用服务总线或类似方法进行并行/解耦处理,不推荐构建串行服务。
您已经指出了序列化开销。但这只是一个开始,你有方法执行延迟,更多的故障点,性能下降,因为层脱离进程,维护开销,......
所以不要抱怨只有一个中间件物理层,这不是一种资产,它是一种责任。
答案 1 :(得分:1)
WCF对物理机之间的通信非常有用。虽然您可以使用WCF进行内部通信,但是有更简单,更有效的方法来完成同样的事情。如果您考虑在某个时刻将不同的层放在不同的机器上,则只能使用WCF内部进程。至于将WCF用于数据库层,您将不会:您将使用System.Data.xxx命名空间中的类(即,如果您使用的是SQL Server数据库,则使用System.Data.SqlClient;或者可能使用实体框架)
当人们谈论3层架构时,他们将两个概念合二为一:物理层:客户端机器,中间件机器和数据库机器;和软件体系结构中的逻辑层:客户端UI代码,业务逻辑代码和数据访问代码。当来自位于同一物理机器上的两个不同逻辑层的代码需要通信时,最简单的模型是一个类调用另一个类,解耦量取决于您的要求。您想使用满足您要求的最简单模型。 Rockford Lhotka在他的书Expert C# 2008 Business Objects
的第一章中对此进行了很好的描述