在薪资系统中,我有一个名为Salary
的班级。为了准备工资,我们需要员工的收入和扣减细节。
例如:
收益可能是:基本工资,加班费,津贴等 扣减可能是:罚款,贷款分期付款,福利捐款等。
我只是想知道这些Salary
,Deduction
和Earning
类之间的关系。似乎Deduction
和Earning
是salary
的一部分,因此它可能具有合成/聚合关系。
但是,您将salary
计算为:[Salary
= Earnings
- Deductions
]。
同样SalaryID
,EmployeeID
和Date
字段对Earning
和Deduction
类都可能是通用的,这些类可以从Salary
继承。
那么请您澄清上述课程在这种情况下的关系?如果你能展示一下如何在课堂上实现这些关系,我也很感激。
编辑:我正在尝试使用MVP模式开发一个win表单系统,我的语言是C#.net。基本上我有员工参加数据库,所以使用两个SP我产生收入和扣除。然后用户给出一个UI来编辑数字或输入随机数字,如特殊津贴,罚款等。最后所有扣除和收入细节将保存在一个名为SalaryTrans的表中[sal_id,emp_id,pay_period,basic_salary,overtime_payment,allowances,罚款,other_deductions,...,gross_salary]。
答案 0 :(得分:2)
我建模付款(我说付款而不是收入,因为薪水支票的正数不是收入)和扣除作为单个类层次结构:具有SalaryPayment,ReimbursementPayment等子类的接口或超类PayrollAmount, FederalTaxDeduction,MedicalInsuranceDeduction等。每个金额都有支付期作为属性。
就我所见,你上面提到的薪水并不需要成为一个班级;它只是通过汇总所有金额计算得出的数字。可能有Paycheck课程;会聚合Amounts,它可能有一个返回工资的方法。
答案 1 :(得分:1)
解决这个问题的一种方法是将情况视为: 在构建Salary对象时,您是否需要获得所有扣除和收益,并且需要在那时计算一次?如果是这样,那么它可能是一个组合。但是,如果可以在随机时间从工资中添加和删除收入和扣减,则可能是聚合。
通常,首先,尝试从业务域派生此关系。在该域中查看它们的相关性。其次,它也会影响您实施系统的方式,使用的技术。例如,一些实现(例如,用于对象关系或其他数据库存储目的)可能需要ID,而另一些实现则不需要。最重要的是,它在很大程度上取决于您的具体情况。
答案 2 :(得分:1)
以下结构如何:
收入和扣减是抽象类,并由具体概念继承。
为了计算一个月的工资,您只需要创建一组收入和扣减,并将它们分配给相应的工资。薪水的金额是自动计算的(因此“派生”),所以不用担心。
最重要的决定是如何创建一个月的收入和扣减对象。一种可能的方法是在Salary中添加一个方法,根据定义良好的算法创建收入和扣减,并将它们与自身连接起来。薪资对象具有计算此(人,月)所需的所有信息。我喜欢这种方法,因为所有的知识都是本地化的,整个结构仍然很好地封闭和封装。
答案 3 :(得分:0)
这类问题应该向" business"在你旁边。我认为不是全球程序员社区。问你的"业务"并将其写在文档中,以便与他们讨论。
在了解" business"之前进行编码。应该工作应该导致灾难。我的方法是制作实体关系图。
铅笔和橡皮擦比代码雕刻更便宜。