我们计划在Web上开发一个大型应用程序,我们当前的计划是为Business层中的每个类创建一个WCF服务。这有效吗?我想知道在大型Web应用程序中我们可以在哪里使用WCF以及使用它的主要优点
我们有这些项目
1) MVC3 with Razor that handles UI
2) Class Library Project that communicate with Database
3) WCF Project
我们使用的方法
1)Creates UI and Model in MVC
2)Makes dll that communicate with UI (eg:Save function/Update function) using ClassLibrary Project
3)The Class Library Created is Added (Added to Bin) in WCF Project
4) Builds the WCF and Host It in Server
5) The Hosted Service is Used in MVC Project for Communication with DB
我们的技术主管说它重量轻且更安全,但我想知道为什么他会说WCF
用于整个申请
答案 0 :(得分:2)
首先提出这个问题,为什么需要服务层,何时可以通过单独的应用程序实现。如果你想通过松散耦合实现这一点,那么它就没有意义了。
在我看来,服务层对于公开您的数据(dal-layer)非常有用,而不是业务层。比如拿twitter。 Twitter通过Web服务公开数据。您对数据的处理完全是您的解释。许多应用程序都可以通过HTTP使用这些数据。因此,您的客户端可能位于远程位置,无需与您的应用程序位于同一服务器上。业务层可以基于数据的解释而改变。消费者,然后需要担心最新的变化,包括最新的DLL。它只会消耗web服务。同样模拟您的服务非常简单,您可以在Business层上轻松编写NUnits测试。我还建议您查看 ASP.Net Web API ,它提供了公开您的服务和数据的安静方式(具有将其公开为JSON的内置功能)。 RestFull服务比WCF有许多优点,就像你不必担心WSDL等一样。接口总是保持不变。使用RestFul服务非常简单。
再次使用twitter示例。使用twitter api的客户不在同一台服务器上。因此通过HTTP公开它是有意义的。 但是,如果您没有这样的要求(客户端不在远处),那么通过Web服务公开您的数据是没有意义的。然后一个单独的应用程序将给你松耦合,这应该足够好了。同时在HTTP上公开数据也会对性能产生一些影响。
更新2
我理解你想要实现的场景,我认为它完全没问题。通过轻量化,他意味着,从您的WCF服务,他将与数据库进行交互,然后根据要求为每个动作和控制器发送轻量级DTO。所以基本上你的WCF除了从你的类库调用方法之外什么都不做,会获取一些业务对象并将其转换回DTO(根据你的动作要求呈现UI)并将其发送给Controller。
另外请确保您为服务使用依赖注入,以便您可以使用模拟数据为控制器编写NUnit测试,因此不需要数据库来运行NUnits
答案 1 :(得分:1)
我的偏好是让服务层成为一个完全独立的应用程序,可以被许多应用程序使用。与在单个Web应用程序中创建服务层相比,它使项目(尤其是大型项目)更容易扩展。
答案 2 :(得分:-1)