2013-03-24 46 views
0

我有以下情况:我必须创建一个网站和一个网络服务,将share a part of the functionalitiesASP.NET MVC网站&WCF Web服务 - 共享功能

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

我已经想好了以下建筑:

MyApp.BusinessLogic - >在这里,我们的DataModels保存到数据库

MyApp.DataAccess - > DataModels &实体&映射


MyApp.UI.Models - >的ViewModels

MyApp.UI.ServiceLayer - >的访问非常业务逻辑,创建该网站的UI的ViewModels,并转换的ViewModels回DataModels用于与BusinessLogic层的帮助节省

MyApp.WebSite


MyApp.WS.Models - > Ws的模型,这些将在客户端和WS

之间传递的对象

MyApp.WS.ServiceLayer - >访问业务逻辑,创建Web服务的WS模型和transfoms的WS.Models回DataModels用于与BusinessLogic层

MyApp的的帮助节省.WebService


是架构矫枉过正?我会遇到什么问题?我会在ASP.NET MVC网站中遇到问题吗?

回答

1

当我设计我的应用程序时,我这样做。我唯一的问题是无聊复制模型以查看模型。解决这个问题的最好方法是使用AutoMapper。

我会尽管创建一些单元测试,因为在更改服务时有很高的破坏应用程序的风险(反之亦然)。单元测试会尽早告诉你。

+0

我也想到了Automapper。单元测试是另一个问题。 – 2013-03-24 22:39:39

0

定义基本上:)

如果你想减少代码的使用,为什么不创建你的服务,那么就消耗它的应用程序?

所以,如果你会像...

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

然后已经通过引用:
富。WebService的(包括模型视图/更新...但可能简化外部)

然后使用
Foo.WebApp
和有这个消费Foo.Webservice使数据调用它的代表

有UI并且Web服务模型会增加您的代码重复性,您可以使用Fluent验证等方式让服务处理您的验证,并增强基本验证系统。

+1

重复模型对我来说看起来不错。有些情况下你希望它们有所不同。此外,该服务只是业务层的代理,所以我没有看到在应用程序中使用它们。 – Patrick 2013-03-24 22:25:09

+0

我已经使用了这种技术,将Web服务与Web应用程序一起使用,并且它正在进行调试。不要再做。另外,如果我想在日后添加额外的功能到Web应用程序,我将面临困难。 – 2013-03-24 22:37:17

+0

@DragosDurlut拥有通用访问系统使测试变得更加容易,我还没有遇到调试这种结构的问题,但是在更复杂的层面上我可能会遇到困难。 我问过基本相同的代码,就好像你想添加额外的功能到一个Web应用程序,为什么你不暴露它的服务?它增加了不同代码的风险,并且不遵循DRY原则 – finman 2013-03-24 22:40:22