我有一個架構至極是這樣CRUD操作應該始終通過BO嗎?
庫 - > BO - > WCF - >網絡
和VICA詩句
庫< - BO < - WCF < - 網頁
我問題是,如果我只是簡單的CRUD操作,就像通過其Id刪除記錄一樣,跳過BO並直接進入存儲庫是否可以接受?
庫< - WCF < - 網頁
我有一個架構至極是這樣CRUD操作應該始終通過BO嗎?
庫 - > BO - > WCF - >網絡
和VICA詩句
庫< - BO < - WCF < - 網頁
我問題是,如果我只是簡單的CRUD操作,就像通過其Id刪除記錄一樣,跳過BO並直接進入存儲庫是否可以接受?
庫< - WCF < - 網頁
不,不能接受的 - 總是相同的路徑:)
由於本都基本上是說 - 無論哪種方式是好的;但你必須選擇一種方法並堅持下去;始終如一。如果你混合使用,你幾乎肯定會被咬傷。
至於哪一個要麼 - 如果它滿足您的需求是可以的,那麼需要注意哪些相關風險可能會長期影響您。我幾乎總是會採用「BO」方法,因爲開銷並不那麼大,如果系統需求發生變化,很可能會避免大量的重新工作;讓BO更安全的長期。
答案是一如既往的架構, '這取決於'。只要你清楚你什麼時候允許,你就可以有或沒有允許繞過的建築圖層。
在你的情況下,你簡化了基本的CRUD情況,這是很好的:通過CRUD的BO代碼是本身只是一個毫無意義的代價。但是,您也不確定應該何時使用業務對象層:在極端情況下,系統可能傾向於將所有內容視爲CRUD,從而消除BO層的任何價值。作爲一個稍微不太極端的例子,您可以獲得一些BO功能,實現複雜的邏輯,相互分離以及業務領域的任何面向對象的表示。
只要清楚(並寫下幾句話記錄)何時使用哪種模式的原則,並嚴格遵守原則。
我的建議是堅持你的架構,並通過BO,特定的操作,如更新或刪除,這可能需要業務規則驗證和其他級聯類型的操作。您現在可能沒有爲實體定義任何業務規則,但您應該爲擴展性設計它。
在某些情況下,繞過您的BO進行讀取/檢索類型操作(例如,檢索某些東西列表或DTO對象,以合併來自多個實體的信息以嚴格呈現,搜索或驗證目的以實現更好的簡單性或性能改善複雜的環境。
有時候繞過會引入不一致性,這會使代碼更難以調試和維護超時,並且會使應用程序的重構變得更加複雜(例如在抽象出數據訪問時)。 BO的表現可能會是無足輕重的。讓非BO類直接調用數據層意味着它具有應該在BO層中的邏輯級別。 – 2010-02-20 19:57:09