Вариант реализации чистой архитектуры Роберта Мартина

Требуется максимально простым способом реализовать такую архитектуру по мотивам книги Роберта Мартина: введите сюда описание изображения

В соответствии с данной архитектурой, Business Rules и Business Rules Interface ничего не должны знать про Interface Realization.
На данный момент показанные на рисунке модули выглядят так:
User Interface содержит вызов функции, находящейся в Bussiness Rules:

public void onClick(View v) {
    BusinessRules businessRules = new BusinessRules();
    switch (v.getId()) {
        case R.id.btnSelect:
            businessRules.business_rules(1, null,null);
            break;
        case R.id.btnInput:
            businessRules.business_rules(2,etName.getText().toString(), etUID.getText().toString());
            break;
    }
}

Bussiness Rules содержит бизнес-логику (в зависимости от значения action, выполняем либо select(), либо input()):

public class BusinessRules {

    public void business_rules(int action, String UserName, String UID) {

        switch (action) {
            case (1):
                select();
                break;
            case (2):
                input(UserName, UID);
                break;
        }
    }
}

Business Rules Interface содержит интерфейс, определяющий select() и input():

public interface BusinessRulesInterface {

    void select();

    void input(String UserName, String UID);
}

Interface Realization содержит класс, имплементирующий функции интерфейса из Business Rules Interface:

public class InterfaceRealization extends AppCompatActivity implements BusinessRulesInterface {

    @Override
    public void select() {
        Toast.makeText(this, "Нажата кнопка Select", Toast.LENGTH_LONG);
    }

    @Override
    public void input(String UserName, String UID) {
        Toast.makeText(this, "Input: " + UserName +" " + UID, Toast.LENGTH_LONG);
    }
}

Вопрос: как правильно реализовать стрелочку из Business Rules к Business Rules Interface?
P.S. Эта же тема затрагивалась мной в вопросе, но, возможно, там я неясно описал задачу, поэтому решил создать отдельный вопрос для более полного обсуждения.


Ответы (1 шт):

Автор решения: Igor
public class BusinessRules {

  private BusinessRulesInterface businessRules;

  @Inject // - possibly
  public BusinessRules(BusinessRulesInterface businessRules) {
    this.businessRules = businessRules;
  }
→ Ссылка