【问题标题】:Separation of concern vs encapsulation vs loose coupling vs spaghetti code关注点分离 vs 封装 vs 松耦合 vs 意大利面条代码
【发布时间】:2014-07-27 19:46:41
【问题描述】:

这些术语之间的确切含义和关系是什么。看来很多人都把他们搞糊涂了。

我的想法是关注点分离就是封装所带来的。

在一些博客中,松散耦合与关注点分离相混淆,而在另一些博客中只是作为彼此不认识的组件的分离。

意大利面条代码是纠结的代码。所以不遵循以上三个概念可能会导致意大利面条代码。

对吗?

【问题讨论】:

  • 关于松耦合,看IOC模式,可以通过好莱坞大原则来恢复:Do not call us we will call you。关于So not following the 3 above concepts can lead to spaghetti code,答案是肯定的。

标签: java oop encapsulation


【解决方案1】:

封装和松散耦合在很大程度上是抽象的概念,也就是说它们可能不是您所说的确切含义。因此,对于微妙的案例,它通常可以归结为意见。但是,这是它的主要内容......

封装。

封装只是意味着保护(封装)不应从类外部访问(或不需要访问)的类成员。它允许您准确定义该变量/方法应如何交互。例如;

class A{
    private int a;
    public void setA(int a){
        this.a = a; 
    }
} 
class B{
    public int b;
}

A 类中,a 变量被封装。您只能通过定义的方法从该对象实例外部设置a,该方法允许我们准确定义如何设置它。这也意味着您无法检索a 的值,因为我们尚未定义允许它的方法。

相比之下,B 类中的b 是公开的,任何来自类外的人都可以使用它为所欲为。其中,封装得不是很好。将封装视为具有被保护性胶囊包围的成员,以确保仅以良好的预定义方式与成员进行交互。

链接:

松散耦合

耦合是指两个类相互绑定或了解彼此工作的程度。如果两个具体类在没有另一个类存在的情况下无法工作,则它们被认为是紧密耦合的。松耦合可能比封装更像是一个抽象概念,但它们确实相互关联。例如,如果一个类的变量没有被封装,那么任何使用它的类如果使用这些变量就可以说是与它紧密耦合的。

class A{
    public int a;
} 
class B{
    public static void main(String[] arg){
        A ay = new A();
        ay.a = 7;
    }
}

在上面的示例中,AB 类是紧耦合的,因为 BA 的变量状态有深入的了解,并且如果类 A 不存在则无法运行。

wiki 上关于松散耦合的说法如下;

当依赖类包含指针时会发生强耦合 直接指向提供所需行为的具体类。这 依赖不能被替换,或者它的“签名”改变了,没有 需要更改依赖类。松耦合发生在 依赖类只包含一个指向接口的指针,它可以 然后由一个或多个具体类实现。

链接:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2011-05-14
    • 2014-03-24
    • 2013-02-18
    • 2023-01-31
    相关资源
    最近更新 更多