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

基于SOLID原则实现条件类继承:员工与HR方法权限控制

基于SOLID原则的解决方案

要满足需求,核心遵循接口隔离原则(ISP)——客户端不应依赖自身不需要的接口。通过拆分接口为不同角色提供对应抽象,结合依赖倒置原则实现解耦。

实现步骤与代码示例

1. 定义职责单一的接口

拆分出两个接口,匹配不同角色的访问权限:

// 仅包含Employee所需的方法
public interface IEmployee
{
    void EmployeeDetails();
}

// 继承IEmployee,添加HR专属的薪资方法
public interface IHr : IEmployee
{
    void SalaryDetails();
}

2. 实现核心业务类

让原EmployeeClass实现IHr接口,完成两个方法的具体逻辑:

public class EmployeeClass : IHr
{
    public void EmployeeDetails()
    {
        // 示例逻辑:输出员工基础信息
        Console.WriteLine("展示员工基础信息");
    }

    public void SalaryDetails()
    {
        // 示例逻辑:输出员工薪资详情
        Console.WriteLine("展示员工薪资详情");
    }
}

3. 封装角色类

Employee类仅依赖IEmployee接口,Hr类依赖IHr接口,通过构造注入实现依赖:

public class Employee
{
    private readonly IEmployee _employee;

    public Employee(IEmployee employee)
    {
        _employee = employee;
    }

    public void EmployeeDetails()
    {
        _employee.EmployeeDetails();
    }
}

public class Hr
{
    private readonly IHr _hr;

    public Hr(IHr hr)
    {
        _hr = hr;
    }

    public void EmployeeDetails()
    {
        _hr.EmployeeDetails();
    }

    public void SalaryDetails()
    {
        _hr.SalaryDetails();
    }
}

4. 主方法调用

public static void Main()
{
    var employeeService = new EmployeeClass();

    // Employee对象仅能调用EmployeeDetails
    var employee = new Employee(employeeService);
    employee.EmployeeDetails();

    // Hr对象可调用两个方法
    var hr = new Hr(employeeService);
    hr.EmployeeDetails();
    hr.SalaryDetails();
}

符合SOLID原则的说明

  • 接口隔离原则(ISP):Employee类仅依赖自身需要的IEmployee接口,无需接触SalaryDetails方法,避免冗余依赖。
  • 依赖倒置原则(DIP):角色类依赖抽象接口而非具体的EmployeeClass,降低模块耦合,后续可轻松替换业务实现类。
  • 单一职责原则(SRP):每个接口职责单一,EmployeeClass专注业务逻辑实现,角色类专注权限控制,职责划分清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:49:16