2012-08-12 138 views
11

我是Java程序員誰試圖調查CakePHP - 目前我有應用程序結構/設計問題。我無法理解將核心應用邏輯放在哪裏。CakePHP - 在哪裏放置服務邏輯

當我的JavaEE正在開發,常見的方法看起來像以下:

  • 模型類是簡單的豆代表數據實體(產品,人物等) - 大多喜歡用getter/setter方法的數據結構;

  • 控制器類是足夠簡單的類,其聚集必要的數據,並將它們注入到專用View模板,然後將其發送到用戶;

  • DAO(DataAccessObject)或存儲庫類是那些可加載和存儲實體到數據庫;

  • 服務類通常是包含某些業務邏輯方法的單例 - 這些方法由控制器,其他服務或調度動作調用,另一方面它們自己調用DAO/Repository方法來獲取或修改數據。

例如,如果我有實體PersonProductOrder,當用戶選擇了一些產品,然後點擊「放入我的購物車/籃」 new OrderPerson應創建這Product應該加入這個Order(我們可以檢查Person不壞債務人和Product出現在商店等) - 所有這些工作都是由一些控制器進行調用的OrderService方法進行。

通常某種國際奧委會(控制反轉)用於使所有的服務和控制器有聯繫的必要的服務等

現在我稍微感到困惑如何,這一切都是在CakePHP中完成。我應該在哪裏放置這個商業邏輯等?

回答

6

在CakePHP模型層由active record實例的集合組成,稱爲AppModel。它結合了存儲相關的邏輯(你通常會放在DAO中和/或存儲庫)業務邏輯(通常是什麼走進你的「模型」)

任何其他域相關的邏輯(從服務)成爲控制器的一部分。

如果你想知道,你是如何應該實現CakePHP的領域的業務邏輯,只是仰望它讚美活動記錄模式的文章。

個人觀點
的CakePHP和CodeIgniter的是兩個在PHP中最差的框架。
他們充滿了壞習慣。

其實,如果你正在做正確的上下的MVC,然後模型層將包含所有被與之相關的業務邏輯和一切。模型層由DAO,存儲庫,Domain Objects(您稱之爲「模型」)和服務組成。

雖然您對基於Java的代碼的描述表明您有朝着這個方向前進,但CakePHP甚至沒有遠離它。

然後,可能是MVC的my understanding錯了。

+0

感謝您的解釋。提到ActiveRecord模式讓我對這件事更加清楚。關於您的個人觀點 - 您認爲哪些PHP框架在MVC理念和良好實踐之後更好? – 2012-08-13 04:10:02

+3

@RodionGorkovenko,在編碼實踐方面目前是最好的,被認爲是Symfony2。但這就像在補習班裏最聰明的一樣。而Sf2 [不是MVC框架](http://fabien.potencier.org/article/49/what-is-symfony2)。但是你應該可以使用MVC設計模式。大多數聲稱爲「MVC框架」的PHP框架都遵循RubyOnRails對MVC的解釋(視圖是模板和模型是ORM),其中包含所有缺點。 – 2012-08-13 04:31:50

+0

愛你的答案@tereško。請保持它! – 2013-02-19 03:40:40

1

控制器應該只包含與整個Web應用程序相關的邏輯。您的業​​務邏輯屬於模型。我認爲這是你在許多cakePHP應用程序中發現的基本錯誤之一,即將大量邏輯放入控制器中,這些控制器實際上屬於模型。

+0

嗯...看起來我從來沒有提到在控制器中放置商業邏輯。儘管我沒有想到將其放入模型中。我認爲PhpCake中的組件類似於我們在java EE中的服務,但它們看起來更加輔助... – 2012-08-12 19:11:11

0

在CakePHP中。 「M」只是一堆數據模型而不是域模型。 在我看來。 CakePHP是爲RAD開發而開發的。它不適合企業應用程序。

雖然我的看法。

相關問題