我已经做了很长一段时间的医学数据收集网络应用程序。客户总是有这样的要求:在表单中添加一个新字段,例如,他们希望在人口统计形式中添加“性别”。
每次他们要求,我都得
我必须对每个层、每个模块(UI、业务层、数据访问层、db)进行更改,我觉得这是愚蠢的。
我该如何处理这种变化?我该用什么图案?
发布于 2013-07-24 14:28:42
像ORM这样的东西在这里会有帮助。我将从Django框架给出一个例子。我并不是说你应该特别使用这个,但是它的教程很好地说明了这个概念。
这是我们的模型课:
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published)它生成以下DB查询:
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-24 14:39:05
这并不完全是一种模式,但这里有一个想法:
可以将所有表单字段存储在人口统计学类中的映射/表/字典中。
https://stackoverflow.com/questions/17836728
复制相似问题