2011-12-21 131 views
0

過去幾個月,我一直在爲一家公司工作,擔任一般的開發人員/ IT人員。我爲本地託管的公司編寫了一個Web應用程序。我使用了CakePHP和MySQL(因爲該應用程序非常適合Active Record方案)。我不應該使用CakePHP或MVC這個應用程序嗎?

我正在使用的新網絡應用程序將用於分析每月的銷售數據。從本質上講,我們得到的每月我需要分析信息的堆積如山的垃圾......


每個月我們獲取數據的一個巨大的表中有我們的客戶信息,每隔一個(他們的ID#,多少他們處理的數量,我們賺了多少,等等)。打電話給這個殘差

我們還得到另一張表,基本上有他們的ID,一個「描述」(基本上是費用類型)和一個值。調用這互換

我有一個名爲REPS永久表具有每個銷售代表ID,姓名等


爲了獲取有用信息(如客戶名稱),我刪除然後重新上載另一張表具有諸如他們的姓名,狀態,狀態(如果他們處於活動或關閉狀態)等的信息......每月。

我決定製作一個殘差表格,將月份記錄爲一列,我只是每個月添加一次。


我的問題是,使用CakePHP變得越來越困難。假設我想得到一張表,每個月和每個銷售代表的列都有列,它開始變得非常複雜,因爲這不是一個活動記錄應用程序,我不得不做各種冗長複雜的查找語句。

您會建議更改爲不同的框架,語言或數據庫嗎?我應該做什麼數據庫結構的改變?我的控制器不長,我是否應該將更多的工作轉移到模型上?

任何想法?


編輯:我需要建立一個系統,我不是,因爲技術的老闆可以輕鬆地運行各種任何她想要的分析。


編輯#2:感謝您的答覆。是的,我知道SQL查詢很好,而且我開始只是做我自己的事情,但後來我重新構建了數據庫並在此之後轉換爲Cake。

+0

我的建議是使用給你的老闆一個專門的報告工具,如水晶報表和/或學習如何手動編寫SQL查詢來提取您需要的數據。 – jamieb 2011-12-21 04:50:25

回答

2

這是一個非常開放的問題,因此您不會得到完美的答案。我只能扔我的兩美分,蛋糕沒有調整爲數據庫應用程序。我的意思是任何不是簡單的CRUD記錄插入,檢索,更新。 Cake DAL不能很好地擴展以適應複雜的查詢或大容量數據插入/更新/操作。

話雖如此,CakePHP中仍然存在PHP。您可以使用模型的query方法發出「手動」查詢。您應該在模型中創建方法,完成繁重的數據提取;這種代碼是商業邏輯,不屬於控制器。在模型中使用常規的PHP和SQL代碼來處理數據。

如果這幾乎只是您的應用程序所做的事情,您可能會更快樂,沒有Cake,並且只需在您自己的數據庫連接(如PDO)上使用一些簡單的包裝。儘管放棄了Cake的不錯路由,表單和視圖,所以你必須決定你喜歡花些時間。

+0

什麼框架可以更好地處理數據庫重度應用程序? – kaklon 2011-12-21 17:21:14

+0

我在這裏沒有具體的建議,但在數據庫包裝儘可能薄的地方。對於複雜的查詢,你通常真的想手動編寫SQL,而不必經過兩層抽象。根據您的應用程序,像[klein.php](https://github.com/chriso/klein.php)與PDO和螺栓連接模板系統可能會很棒,否則就像Zend Framework,它允許您選擇每個部分都非常靈活。 – deceze 2011-12-21 23:18:07

+0

謝謝你,會調查一下 – kaklon 2011-12-22 08:04:58

0

您是否考慮過其他框架?

Symfony(我使用1.4。*),例如,可以使用Propel作爲它的ORM。 Propel的設計非常好,它使用了一個Query對象,使得從數據庫獲取數據變得非常簡單。它也允許自定義SQL查詢寫入,如果你需要訴諸這一點。

要回答你的問題,即使你特別提到Cake PHP,它聽起來像是「這是太多」的說法;如「對這個項目使用這樣和那樣的框架太多了」。就我而言,我更願意使用我攜帶的框架來部署每個項目,並投入時間來真正瞭解。他們節省了我的時間,我不必在每個項目開始時都考慮基本的管道代碼。

框架提供了很多工具(除了ORM),比如路由,驗證等,它們在幾乎任何項目中都非常方便,並且不會讓它們真的會讓你變慢。

我建議你看看其他選項,如果你覺得CakePHP變得笨重,因爲我非常確定使用框架是正確的選擇。

1

首先檢查您的選項。你知道任何其他框架嗎?你知道如何用你自己的MVC設置一個簡單的PHP應用程序嗎?框架中的很多組件可以獨立地找到並添加到您自己的應用程序中(如活動記錄,依賴注入,自動加載等等)

如果您當前使用的框架正在使您難以獲取東西完成了,那麼你應該考慮擺脫它。使用框架應該使事情變得簡單而不難。關於CakePHP的一點是,它通過曼陀羅的'Convention over Configuration'來傳遞。儘管在一段時間內從某種程度上脫離某種新應用程序是非常好的,但它並不適合所有的應用程序。

因爲我對你的項目瞭解不多,所以我不能真正幫你選擇一個框架。但從我過去的經驗來看,Zend Frameowork和CodeIgniter一直是最靈活的。採埃孚也提供了一個良好的CLI結構,以防萬一您需要長時間運轉的重型克倫。這就是說,只有在你真的需要/想要一個框架時才使用它們。

擁有真正複雜的控制器並不是一件好事。這可能表明您的模型沒有做足夠的工作,並且大部分轉換都發生在您的控制器中。你的模型和你的觀點應該做更大的工作。我通常瞄準薄控制器和胖模型。

0

我對你有好消息和壞消息。好消息是,你開始使用Active Record和CakePHP。壞消息是你的數據庫結構不太好。

閱讀一些關於Database Normalization的知識,瞭解如何規範化數據庫和數據。

我看到的第一個問題是您爲每個月添加一列。你真的應該有2個不同的表:

  • 1個月 - 這可以保持幾個月的名稱,如銷售的當月總額爲一體的公司一些超級彙總的數據
  • 1,這將是在REPS和幾個月之間的數據透視表 - 在這裏,您將持有代表ID,month_id以及可能與該代表當月銷售額相關的一些信息。

最後你會有many-to-many代表和月份之間的關係。 ActiveRecord將會更加開心,MVC也是,而且開發人員會與你一起工作,因爲這是應該如何完成:)

相關問題