我正在爲一個Web應用程序進行規劃。我使用Smarty的PHP框架Kohana。我的Web應用程序也將具有移動設備界面。現在,這兩個接口將會有很多共同的和很多獨立的代碼。如何爲不同的「移動設備接口」和「桌面接口」組織代碼
我應該如何組織代碼,以便:
- 沒有重複的代碼。
- 不必要的代碼不會加載到。例如,桌面UI特定代碼不應該加載到iPhone界面,反之亦然。
我正在爲一個Web應用程序進行規劃。我使用Smarty的PHP框架Kohana。我的Web應用程序也將具有移動設備界面。現在,這兩個接口將會有很多共同的和很多獨立的代碼。如何爲不同的「移動設備接口」和「桌面接口」組織代碼
我應該如何組織代碼,以便:
最後我遵循了不同的2項目路線的做法。因爲它給了很大的靈活性。 如果我想分享一些模型,視圖,控制器,我把它們放在「模塊」中。否則,如果我想爲兩個接口分開一些東西,我將它們放在相應的項目中。
所以:我的消息來源是這樣的:
</>
proj_desktop/
htdocs/
application/
models/
views/
controllers/
proj_iphone/
htdocs/
application/
models/
views/
controllers/
proj_mobile/
htdocs/
application/
models/
views/
controllers/
modules/
myApp/
models/
views/
controllers/
system/
models/
views/
controllers/
一種方法是簡單地爲桌面瀏覽器和移動瀏覽器使用單獨的視圖。您的所有邏輯都將位於您的控制器中,因此您不會複製代碼,只需根據瀏覽器的用戶代理字符串調用相關視圖即可。
真的有好幾種選擇!
您可以選擇使用共享Kohana模塊進入「2項目」路線 - 但我個人不喜歡這種方法。
我個人會使用類似的方法作爲多語言站點 - 所以... apache(或其他)會重寫m.example.tld/my/page - > www.example.tld/mobile/my/page
假設你使用Kohana3 - 標準路線可改爲類似:
Route::set('messages', '<format>/(<controller>(/<action>(/<id>)', array('format' => '(mobile|desktop)) ->defaults(array( 'format' => 'desktop', 'controller' => 'welcome', 'action' => 'index', ));
所以 - 用戶將不會看到/移動/網址,但您現在可以選擇Smarty的模板,根據請求: :實例() - >參數( '格式');
可能 - 您只需要爲每個平臺複製視圖文件/ smarty模板。
我使用的輸出格式... XML,JSON,XHTML,RSS類似的模式..
希望這有助於;)
我絕對建議具有移動和桌面顯示器獨立意見。如果可能,請不要直接將視圖與用戶代理字符串綁定 - 使用用戶代理字符串將移動設備指向單獨的URL(如m.whatever.page或www.whatever.com/m /頁)分開渲染。
如果你正在使用你的路由生成鏈接,那麼用戶會看到/移動/ URL,甚至更多,你將與複製網址結尾(壞的搜索引擎優化)。我認爲使用移動和桌面的相同url更好,檢測它是否是PHP上的移動設備(並將其保存在會話中),並在您的動作或view_models中確定要顯示的內容。 – Enrique