我刚刚设计了一套桌子,我想出了一个我很满意的建筑!我之前从未见过它,所以我很想知道我是否只是重新发明了轮子(最有可能),或者这是否是真正的创新。
以下是问题陈述:我Employees
可以与公司签订不同的合同。PayRate
每个员工可以执行不同的活动,每个活动可能有不同的工资率,有时是完成一项活动的固定金额,有时是小时费率,有时是分层费率。可能还有一个特定的客户特别喜欢该员工,因此当他与该特定客户合作时,他获得更高的费率。如果没有定义费率,他将获得公司违约率。
不要对细节大惊小怪:重点是可以定义很多工资率,每种工资率都相当复杂。薪资率都有以下共同点:
这些工资率适用于:
如果我必须遵循简单的暴力方法,我将不得不为上面3个表中的每个表创建一个PayRateTier
和PayRatePackage
克隆表,加上它们对应的Linq类,加上逻辑到计算3个不同位置的速率,以某种方式重构以重用计算逻辑。啊。这就像在数据库上使用复制和粘贴一样。
相反,我做了什么?我创建了一个中间表,我称之为PayRate
,只包含一个ID字段。我只有一个 PayRatePackage
表,其中强制性FK为PayRateTier
,而PayRate
表格强制性FK为DefaultCompanyPayRate
。然后,PayRatePackage
与[{1}}和EmployeeRate
一样具有强制性FK EmployeeOverrideRate
。
这么简单 - 它有效!
(请原谅我没有附上图表;如果我已经解决了主要问题,那么我需要付出很多努力才能解决问题。如果很多人想要查看图表,请说明评论,我会把东西放在一起。)
现在,我很确定这个简单有效的东西必须在某个地方采用正式的设计模式,我很想知道它是什么。或者我刚刚发明了一些新东西? :)
答案 0 :(得分:6)
我很确定这是Strategy Pattern
“定义一系列算法,封装每个算法,并使它们可互换。策略允许算法独立于使用它的客户端。”
答案 1 :(得分:5)
听起来像关系数据库设计给我。您将特定逻辑分解为特定实体,并将它们键回原始表格...标准规范化...