gpt4 book ai didi

oop - "A method should do one thing, once and only once"- 这是什么意思?

转载 作者:行者123 更新时间:2023-12-02 09:13:06 26 4
gpt4 key购买 nike

SRP: "It says that your class, or method should do only one thing"

我什么时候知道我的方法不止做一件事?
例子:我有一个类BusList<Passenger>和一个枚举 BusState在里面。 Bus 的状态取决于 List<Passenger> 的大小.

public void addPassenger(Passenger p){
this.passengerList.add(p);
if (passengerList.size < 10)
this.state = BusState.EMPTY;
else if (passengerList.size < 30)
this.state = BusState.HALF_FULL;
else if (passengerList.size >= 30)
this.state = BusState.FULL;
}

即使我重构这个:

public void addPassenger(Passenger p){
this.passengerList.add(p);
changeBusState();
}

private void changeBusState(){
if (passengerList.size < 10)
this.state = BusState.EMPTY;
else if (passengerList.size < 30)
this.state = BusState.HALF_FULL;
else if (passengerList.size >= 30)
this.state = BusState.FULL;
}

我认为方法 addPassenger()不止做一件事:
- 将新乘客添加到列表
- 检查当前乘客人数
- 必要时改变总线状态

如何理解 SRP?这个方法做的不止一件事吗?

最佳答案

我同意 addPassenger 做的不止一件事。

让它只做一件事的一种方法是删除 state 字段并使用 getState 方法根据有多少乘客返回状态(假设你正在用 Java 编写并且 BusState 是一个枚举):

public BusState getState() {
if (passengerList.size < 10)
return BusState.EMPTY;
else if (passengerList.size < 30)
return BusState.HALF_FULL;
else if (passengerList.size >= 30)
return BusState.FULL;
else
return BusState.UNKNOWN; // somehow the no. of passengers is negative? You can consider throwing an exception here as well...
}

关于oop - "A method should do one thing, once and only once"- 这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49871724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com