You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

继承Repository的Calculator类无法访问列表新增Employee数据怎么办

问题原因

你创建了两个相互独立的类实例,各自持有一份独立的员工数据列表:

  • 主方法中操作的re是Repository类的实例,你新增的员工都存储在这个实例持有的myEmployeeData列表里
  • Calculator继承了Repository,你初始化的cal是Calculator类的独立实例,它本身也持有一份myEmployeeData列表,这份列表只有初始的3条数据,和re的列表完全无关,自然看不到后续新增的内容
错误的设计逻辑

你违背了SOLID原则中的核心要求:

  1. 单一职责原则:Calculator的核心职责是薪资计算,不是数据存储,不应该继承Repository。继承代表is-a(是一种)的关系,计算器显然不是一种数据仓库
  2. 依赖倒置原则:高层逻辑不应该直接耦合底层实现,应该通过依赖注入的方式获取需要的服务
修复方案

1. 重构Calculator类,移除继承,改为依赖注入Repository

public class Calculator
{
    public double AnnualPayAfterTax;
    public double AnnualPay;
    // 持有外部传入的Repository实例
    private readonly Repository _repository;

    // 构造函数要求传入Repository实例
    public Calculator(Repository repository)
    {
        _repository = repository;
    }

    public double CalculateEmployeePay(int employeeID)
    {
        var employee = _repository.Read(employeeID);
        bool EmploymentStatus = employee.isPermanent;
        if (EmploymentStatus) 
        { 
            int Salary = (int)employee.Salaryint;
            int Bonus = (int)employee.Bonusint;
            AnnualPay = Salary + Bonus;
        }
        else 
        {
            int DayRate = (int)employee.DayRateint;
            int WeeksWorked = (int)employee.WeeksWorkedint;
            // 原逻辑错误:临时工薪资应为 日薪*每周5天 * 工作周数,原代码写的是加法
            AnnualPay = (DayRate * 5) * WeeksWorked;
        }
        if (AnnualPay <= 12570) 
        { 
            AnnualPayAfterTax = AnnualPay; 
        }
        else 
        { 
            // 原逻辑错误:税后薪资是免税部分+超出部分的80%,原代码仅计算了需要缴纳的税额
            AnnualPayAfterTax = 12570 + (AnnualPay - 12570) * 0.8; 
        }
        return AnnualPayAfterTax;
    }
}

2. 修改主方法的初始化逻辑,保证两个类使用同一份数据

// 先初始化Repository实例
Repository re = new Repository();
// 将同一个Repository实例传入Calculator,保证双方操作的是同一份员工列表
Calculator cal = new Calculator(re);
其他优化建议
  • 现有Read方法是按下标取员工,删除员工后下标和员工ID会不匹配,建议修改为按EmployeeID字段查找:return myEmployeeData.FirstOrDefault(e => e.EmployeeID == employeeID);,避免索引越界错误
  • 可以为Repository定义抽象接口,进一步解耦Calculator和具体的Repository实现

内容的提问来源于stack exchange,提问作者Alexander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:54:00