C# ASP.NET MVC网站&;WCF Web服务-共享功能

C# ASP.NET MVC网站&;WCF Web服务-共享功能,c#,asp.net-mvc,wcf,web-services,architecture,C#,Asp.net Mvc,Wcf,Web Services,Architecture,我有以下情况:我必须创建一个网站和一个web服务,它将共享一部分功能 这就是为什么我不想写两次代码 我想到了以下架构: MyApp.BusinessLogic-->这里我们将数据模型保存到数据库中 MyApp.DataAccess->DataModels&Entity&mapping MyApp.UI.Models->ViewModels MyApp.UI.ServiceLayer->访问业务逻辑,为网站创建UI视图模型,并将视图模型转换回数据模型,以便在业务逻辑层的帮助下保存 MyApp.网

我有以下情况:我必须创建一个网站和一个web服务,它将
共享一部分功能

这就是为什么我不想写两次代码

我想到了以下架构:

MyApp.BusinessLogic-->这里我们将数据模型保存到数据库中

MyApp.DataAccess->DataModels&Entity&mapping


MyApp.UI.Models->ViewModels

MyApp.UI.ServiceLayer->访问业务逻辑,为网站创建UI视图模型,并将视图模型转换回数据模型,以便在业务逻辑层的帮助下保存

MyApp.网站


MyApp.WS.Models->WS-Models,这些将是客户端和WS-Models之间传递的对象

MyApp.WS.ServiceLayer->访问业务逻辑,为web服务创建WS-Models,并将WS-Models转换回数据模型,以便在业务逻辑层的帮助下保存

MyApp.WebService



架构是否过火了?我会遇到什么问题?ASP.NET MVC网站中的控制器会有问题吗?

当我设计应用程序时,我是这样做的。我唯一的问题是将模型复制到视图模型的过程很枯燥。克服这一问题的最佳方法是使用AutoMapper

不过,我还是会创建一些单元测试,因为在更改服务时,破坏应用程序的风险很高(反之亦然)。单元测试会在早期告诉您这一点。

基本上定义:)

如果你想减少代码的使用,为什么不创建你的服务,然后在应用程序中使用它呢

所以如果你想要一些像

Foo.DataAccess
-Foo.BusinessLogic
--Foo.ServiceLayer

然后将其引用为:
WebService(包括用于查看/更新的模型…但可能从外部简化)

然后使用
Foo.WebApp
让这个消费Foo.Webservice代表它进行数据调用


拥有UI和web服务模型会增加代码重复,您可以使用Fluent validation之类的工具让服务处理您的验证,并增强基本的验证系统。

拥有重复的模型对我来说很好。在某些情况下,你希望他们有所不同。此外,该服务只是业务层的代理,因此我认为在应用程序中使用它们没有任何用处。我使用了这种技术,通过webapp使用webservice,调试起来非常困难。不要再这样做了。另外,如果我以后想给webapp添加额外的功能,我将面临困难。@DragosDurlut拥有公共访问系统使其更易于测试,我在调试这种结构时没有遇到问题,但从更高的复杂性来看,我可以看出这可能很困难。我问,如果你想给一个webapp添加额外的功能,那么代码基本上是一样的,你为什么不把它公开给这个服务呢?它增加了不同代码的风险,不遵循枯燥的原则@Patrick确实如此,但是通过在服务中公开标准模型,您可以在web应用中调整或转换模型,以便您可以在那里查看/创建/编辑模型,并将其转换为适合在服务上使用的模型。如果您设置在复制的servicelayer上以连接到业务层,那么webapp可能会有一个伪服务层,它可以简单地与web模型进行转换service@finnman问题是,在某个时间点,网站将具有来自WS的额外功能。相信我,这很难调试。另外,你可能想现在就写网站,以后再写WS。我也想到了Automapper。单元测试是另一个问题。