2010-11-22 55 views
0

這背後有沒有真正的問題的問題,只是我腦子有病的產品和驅動,使事情稍顯怪異:)PHP:代碼設計難題

所以,我有這個PHP應用程序建立在我的上方自己的MVC導向框架(是的,我做了我自己的而不是使用現有的)。它由本書完成,因此我們有模型(數據和數據庫操作),視圖(充滿數據和渲染輸出的模板)和控制器(處理請求,從模型中獲取適當的數據,將數據放入視圖中)。使用.htaccess規則完成請求路由的經典和無聊場景。

昨天我在代碼,錯誤修正,情侶改進等方面做了一些改變。我強烈要求重新排列控制器的代碼。他們覺得有點沉重和臃腫,方法的數量很難瀏覽文件,等等。我相信每個人都知道我在說什麼。

我在考慮把我的控制器類分成許多類,每個類只處理一種類型的請求,如登錄或註冊或showProfile或killMe。

現在控制器類具有公共方法對應於部分用戶友好的(或可能是SEO友好的)URL和路由類調用適當的控制器,它是根據url內容的方法。

更改我正在考慮將一個小的路由機制轉移到調用特定的控制器,它的Execute()方法。

例如,對於URL = 「www.example.com/users/login」 現在看起來是:

$controller = new url[0](); 
$method = url[1]; 
echo $controller->$method(); 

現在URL將變爲 「www.example.com/login」和路由代碼看起來像:

$controller = new url[0](); 
controller->Execute(); 

我省略了,我解析URL,並提取它們的路由信息​​,因爲它是不相關的我的問題部分。

我在這個變化中看到了什麼好處?

  • 一個每一個請求專用類
  • 較小的文件
  • 較小的代碼
  • 易於維護
  • 破添加新的功能(新類型的請求)或修正錯誤時工作控制器的有限危險

缺點?

  • 可能很多類
  • 可能的性能命中
  • ???

而我的問題是關於你對這個想法的看法,它是否有任何意義。當然,我更感興趣的是爲什麼我不應該這樣做,而不是爲什麼我應該這樣做。所以,如果你能想到的任何原因這將是可怕的想法和憎惡請立即說這將是爲時已晚:)

EDITED 澄清一個問題之前:

我問我是否應該將我的單一的大型控制器處理許多類型的請求,通過它的方法分解成許多小型控制器,每個控制器只處理單一類型的請求。

現在我有控制器處理像「登錄」,「showLoginForm」,「註冊」,「激活」等請求的用戶。重構的代碼將由每個請求的單獨控制器組成。

+0

你問你的[FrontController](http://martinfowler.com/eaaCatalog/frontController.html)是否應該調用[Transaction Scripts](http://martinfowler.com/eaaCatalog/transactionScript.html)或方法一個[PageController](http://martinfowler.com/eaaCatalog/pageController.html)或其他東西?我不太清楚你到底在找什麼。 – Gordon 2010-11-22 07:48:07

+0

我添加了一些解釋我在問什麼:) – grapkulec 2010-11-22 09:20:40

回答

0

對於新舊方法我都能想到的一個缺點是你直接將URL映射到類名。如果您想更改網址,則必須更改班級名稱。如果您希望針對不同語言使用不同的網址,則必須添加一個圖層,以便將網址映射到類名稱。 這就是爲什麼我寧願有一個路由類,它會將URL映射到類名,這會爲您提供一個接縫來改變事物。

+0

好點。我可能應該考慮將url與處理它們的實際代碼分離,目前的映射不是很靈活 – grapkulec 2010-11-22 09:20:10

+0

我接受這個答案,因爲這正是我在代碼中所做的,它解決了我當時的所有疑惑和問題寫這個問題:) – grapkulec 2010-12-07 12:12:41