2010-08-18 77 views
0

在我的項目中,我有大約20個HTML表單與許多不同的<input>的。這種<input>在各種形式中都是獨一無二的,它們之間不重複。對於每個表單都有一個腳本,它從表單獲取數據,生成特定文件並將其推送到瀏覽器。就是這樣。沒有數據庫,管理員,登錄/密碼和其他常見的網絡應用程序的東西。項目MVC結構的問題

所以例如在PHP中,項目結構可以是這樣的:

形式/

-------> Form1中/

-------- -------> index.html

---------------> script/

------------- ----------> index.php

------->窗口2/

--------------->的index.html

----------- ----> script/

-----------------------> index.php

等等。這是很清楚的,這讓漂亮的網址,如:

www.website.com/forms/form1

但在的Ruby-on-Rails的出現是一個MVC模式。我不知道如何組織結構與這樣的項目。如何使它正確?畢竟我不應該製造20個不同的控制器,對吧?

回答

0

是的,你可以做20個控制器。與您在PHP結構中有20個script/index.php文件的方式大致相同。軌道結構看起來像這樣。

 
app/ 
    controllers/ 
     form1s_controller 
     form2s_controller 
     ..... 
     formns_controller 
    view/ 
     form1/ 
      new.html.erb 
     form2/ 
      new.html.erb 
     ...... 
     formn/ 
      new.html.erb 
     layouts/ 
      application.html.erb 

其中控制器對每個要執行的動作都有一個方法,例如,新建,編輯等

layouts/application.html.erb文件將包含所有頁面上的所有標記。

最後,不要試圖打架。由於慣例,在那裏可以啓用最少的代碼,如果您嘗試創建自己的結構,您將創建一個痛苦的世界。

+0

感謝您的回答。那麼在我看到的每個教程/預錄中,都只有3或4個控制器。我認爲20,30多個控制器只是不好的項目組織。所以,這是正常的? – nukl 2010-08-18 16:13:53

+0

大多數教程/屏幕錄像本身都是通過簡化事物。對於應用程序的每個「區域」,您都會期望有一個控制器,無論是單一表單還是沒有數據庫支持的表單或一組封裝應用程序特定區域的表單。只有你會知道這一點,但肯定有許多ROR應用程序與更多的控制器。 Redmine例如(一個ROR問題跟蹤器http://github.com/edavis10/redmine/tree/master/app/controllers/)有超過40個控制器 – 2010-08-18 17:15:01

0

由於沒有表單的數據庫後端,我會用20個方法(form1,form2,form3,...)創建一個FormsController。然後

你的URL看起來幾乎一樣\forms\form1\forms\form2 ...

即使你會用20個控制器,也有紅寶石許多方法來刪除重複的代碼。所以即使在一個普通的MVC中,我也有140個模型的應用程序,同樣也有很多控制器,其中大多數控制器只有一行,而且視圖是完全通用的。

僅僅因爲某種解決方案在PHP中看起來很簡單,並不意味着更好的解決方案不存在。比如MVC。它可能會導致更多的代碼,更多的文件,更多的工作,但是結構在那裏有很好的理由,乾淨地分離了問題,並且每個文件本身都變得更加清晰和易於理解。

+0

如果我將使用一個FormsController,我如何實現每個表單的腳本?這些「腳本」是相當大的,看起來每個「腳本」 - 方法將被放置在相同的FormsController,對吧?或者有一種方法可以像在php中一樣爲每個「腳本」使用單獨的文件? – nukl 2010-08-18 16:09:35

+0

在MVC中,有一種模型可以收集需要顯示或編輯的數據。控制器檢索正確的模型,並將它們交給視圖。 視圖可以操縱模型並以正確的方式呈現它們。這是意圖是儘可能簡單的看法。如果需要進行大量或複雜的操作來正確顯示數據,我們使用庫或演示者或助手。 從視圖中,在提交時,用戶輸入的數據然後被髮送回控制器進行處理。 你能簡單地描述一下你的「腳本」嗎?所以我可以一起思考。 – nathanvda 2010-08-18 18:30:27

+0

它的主要目標是根據表單輸入的值得到一個特殊的文本文件。我寫了一個類,讓更容易製作這個「特殊格式的文本文件」,稱爲FileMaker。那麼,每個腳本究竟在做什麼?它以'$ filemaker = new FileMaker();'開始,然後從form獲取所有值,並依賴這些值在'$ filemaker'中執行某些操作。例如,'if($ _GET ['somecheckbox'] == true?$ filemaker-> addProduct(「some line」):$ filemaker-> addBlock('some block')'。不可能從一個BIG腳本20個腳本,這就是爲什麼我們需要每種形式的控制器,我想。 – nukl 2010-08-18 19:50:54