1

在过去的几天里,我有一个复杂的问题一直困扰着我。我想知道解决以下问题的最佳代码架构方法是什么:

我有一个创建小部件的网络应用程序。每个小部件都可以有自己的模板(主题)——用户可以在多个模板之间进行选择。用户可以为每个小部件模板自定义特定参数,例如颜色、文本、大小等。

每个模板都有自己的字段(具有默认设置)、html 模板文件和样式表。

Rails 应用程序中的最佳方法是什么,以便它透明、逻辑组织、易于更改和创建新模板?我想保持简单和模块化。

我们不打算经常更改模板,所以如果它们是硬编码的也没关系。

我在考虑 2 个选项: 1. 创建一个模型模板,它定义具有默认设置(序列化文本)、视图模板和样式表的字段 2. 创建一个模型,该模型将指向一个特定于模板的类,该类将从父级派生模板文件..这将提供更大的灵活性

模板应该返回带有插入配置值的样式表和模板视图。

如果有人能指出我可以使用的一些好的做法,而不是重新发明轮子并使其过于复杂或无用,我将不胜感激。任何反馈都非常感谢。

非常感谢!

4

1 回答 1

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_templateand字段应包含易于替换的html_code_template属性键标记。例如,{{width}}{{height}}

现在,在我们处理最后一个模型之前,您需要一种将 绑定Widget到 的方法。User

UserWidget

  • id
  • user_id
  • widget_id
  • theme_id,其中存储了当前选择的ID Theme(见下文)
  • generated_css_code*
  • generated_html_code*

  • 如果您不想继续调用 的generate_css_codegenerate_html_code方法,这两个是可选的Theme

最后但同样重要的是,我们拥有存储所有自定义属性值的模型。

Theme

  • id
  • name
  • user_widget_id
  • theme_template_id
  • custom_attributes,它存储属性键/值对的简单 JSON 哈希;例如:{width:55, height:105}

这个模型还应该有generate_css_codeand方法,它应该从and中generate_html_code读取代码,并用它们的自定义 (from ) 或默认 (from ) 值替换属性键标记。css_code_templatehtml_code_templateThemeTemplateThemeThemeTemplate

自定义模板的问题是您总是希望确保有足够的错误检测到位。

不用说,我上面描述的示例是满足您的要求的一种非常简单的方法。一项改进可能是使用“NoSQL”数据库(例如 MongoDB)来存储您的属性。

于 2013-08-28T00:20:46.367 回答