|
我需要重构以下类:
公共接口IEmployee
{
int VacationWeeks { 获取; }
int YearsWithCompany { 设置;得到; }
双倍工资{设置;得到; }
}
公共类 Employee : IEmployee
{
私人只读 int 假期周;
公共雇员(假期周)
{
this.vacationWeeks = 假期周;
}
公共 int 假期周
{
获取{返回假期周; }
}
公共 int YearsWithCompany { 设置;得到; }
公共双薪{设置;得到; }
}
我需要确保 VacationWeeks 仅依赖于 YearsWithCompany 并且映射是从数据库加载的。到目前为止我已经想出了:
公共类 EmployeeNew : IEmployee
{
私人词典假期周表;
public EmployeeNew(字典假期周表)
{
this.vacationWeeksTable = VacationWeeksTable;
}
公共 int 假期周
{
获取{返回假期周表[YearsWithCompany]; }
}
公共 int YearsWithCompany { 设置;得到; }公共双薪{设置;得到; }
}
该类可以满足我的要求,但仍然存在一个漏洞:同一集合中的 EmployeeNew 的不同实例可能是使用 VacationWeeksTable 的不同实例创建的。
同一集合中的 EmployeeNew 的所有实例必须引用相同的 VacationWeeksTable。
我正在重构的应用程序在整个系统中使用了很多列表,我们需要能够修改 YearsWithCompany 和 Salary,但每个列表仅使用一个 VacationWeeksTable。这些列表会被迭代多次;它的元素在每次迭代中都会被修改。
这是我的不完美的解决方案。欢迎提出建议:
//这个类做了两件事,我不喜欢
公共类 EmployeeList : IEnumerable, IEmployee
{
私人字典假期周表;
私人名单员工;
私有 int 当前索引;
privateEmployeeSpecificDataCurrentEmployee
{
获取 { 返回员工[当前索引]; }
}
公共 IEnumerator GetEnumerator()
{
for (currentIndex = 0; currentIndex < 雇员.Count; currentIndex++)
{
产量返回这个;
}
}
IEnumerator IEnumerable.GetEnumerator()
{返回 GetEnumerator();
}
公共 int 假期周
{
获取{返回假期周表[YearsWithCompany]; }
}
// 这是我不喜欢的丑陋的重复代码
公共 int YearsWithCompany
{
获取 { 返回 CurrentEmployee.YearsWithCompany; }
设置 { CurrentEmployee.YearsWithCompany = 值; }
}
// 这是我不喜欢的丑陋的重复代码
公职双薪
{
获取 { 返回 CurrentEmployee.Salary; }
设置 { CurrentEmployee.Salary = 值; }
}
}