员工休假计划的正确设计模式?

时间:2010-09-02 20:22:16

标签: c# design-patterns

我有一个简单的员工时间请求Web应用程序(C#,Silverlight或ASP.NET)。员工可以申请休假时间,生病时间,产假,补偿时间等(可能有大约10种不同类型的假期,将来可能会更多)并且他们的经理必须批准每个请求。

它真的变成了一个混乱的所有的anomolies和我必须预期。例如,不同角色的人获得不同数量的休假时间。有些人有休假时间累积,其他人从财政年度开始(9月1日)开始。员工有一家银行,他们可以保持病假和休假时间,但这些银行的规模有限,并根据员工角色而有所不同。在任何时候,我都需要能够看到员工离开了多少以及他们可以获得多少。我认为,最大的异常是,员工可以改变角色(即在任何特定时间切换到经理,从而开始从那时开始获得更多假期)。

这是一个非常复杂的问题。我的问题是:

我该如何设计?有什么好的设计模式可用于此,我将来可以非常灵活?

谢谢!

6 个答案:

答案 0 :(得分:1)

在政治上,我会避免整个问题。你必须和这些人一起工作,你的应用程序搞砸他们的假期可能会让你伤残。

无论如何,我认为跟踪度假的累积超出了你的范围,除非这应该是一个工资单和福利跟踪应用程序。相反,我会让一个合适的一方记录一个员工在给定时间的假期,并将请求转发给经理并留在那里。

答案 1 :(得分:0)

鉴于复杂性,听起来您需要围绕规则系统设计时间应计流程。您需要定义确定休假积累的规则,并将其应用于每种类型的员工。必须适当地实施和应用影响度假方式的每条规则。

尝试以面向对象的方式设计规则:一些规则可能普遍适用,其他规则更具体。

您需要能够审核休假时间。当用户被授予使用休假时间的权限时,使用分类帐系统“撤销”所获得的时间。定期(每日)使用规则系统授予时间,也使用分类帐系统。

答案 2 :(得分:0)

如果可能,请不要跟踪小时数:
只需维护组织结构图和时间类型列表,并将请求传递给请求者的主管

如果您必须跟踪可用时间:
除了上面的项目之外,它听起来像是一对(可能很大)的查找表。

如下所示的架构似乎是合适的

(1) Employee  --> (1) Position --> (1/*) TimeOffAllowances 
              --> (1/*) AvailableTimeOff

在此设计中,您可能在TimeOffAllowances / AvailableTimeOff中有一行,每列都是一种容差类型,或者每种类型都有一行。因此,关系可以是一对多,也可以是一对一。 (上面的(1/*))。

当然,您需要一个界面来输入所有这些数据......

答案 3 :(得分:0)

采用“什么样的设计模式”方法从来都不是解决问题的好方法。您所描述的需求实际上是“我如何构建企业度假管理系统”。设计模式并不能解决这类问题,设计模式规模较小。企业系统通常在整个系统中使用许多不同的设计模式。设计模式实际上只是蓝图,是构建代码的有效方法。看看wikipedia,可以更深入地了解设计模式解决的问题类型。

答案简短:没有,没有设计模式。

我认为您需要坐下来开始记录系统的工作方式,所有功能(无论多大或多小),以及在开始考虑代码之前如何计算和预订休假时间的所有规则。在开始编码之前,还有很长的路要走。

答案 4 :(得分:0)

我会更多地看一下像Domain Driven Design这样的东西来描述你正在使用的域。首先查看您用来描述域名的名词:

  • 员工
  • 管理器
  • 作用
  • 休假时间
  • 生病时间
  • 产假
  • 请求

这些名词开始定义您可以在业务领域中定义的模型。然后我会看一下与每个名词相关的动词:

  • 员工可以请求时间关闭
  • 经理可以批准 请求

这些动词现在正在定义你的行动。你有域,但你也需要前端,我会将域包装在服务层内,即使服务没有托管在任何地方,并使用存储库模式来隔离您的数据访问层。

作为一方,请查看命令查询责任分离(CQRS)以定义用户界面与域之间的交互。

答案 5 :(得分:-1)

一个起始设计模式将是MVC,因此可能使用ASP.NET MVC作为其内置;)

这样您就可以将视图代码与您为不同员工制定的更复杂的业务规则分开。

策略设计模式将用于计算剩余时间,因此您可以封装代码以根据9月1日或其他某个日期计算剩余天数。