1

我一直在做医疗数据收集的网络应用程序很长一段时间。客户总是有这样的要求:在表格中添加一个新字段,例如他们想在人口统计表格中添加“性别”。

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

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

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

4

2 回答 2

1

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

那是我们的模型类:

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类时,它会自动传播到数据库创建和提取查询,并且表单会合并新添加的字段。

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

于 2013-07-24T14:28:42.037 回答
0

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

您可以将所有表单字段存储在 Demographic 类的地图/表格/字典中。

  1. 在 UI 中添加字段
  2. 将其值添加到预定义键的类的映射/字典中
  3. 使用每对的键作为列名,将地图/字典保存到您的数据库
  4. 从您的数据库中填充地图/字典,插入一对以列名作为键
  5. 保存时检查是否有该键的列。如果没有 - 添加一个
  6. 使用这种方法通知您的逻辑地图/字典已更新,并使用新列(键)更新您的 CREATE 查询
于 2013-07-24T14:39:05.683 回答