Инъекция и объединение зависимостей / ассоциация - PullRequest
3 голосов
/ 13 марта 2010

Как в ассоциации, так и в агрегации один класс поддерживает ссылку на другой класс.

Значит, инжекция в конструктор подразумевает композицию? Исходя из той же логики, можно ли с уверенностью сказать, что инъекция сеттера приводит к ассоциации, а не к агрегации?

Ответы [ 2 ]

2 голосов
/ 13 марта 2010

Агрегация - это просто еще одно представление ассоциации. Таким образом, инъекция сеттера приводит к ассоциации и агрегации - как и инъекция конструктора.

Это спорно, чтобы означает ли инъекции конструктора состав, так как, согласно строгой интерпретации композиции, сам класс должен нести ответственность как за строительство и разрушение композитного класса.

0 голосов
/ 17 марта 2010

На уровне кода Java, если у вас есть класс 2 и класс 3, это ожидаемый код.

Традиционная ассоциация от 0..1 до 0..1 дает следующий код:

public class Class2 {

    private Class3 class3;

    public Class3 getClass3() {
        return class3;
    }

    public void setClass3(Class3 class3) {
        this.class3 = class3;
    }
}

Класс 3 совпадает с кодом класса 2.

Обратите внимание, что ассоциации связаны с атрибутами, а не с методами, поэтому, если мы решим не использовать методы доступа, тогда код будет только:

public class **Class2** {

    private Class3 class3;

Агрегация 1 ко многим дает следующий код:

import java.util.Collection;
import java.util.Iterator;

public class Class2 {
    private Collection<Class3> class3 = null;

    public Collection<Class3> getClass3() {
        return class3;
    }

    public Iterator<Class3> class3Iterator() {
        return class3.iterator();
    }

    public boolean isClass3Empty() {
        return class3.isEmpty();
    }

    public boolean containsClass3(Class3 class3) {
        return this.class3.contains(class3);
    }

    public boolean containsAllClass3(Collection<Class3> class3) {
        return this.class3.containsAll(class3);
    }

    public int class3Size() {
        return class3.size();
    }

    public Class3[] class3ToArray() {
        return class3.toArray(new Class3[class3.size()]);
    }

    public void setClass3(Collection<Class3> class3) {
        this.class3 = class3;
    }

    public boolean addClass3(Class3 class3) {
        return this.class3.add(class3);
    }

    public boolean removeClass3(Class3 class3) {
        return this.class3.remove(class3);
    }

    public void clearClass3() {
        this.class3.clear();
    }
}

public class Class3 {

    private Class2 class2 = null;

    public Class2 getClass2() {
        return class2;
    }

    public void setClass2(Class2 class2) {
        this.class2 = class2;
    }
}

Надеюсь, это поможет

...