论坛首页 Java企业应用论坛

提问:使用策略模式的烦恼,要实现208个类

浏览 42215 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-09-21  
 确实是这样的,真是太复杂了。我想也是利益冲突、政治斗争的产物了!
 其实也是,不就是根据变动和人员种类属性,套算表中的工资额,比较比较,选出一个高的,也就是这样了。
0 请登录后投票
   发表时间:2006-09-21  
testhubo 写道
第一个问题:
  一:工人的工资组成是岗位工资,级别工资,特殊津贴,保留津贴。首席执行官的工资组成是职务工资,薪级工资,特殊津贴,保留津贴。
  二: 工资组成中,特殊津贴因职务(工人、首席执行官)不同,有不同的特殊津贴档次,每个档次对应不同的工资额。其余工资组成间的差别与此类似。
第二个问题:
  一:职务变动有低职务升到高职务,或者受处罚降级。同一种类人员不同的职务对应不同的档次级别,职务变动算法规则条件是“职务变动”,人员种类不同的属性信息,如工作年限,任本职务年限等。
  二:确实有“年满加薪”,但还不在这16种变动中,是另外一种算法。我就举有的“学历变动”吧。博士,硕士转正定级对应不同的职务级别,要与应聘的职务的工资各组成部分比较,取高的作为“学历变动”后的工资,比如应聘职务是部门经理,对应的职务工资档次是6,而按学历“硕士”转正定级对应的职务工资档次是7,那么选择7为工资档次,再查询数据库找对应的工资额。  

   请赐教!!! 


继续分析下去,可能还有更多变化的因素,感觉你们把这个模型简单化了。从UseCase的角度讲,你上面至少包含了(1)计算个人月薪资(2)薪资调整。(没看明白职务变动放这里的目的是什么?是为了薪资调整么?还是另外一个新的UseCase?)  个人工资计算应该是一套规则,工资调动应该是另外一套规则。里面还牵扯到学历,职位,工作年限.....,N多因素,是否把这些东西作为Employee的属性?还是独立为更小的对象?....

其实,现实就是这样,自身的能力原因,或者开发成本原因,我们很难把问题分析清楚,分析得太多了又可能over design。
0 请登录后投票
   发表时间:2006-09-21  
testhubo 写道
gigix 写道
testhubo 写道
第一个问题:
  一:工人的工资组成是岗位工资,级别工资,特殊津贴,保留津贴。首席执行官的工资组成是职务工资,薪级工资,特殊津贴,保留津贴。
  二: 工资组成中,特殊津贴因职务(工人、首席执行官)不同,有不同的特殊津贴档次,每个档次对应不同的工资额。其余工资组成间的差别与此类似。
第二个问题:
  一:职务变动有低职务升到高职务,或者受处罚降级。同一种类人员不同的职务对应不同的档次级别,职务变动算法规则条件是“职务变动”,人员种类不同的属性信息,如工作年限,任本职务年限等。
  二:确实有“年满加薪”,但还不在这16种变动中,是另外一种算法。我就举有的“学历变动”吧。博士,硕士转正定级对应不同的职务级别,要与应聘的职务的工资各组成部分比较,取高的作为“学历变动”后的工资,比如应聘职务是部门经理,对应的职务工资档次是6,而按学历“硕士”转正定级对应的职务工资档次是7,那么选择7为工资档次,再查询数据库找对应的工资额。  

   请赐教!!! 

正应着教主那句话,所谓业务逻辑就是业务没有逻辑。
直觉是很难办。也许去探探客户真正的想法会有所收获。若是按照这个样子……呵呵。

   说的很经典,谢谢了。这个确实是客户需要达到的要求,是用户的真正需求。以前已经有一个完成这样目标的系统,不过是CS架构的,达到了上述需求。现在简单化了大部分的业务规则,要求用BS架构来作。
   原来系统的办法就是16种变动,对应16个类,每个类中有几个算工资组成的函数,每个函数中有13个因人员种类不同而写的if,else。
   现在我正在这些规则中,抽象公用的东西,想在算法中实现引用复用。
   
   这个项目也算是对我们的考验吧!!!


先按照原来的写,写的过程中进一步熟悉业务逻辑,然后再重构,不用一步到位吧。


0 请登录后投票
   发表时间:2006-09-21  
   职务变动后,结果就是产生新的个人月薪资,即16种工资变动都是薪资调整,每次变动后,产生一条新的工资记录。设计中,如性别......等是employee的属性,而学历、职位等是更小的对象,因为他有一个历史集合。16种工资变动后,都会产生新的个人月工资,以后发工资的时候,就按最后一次工资变动产生的记录发工资。
0 请登录后投票
   发表时间:2006-09-21  
clamp 写道
testhubo 写道
gigix 写道
testhubo 写道
第一个问题:
  一:工人的工资组成是岗位工资,级别工资,特殊津贴,保留津贴。首席执行官的工资组成是职务工资,薪级工资,特殊津贴,保留津贴。
  二: 工资组成中,特殊津贴因职务(工人、首席执行官)不同,有不同的特殊津贴档次,每个档次对应不同的工资额。其余工资组成间的差别与此类似。
第二个问题:
  一:职务变动有低职务升到高职务,或者受处罚降级。同一种类人员不同的职务对应不同的档次级别,职务变动算法规则条件是“职务变动”,人员种类不同的属性信息,如工作年限,任本职务年限等。
  二:确实有“年满加薪”,但还不在这16种变动中,是另外一种算法。我就举有的“学历变动”吧。博士,硕士转正定级对应不同的职务级别,要与应聘的职务的工资各组成部分比较,取高的作为“学历变动”后的工资,比如应聘职务是部门经理,对应的职务工资档次是6,而按学历“硕士”转正定级对应的职务工资档次是7,那么选择7为工资档次,再查询数据库找对应的工资额。  

   请赐教!!! 

正应着教主那句话,所谓业务逻辑就是业务没有逻辑。
直觉是很难办。也许去探探客户真正的想法会有所收获。若是按照这个样子……呵呵。

   说的很经典,谢谢了。这个确实是客户需要达到的要求,是用户的真正需求。以前已经有一个完成这样目标的系统,不过是CS架构的,达到了上述需求。现在简单化了大部分的业务规则,要求用BS架构来作。
   原来系统的办法就是16种变动,对应16个类,每个类中有几个算工资组成的函数,每个函数中有13个因人员种类不同而写的if,else。
   现在我正在这些规则中,抽象公用的东西,想在算法中实现引用复用。
   
   这个项目也算是对我们的考验吧!!!


先按照原来的写,写的过程中进一步熟悉业务逻辑,然后再重构,不用一步到位吧。




  业务逻辑已经整理出了,现在就是写概要设计的时候,将来要写详细设计。所以现在想尽可能少的压缩策略类,尽量将相同的东西抽象出来。设计方式是这样一层一层的用策略模式了,现在就是看是否有其它的方法修改一下这种策略模式要很多类的设计方式,少写一些类,又达到用策略模式的优点。
  
0 请登录后投票
   发表时间:2006-09-22  
看来lz是被策略模式套牢了!从一开始打定用该模式,然后为了套这个模式而套这个模式!

看了半天,直觉用决策表就可以搞定的,不过你的需求实在是太少!
0 请登录后投票
   发表时间:2006-09-22  
yimlin 写道
看来lz是被策略模式套牢了!从一开始打定用该模式,然后为了套这个模式而套这个模式!

看了半天,直觉用决策表就可以搞定的,不过你的需求实在是太少!

同意
0 请登录后投票
   发表时间:2006-09-22  
testhubo 写道

  业务逻辑已经整理出了,现在就是写概要设计的时候,将来要写详细设计。所以现在想尽可能少的压缩策略类,尽量将相同的东西抽象出来。设计方式是这样一层一层的用策略模式了,现在就是看是否有其它的方法修改一下这种策略模式要很多类的设计方式,少写一些类,又达到用策略模式的优点。
  


建议你还是先准备测试数据和先写测试方法,然后把所有的东西先扔到一个大类里面,提供一个通用的接口,先确保所有测试方法跑通。
然后就慢慢重构吧……
0 请登录后投票
   发表时间:2006-09-22  
抛出异常的爱 写道
yimlin 写道
看来lz是被策略模式套牢了!从一开始打定用该模式,然后为了套这个模式而套这个模式!

看了半天,直觉用决策表就可以搞定的,不过你的需求实在是太少!

同意


   主要目的也不是用策略模式,因工资政策不断变化及太复杂,是为了维护及修改的方便。假如其它能达到这个目标,策略模式只是手段罢了!!!
0 请登录后投票
   发表时间:2006-09-22  
如果说不动程序可以改
与动了程序才能改
那个更好维护
如果IF多于三个在一起
我就会试着用一个数组来代表
如果多于二十个
试着用数据库来存
规则这东西
也是数据的一部分
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics