我開始了一個項目,看看EF 4可以用POCO做些什麼。我創建了一個數據庫和一個自定義的POCO。現在我想驗證我的數據。爲此,我使用企業庫驗證塊5.何時/何時使用EF和POCO驗證我的數據?
我沒有問題,包括通過屬性驗證我的POCO,並將它與實體框架一起使用,但這意味着我的POCO不再是POCO,因爲我插入了依賴於驗證框架。
任何建議我應該在哪裏插入驗證部分並保持POCO清潔?
我開始了一個項目,看看EF 4可以用POCO做些什麼。我創建了一個數據庫和一個自定義的POCO。現在我想驗證我的數據。爲此,我使用企業庫驗證塊5.何時/何時使用EF和POCO驗證我的數據?
我沒有問題,包括通過屬性驗證我的POCO,並將它與實體框架一起使用,但這意味着我的POCO不再是POCO,因爲我插入了依賴於驗證框架。
任何建議我應該在哪裏插入驗證部分並保持POCO清潔?
我同意您希望讓您的實體免於驗證。這不是域對象本身的責任(SRP)。
除了基於屬性的驗證,企業庫驗證應用程序塊(VAB)還支持基於配置的驗證。您可以在此處遵循兩種模式:
使用基於XML的配置。這得到很好的支持。 VAB包含一個配置工具,它允許您配置整個事物而無需編寫一行XML。尤其是5.0工具非常好。儘管如此,使用XML很難重構模型中的任何東西(然而,單元測試將幫助您更快地發現錯誤)。
使用基於代碼的配置。雖然我個人很喜歡這種模式,但是因爲它可以在使您的域容易重構方面做得更好。你可以得到它的工作,但它還沒有得到很好的支持。您可以查看this thread以查看如何基於代碼的配置以及當前短缺的例子。
祝你好運。
個人而言,我沒有看到有多少作爲驗證實體的一部分的問題 - 畢竟,實體是你的域模型一部分,驗證規則可以認爲,按理說,作爲其一部分他們的屬性。我不是領域建模專家,但:)
最後,驗證將需要有些耦合實體。如果你決定減少耦合,我認爲有可能會導致尷尬的代碼。對於我最近的項目,我將驗證分成了不同的類,這些類被放置在實體的部分類中,我對目前的結果非常滿意。
我會創建一個服務類並在該類中進行驗證。
例如,您有一個名爲Listing的POCO類。創建一個名爲ListingService的服務類。然後在名爲ValidateListing的方法中在ListingService中進行驗證。
下面是使用驗證應用程序塊執行流利的基於代碼的配置的示例:http://stackoverflow.com/a/8906203/264697。 – Steven 2012-06-06 21:20:28