我长期以来一直在为医疗数据收集做网络应用。客户始终有此类请求:在表单中添加新字段,例如他们希望以人口统计形式添加“性别”。
每次他们要求时,我都要
1.在页面上添加一个新文本框。
2.在我的人口统计表单类中添加一个新字段(属性)。
3.更改我的业务逻辑以将表单保存到DB。
4.更改我的业务逻辑以从DB加载表单。
5.在“数据库”表中添加新列。
6.更改存储过程以插入和更新人口统计表。
我必须对每一层,每个模块(UI,业务层,数据访问层,数据库)进行更改,我觉得这很愚蠢。
我该如何处理这种变化?我应该使用什么模式?
答案 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)
不完全是一种模式,但这是一个想法:
您可以将所有表单字段存储在人口统计类中的地图/表格/词典中。