基于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
相关产品推荐
相关产品推荐

