2013-03-24 59 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