2009-12-16 66 views
4

我想弄清楚如何在數據,業務和UI層之間共享我的實體。是否最好爲這些實體創建一個單獨的項目,並將被所有層引用?怎麼樣枚舉和自定義異常?我有一些僅由UI項目使用的枚舉,還有一些由Business使用。這是否意味着我應該有兩個單獨的Enum文件夾:一個在Business項目中,另一個在UI中?與異常類似?到目前爲止,我一直在一個單獨的項目中維護實體,枚舉和異常,這三個層都被引用。業務實體,枚舉,自定義異常的位置?

我的業務項目有經理類(比如ProductManager.cs),其中有像列表的GetProducts()和SaveProduct(產品)的方法,等等。

回答

1

我通常把枚舉和自定義異常,在一個界面定義放在一起單獨的項目。

1

如果您需要所有層中的實體,那麼使用單獨的項目是(imo)最好的方法。

2

如果這些實體在所有這些層中都具有語義含義,那麼我會建議將它們放在一個單獨的項目/程序集中,以便所有層都知道。

如果您具有特定於一個圖層的實體,我會將它們限制爲該圖層。因此,例如,您不會允許UI代碼引發業務層異常,或者業務層使用UI枚舉。

取決於你在做什麼,在保持共享類型的同一個項目/程序集中保留特定於層的類型可能沒有什麼壞處,但我會考慮將它們限制在自己的層上,這是最佳實踐。

2

你一直在做正確的事情。與所有實體創建一個單獨的項目幾乎總是要走的路。如果枚舉和異常與實體相關,則它們也屬於該實體。

+0

是否可以將枚舉和異常視爲實體? – Prabhu 2009-12-16 21:32:59

2

認爲封裝。 將它們放在需要它們的地方,而不是在更廣的範圍內。

如果僅在UI層中使用某些內容,請勿將其暴露給其他圖層。但是,如果它被用於兩層或三層,那麼將其定義在最底層(例如,如果UI位於數據庫上的業務邏輯上,那麼BL和UI中使用的某些內容可以在BL中定義)。或者如果某件事或多或少具有全球性,請將其移至第三方共享庫。

此外,儘量減少對共享實體的需求:例如,建議(出於正當理由)避免自定義異常。它們中的大多數通常可以通過現有的系統異常來表示,並帶有一些額外的信息(例如InvalidOperationException和消息中的細節),從而最大限度地減少處理全新的異常類的需求 - 以及無需決定在哪裏定義自定義異常類型。