带有网络调用的访客模式 - 从访客更新安卓用户界面的最佳方式



我正在使用访问者模式将支付处理从 android 中的 UI 代码中抽象出来。 我对我应该将什么传递给访问者构造函数有一些疑问,以便视图在完成处理付款后获得回电。

让我向您展示到目前为止我所拥有的:

我正在处理 2 个支付系统,因此有两种支付策略(BrainTree 和 Stripe(:

public class BrainTreePaymentStrategy implements IVisitable {
    @Override
    public void makePayment() {
    }
    @Override
    public void accept(Visitor v) {
    }
}

public class StripePaymentStrategy implements IVisitable {
    @Override
    public void makePayment() {
    }
    @Override
    public void accept(IVisitor v) {
    }
}

public interface IVisitable {
 void makePayment();
    void accept(IVisitor v);
}

public interface IVisitor {
    //list out all the classes the visitor can visit now
    void visit(StripePaymentStrategy stripePaymentStrategy);
    void visit(BrainTreePaymentStrategy brainTreePaymentStrategy);
}

//now critical, lets create a real concrete visitor that can actually do the work:

public class PaymentStrategyVistor implements IVisitor {
    @Override
    public void visit(StripePaymentStrategy stripePaymentStrategy) {
//process the braintree payment here, but how to give call back to UI ?
    }
    @Override
    public void visit(BrainTreePaymentStrategy brainTreePaymentStrategy) {
//process the braintree payment here, but how to give call back to UI ?
    }
}

我正在使用鲍勃叔叔的干净架构,所以我的网络调用是通过用例进行的,并且我还使用MVP作为我的表示层,因此如果需要,我可以访问演示者和用例。

所以我的问题再次是关于支付策略维斯特类,如果我将演示器作为构造函数参数传入,您怎么看。 例如,我可以调用presenter.doBrainTreePayment("someToken");我可以在visitors visit(BrainTreePaymentStrategy brainTreePaymentStrategy)方法中做到这一点。 你们都会这样做吗?

您的建议(将演示器传递给每个访问者的构造函数(似乎完全没问题。

从干净的架构角度来看,只要你不违反依赖规则,这一切都很好。 因此,如果您的策略和访问者生活在"接口适配器层"中,则可以轻松通过演示者。 另一方面,如果您的策略/访问者属于"用例层",那么通过演示器将违反依赖规则,您不应该这样做。

有关干净架构中演示者的更详细讨论,请参阅我的博客文章:https://plainionist.github.io/Implementing-Clean-Architecture-Controller-Presenter/

最新更新