我知道强内聚力的思想不仅适用于类,也适用于方法。当我说一种方法有很强的凝聚力时,我要明确一点,我指的是一种只做一项任务并且做得很好的方法。这个想法确实适用于简单的getter和setter。但有时,我们通常会遇到在内部执行多个任务的方法,尽管如果您查看更高层次的抽象,它似乎是在执行单个任务。这种方法的一个例子可以是:
public void startUp() {
List<SubSystem> subSystems = getSubSystems();
sychronized(subSystems) {
for (SubSystem subSystem : subSystems) {
subSystem.initialize();
}
}
}在这些subSystem#initialize()方法中,发生了很多事情。那么,这是否违反了高/强凝聚力原则?
发布于 2013-03-03 17:06:14
不是的。看起来这是一种有凝聚力的方法。您可以将方法重命名为"initializeAllSubsystemsOnStartup“,这可能比"startUp”更具描述性。下面是一个不连贯的例子:
public void updateCustomerOrders(Customer customer, Orders newOrders) {
if(!customer.isPersisted()) { customer.save(); }
else if(customer.inGoodStanding() {
customer.setOrders();
for(Order order in Orders) { order.setCustomer(); }
customer.save();
} else {
updateUi("Invalid customer");
}
}这是不一致的,因为该方法声称它是关于更新客户订单(其他if块中的行),但是做了很多事情,包括可能更新UI --它觉得它不应该在这一层引起关注。
https://softwareengineering.stackexchange.com/questions/189091
复制相似问题