首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解面向对象设计方法的高内聚原理

理解面向对象设计方法的高内聚原理
EN

Software Engineering用户
提问于 2013-03-03 16:43:53
回答 1查看 533关注 0票数 2

我知道强内聚力的思想不仅适用于类,也适用于方法。当我说一种方法有很强的凝聚力时,我要明确一点,我指的是一种只做一项任务并且做得很好的方法。这个想法确实适用于简单的getter和setter。但有时,我们通常会遇到在内部执行多个任务的方法,尽管如果您查看更高层次的抽象,它似乎是在执行单个任务。这种方法的一个例子可以是:

代码语言:javascript
复制
 public void startUp() {
        List<SubSystem> subSystems = getSubSystems();
        sychronized(subSystems) {
            for (SubSystem subSystem : subSystems) {
                subSystem.initialize();
            }
        }
    }

在这些subSystem#initialize()方法中,发生了很多事情。那么,这是否违反了高/强凝聚力原则?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2013-03-03 17:06:14

不是的。看起来这是一种有凝聚力的方法。您可以将方法重命名为"initializeAllSubsystemsOnStartup“,这可能比"startUp”更具描述性。下面是一个不连贯的例子:

代码语言:javascript
复制
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 --它觉得它不应该在这一层引起关注。

票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/189091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档