2012-07-09 22 views
1

我相信這是我所問的一個明確的是/否的問題,不論執行情況如何,它都違反了法律,或者它沒有實施。所以我的問題是,在實體框架模型中創建的導航屬性是否違反了Demeter法則?我認爲他們因爲一個實體可以有太多的知識和獲得它的導航屬性情況如下圖所示:在實體框架中做導航屬性打破德米特法則?

Orders.Products.Price 

在包含導航屬性Products主要實體上方Orders的代碼。通常,我們必須深入瞭解該導航屬性以訪問該相關對象的詳細信息。我認爲一般情況下的實例屬性也不會違反法律?

幫助清理這將是有益的,謝謝!

+1

在此處查看類似的問題。總結:從技術上來說,它確實違反了LoD,但每個人都這樣做。 http://stackoverflow.com/questions/67561/do-fluent-interfaces-violate-the-law-of-demeter和http://stackoverflow.com/questions/163071/coupling-cohesion-and-the-law-的,得墨忒耳 – StuartLC 2012-07-09 15:59:55

回答

1

是的,他們這樣做,但沒關係。嚴格遵守德米特法是幾乎不可能的 - 您必須妥協以保持高設計質量,高代碼質量,可維護性和可讀性。 EF提出了額外的要求,這些要求主要與EF如何在對象和數據庫記錄之間進行映射有關。某些類型的映射(EDMX)允許您更改實體屬性的可見性,以便您可以在內部或受保護的屬性之上構建自己的抽象層,但可能會丟失一些EF功能。

如果您對Demeter和ORM工具法感興趣,您還應該檢查Domain driven design和Aggregate roots。