@isawillbenice

Чистая архитектура. Как можно использовать класс без import?

Читаю книгу "Чистая архитектура" и возникает непонимание некоторых мест. Подскажите пожалуйста что имеется в виду?

В языках со статической системой типов, таких как Java, это означает, что
инструкции use, import и include должны ссылаться только на модули с исходным кодом, содержащим интерфейсы, абстрактные классы и другие
абстрактные объявления. Никаких зависимостей от конкретных реализаций
не должно быть.


Как можно использовать класс без import? или я не так понимаю мысль?
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 1
xez
@xez
TL Junior Roo
Написано, что ссылка должна быть только на "на модули с исходным кодом, содержащим интерфейсы, абстрактные классы и другие абстрактные объявления."
Т.е. импорт интерфейса, а не конкретного класса с его реализацией. Конкретный объект, реализующий интерфейс, туда попадет уже на этапе внедрения зависимостей.

Пример для Spring:
package com.example.springbark;

import com.example.springbark.pet.Dog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBarkApplication implements CommandLineRunner {

    @Autowired
    private Dog dog; // зависимость от интерфейса

    public static void main(String[] args)  {
        SpringApplication.run(SpringBarkApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        dog.bark();
        System.exit(0);
    }
}


package com.example.springbark.pet;

public interface Dog {

    void bark();
}


package com.example.springbark.pet;

import org.springframework.stereotype.Component;

@Component
public class Spike implements Dog {

    @Override
    public void bark() {
        System.out.println("Bark-bark");
    }
}


Тут есть импорт интерфейса Dog и в главном классе неизвестно, какой конкретно объект будет внедрен.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы