任何人都可以告訴我什麼時候使用EF4代碼優先使用POCO時最適合放置商業方法的地方嗎?他們是否應該參加POCO課程?例如。實體框架4代碼優先:商業方法
還是應該POCO類是儘可能的乾淨和一個單獨的類用於其接受在構造一個客戶POCO的實例工作於業務邏輯?
謝謝。
任何人都可以告訴我什麼時候使用EF4代碼優先使用POCO時最適合放置商業方法的地方嗎?他們是否應該參加POCO課程?例如。實體框架4代碼優先:商業方法
還是應該POCO類是儘可能的乾淨和一個單獨的類用於其接受在構造一個客戶POCO的實例工作於業務邏輯?
謝謝。
這絕對取決於您的業務層的「架構」。您可以使用POCO作爲數據傳輸對象,並擁有一些處理業務操作的上層業務層類 - 基本上我們可以談論事務腳本模式。或者,您可以將方法放置到您的POCO對象上,並將它們「提升」到域對象。然後,您的業務邏輯將位於您的域對象和域服務中(某些業務邏輯功能用於多個域對象,因此它應該放置在單獨的類中)。這被稱爲域驅動設計(但它提出了更多與架構相關的想法)。
@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。
我希望能夠在所有我們的項目中使用一體化實施,無論大小。 – 2010-10-16 19:50:50
@Jamie Carruthers--並不那麼簡單,你必須對整體架構有一些想法。什麼是「項目」將被共享,你如何通過編譯的DLL將這些項目發佈到這些項目中,或者你打算通過WCF,Web API公開操作?這裏的問題是POCO的(如果你想使用WCF,你需要自我跟蹤實體)。我們真的需要更多關於項目的信息。 – RPM1984 2010-10-16 21:35:47