2013-08-27 28 views
1

我有一個複雜的問題,我一直在強調我的頭在過去的幾天。我不知道這將是解決以下問題的最佳代碼arcitecture方法:Rails應用程序設計 - 如何使它模塊化

我有一個小部件創建一個Web應用程序。每個小部件可以有自己的模板(主題) - 有多個模板供用戶選擇。用戶可以爲每個小部件模板自定義特定參數,例如顏色,文本,大小等。

每個模板都有其自己的字段(使用默認設置),html模板文件和樣式表。

什麼是在Rails應用程序的最佳方法,因此,這將是透明的,邏輯組織,容易改變和創造新的模板?我想保持簡單和模塊化。

我們不打算經常更改模板,所以它的好,如果他們是硬編碼。

我想到了2個選項: 1.創建一個模板模板,它定義了默認設置(序列化文本),視圖模板和樣式表的字段2.創建一個模型,該模型將指向模板特定的類,會從父模板文件導出。這將給予更大的靈活性

模板應該返回插入配置的值樣式和模板視圖。

我真的很感激,如果有人能指點我一些可以使用的良好做法,而不是重新發明輪子並使其變得太複雜或無用。任何反饋都非常感謝。

非常感謝!

回答

2

我相信像這樣的架構可以滿足您在上面指定的所有要求。

首先,你有你的兩個 「核心」 模型和它們的(很基本的,哈哈)字段:

User

  • :id
  • :name

Widget

  • id
  • name

接下來,你有ThemeTemplate模型,belongs_toWidget並負責存儲的默認屬性與你的CSS和HTML代碼模板一起值:

ThemeTemplate

  • id
  • widget_id
  • name
  • attributes,其存儲你的屬性的鍵/值對一個簡單的JSON散列;例如:{width:50, height:100}
  • css_code_template
  • html_code_template

css_code_templatehtml_code_template字段應包含易於更換的屬性鍵標記。例如,{{width}}{{height}}

現在,您需要一種方法將Widget綁定到User,然後再處理我們的最後一個模型。

UserWidget

  • id
  • user_id
  • widget_id
  • theme_id,其存儲當前選擇的Theme的ID(見下面)
  • generated_css_code *
  • generated_html_code *

  • 這兩個都是可選的情況下,你不想保持通話的Themegenerate_css_codegenerate_html_code方法。

最後但並非最不重要的是,我們有存儲所有自定義屬性值的模型。

Theme

  • id
  • name
  • user_widget_id
  • theme_template_id
  • custom_attributes,其中存儲屬性的鍵/值對一個簡單的JSON散列;例如:{width:55, height:105}

這種模式也應該有generate_css_codegenerate_html_code方法,這應該閱讀的ThemeTemplatecss_code_templatehtml_code_template的代碼,並與他們的自定義(自Theme)或默認替換屬性鍵標記(從ThemeTemplate)值。

自定義模板的問題是您總是希望確保您有足夠的錯誤檢測。

不用說,我上面描述的例子是解決您的需求的一種非常簡單的方法。一個增強可以使用「NoSQL」數據庫(如MongoDB)來存儲您的屬性。