首页 理论教育 薪水支付案例解析-最佳软件开发实践

薪水支付案例解析-最佳软件开发实践

时间:2023-11-21 理论教育 版权反馈
【摘要】:Robert C·Martin在他的名著《敏捷软件开发:原则,模式与实践》中使用了一个薪水支付的案例来解说面向对象的分析与设计。为了避免没看过《敏捷软件开发:原则,模式与实践》完全看不懂这一章,接下来我们来看一下薪水支付案例的基本要求。6)薪水支付程序每个工作日运行一次,并在当天为相应的雇员进行支付。系统会被告知雇员的支付日期。这样它会计算从雇员上次支付日期到规定的本次支付日期间应付的数额。

薪水支付案例解析-最佳软件开发实践

Robert C·Martin在他的名著《敏捷软件开发:原则,模式与实践》中使用了一个薪水支付的案例来解说面向对象的分析与设计。从软件分类上看,这个例子属于小规模的应用系统,是比较“纯粹”的程序,不涉及过多的底层细节。在这样的程序里主要需要关注的是业务逻辑和相关概念的处理,而基本不需要关注平台细节。而又因为其规模相对比较小,不会占去很多篇幅。上述两点使这个案例很适合作为书中的例子来使用。这也大概是Robert C·Martin使用它的原因。而我们在这里也使用这个案例,则还有额外的两个原因。

第一个是Robert C·Martin的实现过程和方法体现的是比较纯粹的面向对象方法,而本书中更想强调的则是一种混合性的方法。在把两种方法进行比较之后,优劣得失会显得更加清楚。

第二个是《敏捷软件开发:原则,模式与实践》流传得相对比较广,这样大部分人在阅读本书的这个例子的时候就可以省些力气。

为了避免没看过《敏捷软件开发:原则,模式与实践》完全看不懂这一章,接下来我们来看一下薪水支付案例的基本要求。

(下文引自《敏捷软件开发:原则,模式与实践》)

1)有些雇员是钟点工。会按照他们雇员记录中每小时报酬字段的值对他们进行支付。他们每天会提交工作时间卡,其中记录了日期及工作小时数。如果他们每天工作超过8小时,那么超过的部分会按照正常报酬的1.5倍进行支付,每周五对他们进行支付。

2)有些雇员完全以月薪进行支付。每个月的最后一个工作日对他们进行支付。在他们的雇员记录中有一个月薪字段。

3)同时对于一些带薪(Salaried)雇员,会根据销售情况,支付给他们一定数量的酬金。他们会提交销售凭条其中记录了销售的日期和数量。在他们的雇员记录中有一个酬金字段。每隔一周的周五对他们进行支付。

4)雇员可以选择支付方式。可以选择把支付支票邮寄到他们指定的邮政地址;也可以把支票保存在出纳人员那里随时支取;或者要求将薪水直接存入他们指定的银行账户。

5)一些雇员会加入协会。在他们的雇员记录中有一个每周应付款项字段。这些应付款必须要从他们的薪水中扣除。协会有时也会针对单个协会成员征收服务费用。协会每周会提交这些服务费用。服务费用必须要从相应雇员的下个月的薪水总额中扣除。

6)薪水支付程序每个工作日运行一次,并在当天为相应的雇员进行支付。系统会被告知雇员的支付日期。这样它会计算从雇员上次支付日期到规定的本次支付日期间应付的数额。(www.xing528.com)

直接基于这些原始需求开始工作事实上有点困难,至少需要对典型的应用场景进行一些分析(纯粹的OO爱好者一般比较厌恶Activity图,而喜欢鲁棒图,但我们这里还是使用它)。

最典型的场景,其核心步骤只有3个:读取雇员列表→计算每个人的薪资→为每个人支付薪资,其Activity图如图9-1所示。

978-7-111-42626-4-Chapter09-1.jpg

图9-1 支付薪水的Activity图

这个过程中出现的各种概念以及它们之间的关系如下:

读取所有员工列表:雇员,雇员数据库

计算每个人薪资:薪资计算方式、是否加入协会、销售额、工作小时。

为每个人支付薪资:支付时间(月薪,还是周薪)、支付方式(邮寄,现金或者直接汇入账户)。

到这里为止,不管是在分析上还是在理解上都几乎没有难度,接下来为了把需求转换为代码,我们需要做各种或大或小的决策和取舍,但不管怎么样,我们都要牢记我们的初衷—在能够实现所有功能的前提下保持代码简单。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈