2011-02-25 32 views
10

我在學習Sinatra,我想知道是否有人知道用Sinatra製作MVC結構的好方法。我有一些想法,但他們似乎太麻煩了。在Sinatra上構建MVC結構

+0

我可以建議使用另一個框架,只是MVC開箱即用嗎?例如Ramaze。 – iain 2011-02-25 09:54:16

+1

是的,這是一個很好的錯字。但我希望學** **如何製作一個簡單的框架。我想做這個教學練習來提高我的知識,因爲我想知道發生了什麼。我認爲這對Web開發人員來說非常重要。我選擇Sinatra是因爲它是_rack_上最簡單的包裝,並且允許爲我的需求提供最大的靈活性。 – dmarucco 2011-02-25 10:38:25

回答

24

Sinatra已經是「VC」了 - 您的視線與您的路線(控制器)分開。如果你喜歡,你可以選擇將它分成多個文件;如果要了解他們,看到這個答案(我的):
Using Sinatra for larger projects via multiple files

要添加一個「M」(模型),選擇一個數據庫框架。有些人喜歡ActiveRecord。有些人喜歡DataMapper。還有更多,你可以選擇。我個人喜歡並強烈推薦Sequel。我上面鏈接的答案也表明了包含模型的目錄結構和shell。一旦你在你的模型和控制器之間分配適當的邏輯,你就擁有了你的「MVC」。

請注意,MVC不是關於單獨的文件,而是關注點的分離。如果您按照上面的建議設置了Sinatra應用程序,但是讓您的視圖從您的模型中獲取數據,或者您的路線直接生成HTML(而不是通過「幫手」),那麼您確實沒有MVC。相反,你可以在單個文件中完成上述所有操作,並且仍然有一個MVC應用程序。只需將模型中的數據完整性邏輯(更重要的是數據庫本身),視圖中的表示邏輯和可重用的幫助程序以及控制器中的映射邏輯放入其中。

+4

+1「請注意,MVC不是關於單獨的文件,而是關注點的分離」 - 也不是關於單獨的類。正如你所說,每條路線都是一個控制器。 – 2011-11-06 03:34:05

4

M很容易使用ActiveRecord(或其他)。我有一個models子目錄,其中的內容在我的Sinatra應用加載時得到require d。

V也很容易 - 只要把您的觀點。views子目錄 - 西納特拉會自動在那裏尋找。

C可以,我猜可能是通過將適當分組的Sinatra動作放入不同的文件並在運行時加載它們來處理。

(自白:我還沒有建立一個西納特拉應用程序十分複雜,認爲需要明確的控制器,但 - 哪裏需要那麼多的結構,我已經開始使用Rails)

+0

對於** M **和** V **我毫無疑問同意,事實上我的問題是** C ** eheh。我可以將各種操作分組到不同的模塊中,其中模塊的作用類似於_Controller_。創造一些未來可以通過前端控制器進行擴展的東西會很棒。 – dmarucco 2011-02-25 09:56:46

+0

我想你是對的,當你說_「那裏需要多少結構我已經開始使用Rails」_但我幾乎沒有使用Ruby的新功能(來自PHP和** brr **我公司使用的定製語言) Rails對我來說似乎太多了**。我也想學習_how框架是由_creating_創建的。 – dmarucco 2011-02-25 10:07:52

5

如果您還沒有準備好,值得看看Padrino框架,它提供了一套用於擴展Sinatra的組件。您可以使用部分或全部Padrino,或者只是看看項目開發人員如何接近事物。

+1

謝謝斯圖爾特,我會看看。掌握紮實的紅寶石知識是我的目標的基礎。 Ruby是一種複雜而迷人的語言,與我以前的語言完全不同。 – dmarucco 2011-02-25 12:35:36