0

清洁架构问题

我有许多表单activities,其中包含 1 个必须在提交期间附加的公共数据,我的问题是,逻辑必须放在哪里?

域还是表示层?

演示文稿:

我将创建一个BaseFormActivity具有将所需数据插入到其form子级的方法的方法,该子级BaseForm包含全局所需的数据。

BaseForm:(被所有形式扩展)

public class BaseForm {
   private String globalData;
   //getter setters...
}

BaseFormPresenter:

public class BaseFormPresenter extends BaseFormMvpView {
   private final GetGlobalDataInteractor mGetData; //to be injected, this is a use case

   public void getGlobalData() {
      mGetData.execute()
         .subscribe(data -> {
             getMvpView().showGlobalData(data);
          }); //just for the sake of simplicity
   }
}

BaseFormActivity:(由处理表单的所有活动扩展)

public abstract class BaseFormActivity implements BaseFormMvpView {
   @Inject
   BaseFormPresenter mPresenter;

   //onCreate(), etc
}

SpecificFormActivity:(扩展 BaseFormActivity)

public class SpecificFormActivity extends BaseFormActivity {

    private SpecificForm mForm; //extends BaseForm

    //onCreate(), etc

    @Override
    public void showGlobalData(String data) {
       mForm.setGlobalData(data);
    }

    //then ill just call the presenter to get the global data before submitting
}

对于域:

SubmitSpecificFormInteractor:(对不起编码,这只是我想做什么的表示)

public class SubmitSpecificFormInteractor extends SingleUseCase<Return, Param> {

    //to be injected
    GlobalRepository mGlobalRepository; 
    SpecificFormRepository mFormRepository;

    //some initialization

    public Single<SomeResponse> buildObservable(@NonNull String specificFormData, String anotherSpecificFormData) {
       return mGlobalRepository.getGlobalData()
          .map(globalData -> SpecificFormDto.create(
                specificFormData, anotherSpecificFormData, globalData)) //create the dto then append global data
          .flatMap(specificFormDto -> mFormRepository.submit(specificFormDto)) //then submit data
    }
}

我正在考虑将它放在域层上(您可以看到它非常孤立,但我必须在所有表单提交上都这样做,这是冗余),但我仍然只想让我的决定更加可靠重构是耗时的。希望您在这里理解我的观点,特别是关于我的类似伪代码的编码。如果有难以理解的内容,请随时发表评论。谢谢你。

4

1 回答 1

1

在 Clean Architecture 中,所有业务规则都交给用例交互器。主要目标是保持业务规则独立于任何细节——任何框架——也包括android。

Clean Architecture 然后使用“接口适配器”(在 UI 部分称为“控制器”和“演示者”)在最方便内部圈子的数据和方便框架的数据之间映射。

所以在你的情况下,你应该去寻求你的第二个提议——即使这意味着你必须从多个地方调用交互器并且必须映射一些数据类型。这是值得的好处(业务规则没有细节)。

有关用例交互器、控制器和演示者的更详细讨论,请参阅我的帖子:https ://plainionist.github.io/Implementing-Clean-Architecture-UseCases/ 和此处https://plainionist.github.io/实施-清洁-架构-控制器-演示者/

于 2018-03-12T21:16:02.353 回答