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

Getter和Setter方法是否违反单一职责原则?Rectangle类合规性探讨

class Rectangle {
    private int width;
    private int height;

    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public void setWidth(int width){
        this.width = this.width;
    }
    
    public void setHeight(int height){
        this.width = width;
    }
    public int calculateArea() {
        return width * height;
    }
}
关于Rectangle类与单一职责原则(SRP)的问题解答

1. 这些是否属于处理矩形相关事务的同一职责?若违反SRP,是仅calculateArea方法违规还是Setter方法也违规?

先明确SRP的核心:一个类只应有一个变更的理由。拆解这个Rectangle类的职责:

  • 存储宽高属性、构造方法,还有Setter(代码里setHeight存在逻辑bug,但从设计意图看是修改状态),这些都属于「维护矩形自身状态」的范畴——如果以后要给宽高加合法性校验、修改状态存储方式,这就是唯一的变更理由,属于同一职责。
  • 但calculateArea()是另一回事,它属于「基于矩形状态执行计算」的职责。要是哪天业务要求面积计算需考虑单位换算、圆角修正,就得单独修改这个方法,这是完全独立的变更理由。

所以这个类违反了SRP,问题出在calculateArea()方法,Setter属于状态维护的一部分,不算违规。

2. SRP是必须严格遵守的规则,还是尽可能遵循的指导原则?

SRP是指导原则而非强制规则,实际开发中得结合场景灵活权衡:

  • 要是业务场景简单(比如这个Rectangle只是用来做基础图形计算,没有复杂扩展需求),把状态和计算放一起反而更简洁,完全没必要硬拆;
  • 但如果是复杂系统,比如矩形需要支持多种计算(面积、周长、对角线),或者状态变更要触发其他业务逻辑,拆分职责能降低耦合,让代码更易维护。

核心看收益:当单一职责带来的可维护性提升大于拆分增加的类数量成本时,就遵循;反之可以灵活合并。

3. 严格遵循SRP是否会产生大量小型类,导致大型项目难以维护?

严格遵循SRP确实会生成更多小型类,但这不等于会导致维护困难——问题的关键是职责划分是否清晰,以及类的组织是否合理:

  • 合理拆分的小型类,每个类职责明确、代码量少,理解和修改成本反而更低;
  • 维护困难的根源往往是职责混乱、类的命名/包结构不合理,而非类的数量多。

当然,如果过度拆分(比如把每个Getter/Setter都拆成单独类),那肯定会冗余且难维护,但这是对SRP的误用,不是原则本身的问题。正确的做法是基于「变更理由」拆分,而非为了拆分而拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:20:11