Sco*_*pey 13 c# sql database-design design-patterns
我一直在研究一个动态的问答系统,但是我在为这个系统创建一个高效灵活的设计时遇到了麻烦.我很想知道是否有既定的设计模式或任何设计该系统的建议.
我有一系列问题.在回答之后,将显示另一组问题,具体取决于前一组的答案.这个重复,直到不再需要问题为止.
问题的答案都是布尔值,多项选择或数字.
重要的是,大多数问题仅在满足一组特定标准时显示,并基于之前的答案.
我需要标准来支持主要的布尔逻辑,例如And,Or,Not,Equals,Greater Than和Less Than.
举例来说,假设我已经收到答案的问题,如Age,Gender和State.
接下来的问题之一是In School?,但只有在以下情况下才能显示:Age < 30 AND Gender=Male AND (State = CA OR State = NY)
起初,我们只有3个初始问题,因此我们只使用3列来过滤第二组问题.
但是,我们的业务需求不断增长,我们开始需要更多初始问题,添加更多列,并在这些过滤器中添加更多逻辑.
这很快变得太僵硬和麻烦.
我们第二次尝试使系统更加灵活:将过滤逻辑存储为JavaScript,并运行JavaScript解释器来过滤结果.
这对于灵活性非常有效,但是从数据库中检索数千行并解释脚本的效率极低,并且对于生产执行效果太差.
我们最终将这两种方法结合起来,并提出了一些可行的方法.
我们首先根据几个硬编码的数据库列过滤我们的列表,然后使用JavaScript解释器进一步过滤列表.
这种混合系统仍有许多缺点:
我真的很想听听如何改进这种设计的建议.
我的数据库是MS SQL Server,后端是.NET C#,JavaScript解释器是JINT.UI实现并不重要,但它是一个支持AJAX的网站,用于询问和回答这些问题.
过去我们必须为医疗系统做类似的事情,由于其复杂性,我们不得不重用支持多分类决策树的规则引擎。我记得我遇到过一个关于此的漂亮简单的设计,并设法找到了链接。
http://www.javaworld.com/javaworld/javatips/jw-javatip139.html?page=1
该设计与数据存储松散耦合,因此可以轻松融入您现有的解决方案设计。
| 归档时间: |
|
| 查看次数: |
1697 次 |
| 最近记录: |