我想我的應用程序應該至少具有以下層:具有DAL,回購,服務,API層的N層體系結構:每層應處理哪些類型的對象/應該在哪裏進行驗證/映射?
- DAL(不常用的接口;充分利用數據庫中的數據,得到從其他網絡服務的數據,從文件中獲取數據)
- 庫(CRUD接口爲每個重要/根骨料;實現由源而異)
- 服務(消耗儲存庫接口;實現由商業邏輯而異)
- 網絡API(渦卷服務;安裝容器;實現由運行參數而變化/ config)
我知道我的Web API應該返回DTO,我將其解釋爲只有自動實現的公共屬性的C#對象。
從理論上講,有時候我需要做BigComplicatedServiceCommand
,其中一個工作單元將涉及多個存儲庫,但有時我的Web API可能會直接調用存儲庫,因爲它只是在執行CRUD。
我有興趣瞭解其中從(通過web api模型綁定輸入到web服務的輸入)映射到服務需要應該發生的任何事情 - 以及驗證應該發生的地方。
粗略地說,我有這個在我的腦海:
在API
- 接收請求,並映射到路線
- 使用模型綁定按照慣例綁定到DTO
- 實例化特定的控制器使用IoC容器
- 運行特定控制器操作
- 在控制器操作,打電話到服務層
現在,在步驟5之後是有問題的。我是否會將DTO發送到服務?然後,我的服務將與我的DTO配合使用。
我是否爲每種服務方法定義了特定的接口?如果是這樣,這些實際上是他們自己的DTO,我也可以定義一個DTO每服務輸入排列。
假設我的服務需要在DTO,
- 在服務方法,做商業邏輯做出庫
- 在倉庫,CRUD的東西通話
- 返回最終的結果從服務方法API
- 投向DTO並從API返回到互聯網
現在,如果我的存儲庫嚴格處理域對象?如果是這樣,誰來負責鑄造? (服務?)
最後,記住驗證,我想到的是:
- 驗證的前期使用下列之一:
ModelStateActionFilter
(行動之前執行),鑄造到任何服務需要的輸入是在。因此,這將確保CreateUserService
正在接收Username
和Password
的對象。 - 驗證服務方法使用資料庫和其他服務的用戶名是唯一的,密碼是足夠強大
- 驗證在DAL水平,以確保實體框架是幸福
我的問題是,它(如果有的話)的對象我應該在System.DataAnnotations
上嗎?在這個堆棧中是否有任何類型的模型應該對任何部分負責自己的驗證?
感謝您的任何哲學幫助。
這個問題應該是programmers.stackexchange.com –