我見過很多書和文章的例子,說要在你的服務層中加入驗證碼。保持域對象「啞」(又名純POCO),並處理域對象可能在服務層中執行的所有驗證。服務層驗證與域對象驗證;潛在的「濫用」域對象?
服務層負責這麼多似乎(或至少可以);用戶身份驗證,角色身份驗證,IoC(記錄器,錯誤處理程序等)的腳本依賴對象,編寫域對象腳本,編寫存儲庫腳本以及將域對象傳入和傳出存儲庫......嗖!
不在服務層中創建所有這些規則對您的域對象構成嚴重威脅?例如,一些程序員決定直接針對你的域對象編寫消費代碼,並完全繞過服務層呢?那會很糟糕,但是一個可信的情況。
如果您打算在服務層中承擔很多責任,包括所有域對象驗證,有沒有辦法「保護」您的域對象是否有人試圖直接編寫它們?例如,也許某種方式你的域對象現在他們沒有被某個客戶端使用(在這種情況下,服務層?)。
良好的設計讓我覺得域對象應該對誰叫他們以及他們如何被調用一無所知。
如果沒有辦法「鎖定」域對象,那麼爲什麼有太多的文章,書籍等建議將服務層中的域對象驗證放到路上?我想通過採取防禦性編程的立場,你應該建立你的域對象是防彈的,並依靠你的服務層來獲得簡單的代碼層來轉發和接收UI和BAL/DAL之間的請求。
有沒有人有過一些真實的項目經驗,他們已經繞過他們的服務層的人濫用了他們的域對象?
#2聽起來很像數據傳輸對象,我想呢?我想我可以使用DTO,或者可能返回一個只顯示我認爲最終消費者應該能夠設置/獲取的屬性的接口?我會玩一些不同的方法。我希望避免DTO,因爲他們可以在項目中增加另一層複雜性。謝謝回覆! – 2011-03-02 15:47:41
@indiecodemonkey,是的。但關鍵是有辦法鎖定api。 – hvgotcodes 2011-03-02 15:59:22