干净架构中的单一职责原则,将用例聚合在一个UseCaseManager中,它可以提供基于In & Out对象的UseCase

Dip*_*rma 6 single-responsibility-principle use-case aggregation clean-architecture interactors

我想在我的项目域层(Clean MVVM )中实现单一职责原则

我有大约 200 个不同的用例,管理起来非常繁忙。现在我正在考虑创建一个UseCaseManager可以为我提供所需的UseCase基于Input&Output对象的对象。

我尝试了一种方法,但看起来不太好。我提到了一些示例代码,请帮助我如何将所有用例聚合到一个 UseCaseManager。

用例1:

public class ActualUseCase1 extends AsyncUseCase<Object3,Object4> {

    public ActualUseCase1(SchedulerProvider schedulerProvider) {
        super(schedulerProvider);
    }

    @Override
    public Flowable<Object4> buildUseCaseFlowable(Object3 input) {
        return Flowable.just(new Object4());
    }
}
Run Code Online (Sandbox Code Playgroud)

用例2:

public class ActualUseCase2 extends AsyncUseCase<Object1, Object2> {

    public ActualUseCase2(SchedulerProvider schedulerProvider) {
        super(schedulerProvider);
    }

    @Override
    public Flowable<Object2> buildUseCaseFlowable(Object1 input) {
        return Flowable.just(new Object2());
    }
}
Run Code Online (Sandbox Code Playgroud)

用例管理器:

public interface UseCaseManager<In, Out> {
    <T> T getUseCase(In input, Out output);
}
Run Code Online (Sandbox Code Playgroud)

T 可以是具有不同输入和输出对象的不同用例。

UseCaseManagerImpl:

public class UseCaseManagerImpl  implements UseCaseManager {

    @Override
    public Object getUseCase(Object object1, Object object2) {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在这是主要问题,我无法理解。我如何实现 getUseCase 方法。

Ren*_*ink 0

你想做的不是单一的责任,而是相反的。

单一职责意味着

应该有一个改变的理由

请参阅单一责任原则

UseCaseManager尝试实现的将处理所有 200 个用例。因此,只要用例发生变化,它就会发生变化。” - 这是混合关注点,而不是将它们分开。

通常用例由控制器调用,并且通常控制器也具有单一职责。因此控制器知道它必须调用哪个用例。因此我认为没有必要UseCaseManager

我猜你的设计中还有另一个问题导致了你遇到的问题。但由于我没有完整的源代码,我无法给你任何进一步的建议。