Считается ли это слабой связью и высокой когезией? Есть ли шанс улучшить? - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь овладеть принципами SOLID Роберта Мартина. В настоящее время я смотрю на слабую связь и высокую когезию. Я создал некоторый код, который представляет мое текущее понимание этого предмета. Не могли бы вы, ребята, сказать мне, если на правильном пути? Есть ли шанс улучшить текущий дизайн?

Основное приложение, которое создает два адреса и назначает их сотруднику:

public class App {

    public static void main(String[] args) {
        Address homeAddress = new HomeAddress("This is my Home Address");
        Address workAddress = new WorkAddress("This is my Work Address");        
        Employee employee = new Employee(homeAddress, workAddress);

        employee.getAddresses();
    }

}

Класс работника:

public class Employee {

    private Address homeAddress;
    private Address workAddress;

    Employee(Address homeAddress, Address workAddress) {
        this.homeAddress = homeAddress;
        this.workAddress = workAddress;
    }

    public void getAddresses() {
        System.out.println("homeAddress: " + homeAddress.getAddress());
        System.out.println("workAddress: " + workAddress.getAddress());
    }

}

Адресный интерфейс:

public interface Address {

    String getAddress();

}

Конкретная реализация адреса 1 (домашний адрес):

public class HomeAddress implements Address {

    String specificAddress;

    public HomeAddress(String specificAddress) {
        this.specificAddress = specificAddress;
        System.out.println("In HomeAddress Constructor");
    }

    public String getAddress() {
        return specificAddress;
    }
}

Реализация специального адреса 2 (WorkAddress):

public class WorkAddress implements Address {

    String specificAddress;

    public WorkAddress(String specificAddress) {
        this.specificAddress = specificAddress;
        System.out.println("In WorkAddress Constructor");
    }

    public String getAddress() {
        return this.specificAddress;
    }
}

Любая помощь / обратная связь будет принята с благодарностью! Заранее спасибо.

Марк.

1 Ответ

0 голосов
/ 05 ноября 2018

Это небольшой пример, но его можно улучшить с точки зрения сцепления / сцепления.

Объекты сплоченные. Зачем? В объекте Employee и конструктор, и getAddresses() (который, кстати, должен называться printAddresses()) ссылаются на обе переменные экземпляра (что означает, что они связаны с одним и тем же). То же самое для Address объектов.

Что касается соединительной части, я думаю, вы могли бы сделать лучше. В нынешнем виде объекты Employee «знают» (т. Е. Связаны) с внутренним представлением объекта Address. Это связано с тем, что вы «экспортируете» данные (строку) из объекта Address вместо того, чтобы распечатывать их там, где находятся данные.

Это делает ваши объекты более связанными и приведет к тому, что любые изменения (например, введение улицы и города и тому подобное) в объектах Address будут просачиваться до Employee. Так что у него есть реальные недостатки.

Решение состоит в том, чтобы определить print() метод в Address и выполнить там System.out.println(). Это согласуется с другими понятиями, такими как Закон Деметры , Скажи, не спрашивай .

...