当前位置:科技动态 > 重构对象列表以实现业务规则

重构对象列表以实现业务规则

  • 发布:2023-09-30 12:22

| 我需要重构以下类:
公共接口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 = 值; }
        }


    }

相关文章