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

В соответствии с данной архитектурой, 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 шт):
public class BusinessRules {
private BusinessRulesInterface businessRules;
@Inject // - possibly
public BusinessRules(BusinessRulesInterface businessRules) {
this.businessRules = businessRules;
}