如何(设计模式)处理添加新字段?

时间:2013-07-24 14:20:36

标签: oop design-patterns

我长期以来一直在为医疗数据收集做网络应用。客户始终有此类请求:在表单中添加新字段,例如他们希望以人口统计形式添加“性别”。

每次他们要求时,我都要 1.在页面上添加一个新文本框。
2.在我的人口统计表单类中添加一个新字段(属性)。
3.更改我的业务逻辑以将表单保存到DB。
4.更改我的业务逻辑以从DB加载表单。
5.在“数据库”表中添加新列。
6.更改存储过程以插入和更新人口统计表。

我必须对每一层,每个模块(UI,业务层,数据访问层,数据库)进行更改,我觉得这很愚蠢。

我该如何处理这种变化?我应该使用什么模式?

2 个答案:

答案 0 :(得分:1)

像ORM这样的东西在这里会有所帮助。我会从Django framework给你一个例子。我并不是说你应该特别使用这个,但它的教程很好地说明了这个概念。

那是我们的模特课:

from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published)

它生成此数据库查询:

BEGIN;
CREATE TABLE "polls_poll" (
    "id" integer NOT NULL PRIMARY KEY,
    "question" varchar(200) NOT NULL,
    "pub_date" datetime NOT NULL
);
COMMIT;

然后,您可以轻松查看所有民意调查:

class IndexView(generic.ListView):
    model = Poll                        # specifies model
    template_name = 'polls/index.html'  # specifies HTML template

模板可能如下所示:

{% if latest_poll_list %}
    <ul>
    {% for poll in latest_poll_list %}
        <li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

它可以使用自动字段迭代来显示输入的数据。 Django会自动选择适当类型的输入来匹配数据类型。

现在,当您向Poll类添加字段时,它会自动传播到数据库创建和提取查询,并且表单包含新添加的字段。

当然,不同的框架表现略有不同,因此您需要在使用之前查看它们。所有这些通常都会为您提供解决问题的工具,并调整通用解决方案所不足的地方。

答案 1 :(得分:0)

不完全是一种模式,但这是一个想法:

您可以将所有表单字段存储在人口统计类中的地图/表格/词典中。

  1. 在UI中添加字段
  2. 将其值添加到类'map / dictionary中以获取预定义键
  3. 将每个对的密钥用作列名
  4. ,将地图/字典保存到您的数据库
  5. 从您填充地图/字典数据库插入一对以列名称为键的对
  6. 在保存时检查是否有该列的列。如果没有 - 添加一个
  7. 使用此方法通知您的逻辑地图/字典已更新并使用新列(密钥)更新您的CREATE查询