最近我参加了一个面试。这个问题被问到了。
这就是这个场景。
我们有两种类型的员工。正式员工和合同制员工。正式员工的工资将在月底按固定基础发放。合同制员工将根据他们的工作小时数按周支付工资。
经理将被指派给这些员工进行监督。经理可以有正式员工和合同制员工。
此应用程序将计算这些员工的工资单。
他们要求我提出针对这种情况的类设计。
面试官希望我给他什么样的回答?在这个方向上的指针将受到高度赞赏。
发布于 2011-03-28 17:53:30
以下可能是其中一种设计
设计1。
public class Employee
{
public bool isContractEmployee
{ get; set;}
public abstract float CalCulatePayroll();
}
public class FullTimeEmp : Employee
{
public override float CalCulatePayroll()
{
}
}
public class ContractEmp : Employee
{
public int NoofHR
{get; set;}
public override float CalCulatePayroll()
{
sal = nohr*money;
}
}设计2。
public class employee
{
public bool isContractEmployee
{ get; set;}
public int NoofHR
{get; set;}
public float CalCulatePayroll()
{
if(this.isContractEmployee)
{
//calculate sal on based hr
}
else
{
//calculate regurlare sal
}
}
}发布于 2011-03-28 18:01:42
他们正在测试你是否理解一些好的面向对象设计的基本原则。具体地说,他们似乎在寻找:
发布于 2011-03-28 18:11:30
这是一个考验你的问题,如果你理解了关注点的分离(计算员工的工资不是员工本身的责任),看看你是否理解抽象性和多态性:(目前)有两种不同的方法来计算工资。您可以实现某种策略设计模式来执行计算,以便在单独的类中指定算法的每个实现。这有助于维护性和可扩展性(如果需要另一种算法)。
public class Employee
{
public bool IsContractEmployee
{
get;
set;
}
}
public class WageCalculator
{
private abstract class WageCalculAlgorithm
{
public virtual decimal Calculate( Employee emp )
{
// regular calc goes here
}
}
private class ContractorCalculator : WageCalculAgorithm
{
public override decimal Calculate( Employee emp )
{
// contractor calc goes here
}
}
public static decimal CalculateWageFor( Employee emp )
{
if( emp.IsContractEmployee )
return new ContractorCalculator().Calculate(emp);
else
return new WageCalculAlgorithm().Calculate(emp);
}
}https://stackoverflow.com/questions/5457236
复制相似问题