2010-10-15 94 views
1

任何人都可以告訴我什麼時候使用EF4代碼優先使用POCO時最適合放置商業方法的地方嗎?他們是否應該參加POCO課程?例如。實體框架4代碼優先:商業方法

​​

還是應該POCO類是儘可能的乾淨和一個單獨的類用於其接受在構造一個客戶POCO的實例工作於業務邏輯?

謝謝。

回答

0

這絕對取決於您的業務層的「架構」。您可以使用POCO作爲數據傳輸對象,並擁有一些處理業務操作的上層業務層類 - 基本上我們可以談論事務腳本模式。或者,您可以將方法放置到您的POCO對象上,並將它們「提升」到域對象。然後,您的業務邏輯將位於您的域對象和域服務中(某些業務邏輯功能用於多個域對象,因此它應該放置在單獨的類中)。這被稱爲域驅動設計(但它提出了更多與架構相關的想法)。

1

@Ladislav Mrnka是對的,這取決於你的架構。

您的業務規則有多複雜?他們是否可能經常改變?什麼樣的客戶會使用你的模型,只是你自己的網站,或者你在暴露API,OData等?

所有需要解答的問題。

就我個人而言,我們有簡單的業務規則和相當直接的架構。

因此,我在服務層做了所有的驗證,並且爲我的POCO創建了部分類以促進業務規則,並拋出了自定義異常。

E.g

public void Add(Order order) 
{ 
    try 
    { 
     order.Validate(); // method in Order.cs partial class 
     repository.Add(order); 
    } 
    catch (InvalidOrderOperationException exc) // custom exc 
    { 
     // do something 
    } 
} 

正如我所說的 - 取決於你的架構。

如果您有非常複雜的業務規則,請考慮使用規範模式。

「DDD-God」(Martin Fowler)對它有很好的報道here

+0

我希望能夠在所有我們的項目中使用一體化實施,無論大小。 – 2010-10-16 19:50:50

+0

@Jamie Carruthers--並不那麼簡單,你必須對整體架構有一些想法。什麼是「項目」將被共享,你如何通過編譯的DLL將這些項目發佈到這些項目中,或者你打算通過WCF,Web API公開操作?這裏的問題是POCO的(如果你想使用WCF,你需要自我跟蹤實體)。我們真的需要更多關於項目的信息。 – RPM1984 2010-10-16 21:35:47