单一职责原则(SRP):-
每个类都应该有单一的责任。基本上,应该有一个改变的理由。我不知道 最后一句话到底是什么意思。我的解释是,以一种应该有单一理由进行更改的方式设计类,可以有单一方法,因为每个方法都是一种行为,因此也是一种原因。那是对的吗?如果不是,到底是什么原因?
考虑一个股票交易系统,其中大多数开发人员都提出了 StockService.java 具有买入和卖出方法的设计。这里会有两个原因(买入和卖出)来改变这个类
public class StockService {
private String name = "ABC";
private int quantity = 10;
public void buy(){
System.out.println("Stock [ Name: "+name+",
Quantity: " + quantity +" ] bought");
}
public void sell(){
System.out.println("Stock [ Name: "+name+",
Quantity: " + quantity +" ] sold");
}
// other methods related to socks
}
为了遵循SRM原则,我是否需要提出单独的类,其中StockBuyService.java(包含购买相关方法)和StockSellService(包含出售相关方法)。是吗?
最佳答案
不一定。当您考虑到该类的用途是 StockService
时,buy()
和 sell()
方法一起使用就有意义了。从名称来看,可以合理地预期股票服务将处理投资者的交易请求,这些交易请求可以是 buy()
或 sell()
。 (事实上,具有单一方法 trade()
的股票服务可能存在违反接口(interface)隔离原则的风险,具体取决于其实现方式。)
可能存在将此类内部的买卖分开的情况,即如果您必须一起处理所有类型的交易,但又为每种类型实现不同的规则或规定。在这种情况下,您可以考虑使用策略模式,该模式使用多态性来根据正在发生的交易类型来实现规则。但是您的示例类没有涉及这些细节,因此请遵循 YAGNI principle ,你还没到。
但是既然你问了这个问题,那就表明这个名字可能不够清晰。 (在重构实践中,这被称为代码味道。)这是检查它并问问自己类是否正确命名的好时机。这真的是库存服务吗?如果该类被命名为 StockTradingService
,您还会不确定吗?你能想出一个更好的名字来更清楚地表达这个类的目的吗?我并不是说这是一个坏名字,或者说它必须改变。我只是说你应该认识到,必须提出这个问题应该在你的脑海中升起一个“谨慎”的旗帜。
关于java - 在类里面应用单一职责原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46391397/