Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将所需数据(通过API传递)的全局追加放在哪里?_Android_Rx Java2_Clean Architecture - Fatal编程技术网

Android 将所需数据(通过API传递)的全局追加放在哪里?

Android 将所需数据(通过API传递)的全局追加放在哪里?,android,rx-java2,clean-architecture,Android,Rx Java2,Clean Architecture,清洁建筑问题 我有许多表单活动,它们有一个公共数据,必须在提交过程中附加,我的问题是,逻辑必须放在哪里 域还是表示层 介绍: 我将创建一个BaseFormActivity,它有一种将所需数据插入到作为全局包含所需数据的BaseForm子级的表单上的方法 BaseForm:由所有表单扩展 public class BaseForm { private String globalData; //getter setters... } BaseFormPresenter: BaseFor

清洁建筑问题

我有许多表单活动,它们有一个公共数据,必须在提交过程中附加,我的问题是,逻辑必须放在哪里

域还是表示层

介绍:

我将创建一个BaseFormActivity,它有一种将所需数据插入到作为全局包含所需数据的BaseForm子级的表单上的方法

BaseForm:由所有表单扩展

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

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
}
对于域:

SubmitSpecificForInteractor:很抱歉编码,这只是我想做的事情的一个表示

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
    }
}

我正在考虑把它放在域层,你可以看到它是非常孤立的,但我必须在所有表单提交上都这样做,这是冗余的,但我仍然希望我的决定是可靠的。重构非常耗时。希望你们能理解我的观点,特别是我的伪代码编码。如果有什么难以理解的地方,请随时发表评论。谢谢。

在干净的体系结构中,所有的业务规则都交给用例交互者。其主要目标是使业务规则独立于任何细节——任何框架——包括android

然后,Clean体系结构使用UI部分中称为controllers和presenters的接口适配器在最方便内部循环的数据和方便框架的数据之间进行映射

因此,在你的情况下,你应该选择你的第二个建议——即使这意味着你必须从多个地方调用交互者,并且必须映射一些数据类型。这是值得的好处业务规则免费的细节

有关用例交互者、控制器和演示者的更详细讨论,请参阅我在这里的帖子:
这里

感谢您的进一步澄清:
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
    }
}