我想在我的项目域层(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 …Run Code Online (Sandbox Code Playgroud) single-responsibility-principle use-case aggregation clean-architecture interactors
假设我有一个界面
interface Foo<T> {
void foo(T x);
T bar()
}
Run Code Online (Sandbox Code Playgroud)
以及具有未知参数的此类对象:Foo<?> baz.然后我可以打电话baz.foo(baz.bar()).
但是,现在我需要将值baz.bar()放入集合中,baz.foo()稍后再调用它.就像是
List<???> list; // can I tell the compiler this is the same type as baz's wildcard?
list.add(baz.bar());
...
baz.foo(list.get(1));
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
List<Object> list;
list.add(baz.bar());
...
baz.foo((???) list.get(1)); // I can't write down the type I need to cast to
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
编辑:以上是从我的实际情况过分简化.说我们有
class Bar {
private final Foo<?> foo;
private List<???> list; // the type argument can be selected freely
Bar(Baz …Run Code Online (Sandbox Code Playgroud) aggregation ×1
generics ×1
interactors ×1
java ×1
single-responsibility-principle ×1
use-case ×1