2016-02-08 34 views
4

我想避免getter/setter方法地獄在我的實體(這裏的原因是:http://ocramius.github.io/doctrine-best-practices/#/53),但兩個最流行的管理面板發電機:如何避免使用Symfony與管理面板創建者的setter?

需要getter和setter渲染視圖。

我的想法是創建DTO對象(http://ocramius.github.io/doctrine-best-practices/#/57),然後使用命名的構造函數來創建實體。我想在我的服務中調用命名構造函數。強制管理控制檯生成器使用我的DTO來保存/更新數據的最佳方法是什麼?您能否給我一個關於這種情況的良好實踐的想法和/或示例?

我想象的唯一方法是使用DTO而不是真正的實體,調用prePersist/preUpdate掛鉤並使用自定義服務,但它看起來很混亂。

+2

關於強制大多數克勞德發電機不使用獲得者/設置者的唯一方法是不使用克勞德發電機。我同情你的願望,不使用getter/setter。我也不喜歡他們。但是擺脫它們基本上意味着寫你自己的軟件,當然要小心你在互聯網上閱讀的內容。你的鏈接有一些好的點以及一些非常糟糕的點(「急切的加載是無用的」!!!)。他也沒有指出如何在表單組件中使用dto。 – Cerad

+1

好問題和有趣的幻燈片,但我不確定DTO可以在所有情況下替換實體。你一定可以找到SonataAdminBundle的替代品,它可以讓你做自定義查詢列表。我真的不知道在創建/編輯表單時避免使用setter。前/後鉤子將工作,但它是有限的。 在Sonata https://github.com/sonata-project/SonataDoctrineORMAdminBundle/issues/501中看到這個有趣的問題,有DTO實現的例子。 – chalasr

+0

@Cerad你看過誰做了這個演講?它是Ocramius - 教義的發明者。如果你看到他的整個演示文稿,你會完全同意他的看法。你可以在這裏找到它:https://vimeo.com/134178140 – sredni

回答

1

DDD最重要的一個方面是正確識別您的有界上下文(通常與您的子域對齊)並確定在這些上下文中使用的適當技術和體系結構。

管理面板聽起來像是一般的東西,本質上會是非常CRUD。如果是這種情況,那就不要試圖與BC戰鬥並擁抱CRUD。試圖在不需要BC的BC中實施純域模型會使事情比他們需要的更復雜。

但是,如果您確定複雜性證明域模型合理,那麼我會建議不要使用代碼生成器。恰當地建模一個複雜領域的現實並不是一件容易的事情,當然也不是一種工具可以實現的。

相關問題