6

我正在使用实体框架在 ASP.Net 中开发酒店注册/计费应用程序。在为注册人生成账单时,我的客户有很多古怪的标准。而不是每晚每床(相当标准..)计费系统,客户可以根据他们的年龄,他们访问的具体日期,房间类型(双人床,单人床等)或他们正在参加的会议,或者所有四个...

这是我的图表: http://s8.postimg.org/w8nxh8qlh/abstraction.jpg

作为一个相对年轻的程序员,我觉得我在“规则”表的某个地方遗漏了一些东西。我想要做的是允许管理员创建任意数量的 ConditionalStatements(“Age > 5”或“Age < 10”,其中“Age”是 Statement.Value,'>' 是 Condition.Value,并且'5' 是 ConditionalStatement.Value)并将它们中的任意数量链接在一起,从而创建一个“规则”。然后管理员将规则与各种 RateSchedules 相关联,然后应用程序将能够为任何已注册住宿的客户生成账单。

我觉得我走在正确的轨道上,而且这个解决方案的大部分都可以按照我需要的各种方式工作,但似乎有些不对劲。我有两个关于“规则”创建的问题。

  • 就“规则”设计而言,我做错了什么?每次管理员想要制定新规则时,我都觉得生成一个新 RuleSet.ID 是错误的。这是我应该以编程方式做的事情吗?我应该完全重新考虑这个规则过程吗?

  • 从实体框架/脚手架的角度来看,向数据库添加新规则的最佳方式是什么?默认脚手架允许我一次插入一行,但要实际创建一个规则,我需要将 RuleSet.ID 与多个 ConditionalStatement.ID 相关联——但我无法找到一种使用 EF 直观地做到这一点的方法脚手架..

任何指向正确方向的指针都非常感谢!谢谢 :)

编辑: 我根据对我的问题的回答进行了重新设计,但在研究过程中偶然发现了微软的业务规则引擎:http: //msdn.microsoft.com/en-us/library/aa561216.aspx 以及一个数学表达式评估器: http://ncalc.codeplex.com/ 以防万一其他人将来发现这个问题,这些链接可以提供帮助。感谢所有的帮助家伙!

4

1 回答 1

-1

在数据库中为您的域建模通常是一种不好的做法。数据库应该是一个细节,你的所有逻辑都应该在代码中。为此,您应该进行设计以找出客户的要求并在此基础上创建一个域。在这个阶段,持久化它们将非常简单。

例如,想象一个 PricingRule 抽象类和许多不同的实现,例如 AgePricingRule、DatePricingRule、RoomTypePricingRule。然后您的 Bill 对象可以采用 PricingRules 并应用它们并获得最终价格。

需要存储的数据的复杂性是微不足道的,只是定价规则的一些配置。

于 2013-05-23T12:42:39.493 回答