首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何(什么设计模式)处理添加新字段?

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

Stack Overflow用户
提问于 2013-07-24 14:20:36
回答 2查看 329关注 0票数 1

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

每次他们要求,我都得

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

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

我该如何处理这种变化?我该用什么图案?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-24 14:28:42

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

这是我们的模型课:

代码语言:javascript
复制
from django.db import models

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

它生成以下DB查询:

代码语言:javascript
复制
BEGIN;
CREATE TABLE "polls_poll" (
    "id" integer NOT NULL PRIMARY KEY,
    "question" varchar(200) NOT NULL,
    "pub_date" datetime NOT NULL
);
COMMIT;

然后,您可以轻松地查看所有的投票:

代码语言:javascript
复制
class IndexView(generic.ListView):
    model = Poll                        # specifies model
    template_name = 'polls/index.html'  # specifies HTML template

模板可以如下所示:

代码语言:javascript
复制
{% 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
EN

Stack Overflow用户

发布于 2013-07-24 14:39:05

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

可以将所有表单字段存储在人口统计学类中的映射/表/字典中。

  1. 在UI中添加字段
  2. 将其值添加到类的映射/字典中,用于预定义的键
  3. 使用每对键作为列名,将映射/字典保存到DB中
  4. 从DB中填充映射/字典,插入以列名作为键的一对
  5. 在保存时,检查该键是否有列。如果没有-加一个
  6. 使用这种方法,通知您的逻辑地图/字典已更新,并更新您的创建查询与新的列(键)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17836728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档