我有一个复杂的问题,我过去几天一直在强调我的头脑。我想知道在解决以下问题时最好的代码架构方法是什么:
我有一个可以创建小部件的网络应用。每个小部件都可以拥有自己的模板(主题) - 用户可以选择多个模板。用户可以为每个小部件模板自定义特定参数,例如颜色,文本,大小等。
每个模板都有自己的字段(默认设置),html模板文件和样式表。
Rails应用程序中最好的方法是什么,以便透明,逻辑组织,易于更改和创建新模板?我想保持简单和模块化。
我们不打算经常更改模板,所以如果它们是硬编码的话也没关系。
我想到了两个选择: 1.创建一个模板模板,它定义具有默认设置(序列化文本),视图模板和样式表的字段 2.创建一个模型,该模型将指向一个模板特定的类,它将从父模板文件派生出来......这将提供更大的灵活性
模板应返回带有插入配置值的样式表和模板视图。
如果有人能指出我可以使用的一些好的做法,而不是重新发明轮子并使其过于复杂或无用,我将非常感激。任何反馈都非常感谢。
非常感谢!
答案 0 :(得分:2)
我相信像这样的架构可以满足您在上面指定的所有要求。
首先,你有两个“核心”模型及其(非常基本的,哈哈)字段:
User
:id
:name
Widget
id
name
接下来,您拥有ThemeTemplate
模型,belongs_to
Widget
并负责存储默认属性值以及CSS和HTML代码模板:
ThemeTemplate
id
widget_id
name
attributes
,它存储属性键/值对的简单JSON哈希值;例如:{width:50, height:100}
css_code_template
html_code_template
css_code_template
和html_code_template
字段应包含易于替换的属性键标记。例如,{{width}}
和{{height}}
。
现在,在我们处理上一个模型之前,您需要一种方法将Widget
绑定到User
。
UserWidget
id
user_id
widget_id
theme_id
,其中存储了当前所选Theme
的ID(见下文)generated_css_code
* generated_html_code
*
如果您不想继续调用generate_css_code
的{{1}}和generate_html_code
方法,则这两个是可选的。
最后但并非最不重要的是,我们拥有存储所有自定义属性值的模型。
Theme
Theme
id
name
user_widget_id
theme_template_id
,存储属性键/值对的简单JSON哈希值;例如:custom_attributes
此模型还应包含{width:55, height:105}
和generate_css_code
方法,这些方法应读取generate_html_code
的{{1}}和css_code_template
中的代码并替换属性关键标记及其自定义(来自html_code_template
)或默认(来自ThemeTemplate
)值。
自定义模板的问题是您总是希望确保有足够的错误检测。
毋庸置疑,我上面描述的例子是解决您的要求的一种非常简单的方法。一个增强功能可能是使用“NoSQL”数据库(例如MongoDB)来存储您的属性。