具有网络调用的访客模式 - 从访客更新 android UI 的最佳方式
visitor pattern with network call - best way to update android UI from vistor
我正在使用访问者模式从 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 ?
}
}
我正在使用 uncle bob 的干净架构,所以我的网络调用是通过用例进行的,并且我还在我的表示层使用 mvp,所以如果需要我可以访问演示器和用例。
所以我的问题又是关于 PaymentStrategyVistor class,如果我将演示者作为构造函数参数传入,你会怎么想。例如,我可以调用 presenter.doBrainTreePayment("someToken");
我可以在 visitors visit(BrainTreePaymentStrategy brainTreePaymentStrategy)
方法中调用。你们都会这样做吗?
您的建议(将演示者传递给每个访问者的构造函数)似乎完全没问题。
从干净的架构角度来看,只要您不违反依赖规则,这一切都很好。因此,如果您的策略和访客住在 "interface adapter layer" 中,您可以轻松通过演示者。另一方面,如果你的 strategy/visitor 属于 "use cases layer" 而不是通过演示者将违反依赖规则,你不应该这样做。
有关简洁架构中演示者的更详细讨论,请参阅我的博客 post:https://plainionist.github.io/Implementing-Clean-Architecture-Controller-Presenter/
我正在使用访问者模式从 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 ?
}
}
我正在使用 uncle bob 的干净架构,所以我的网络调用是通过用例进行的,并且我还在我的表示层使用 mvp,所以如果需要我可以访问演示器和用例。
所以我的问题又是关于 PaymentStrategyVistor class,如果我将演示者作为构造函数参数传入,你会怎么想。例如,我可以调用 presenter.doBrainTreePayment("someToken");
我可以在 visitors visit(BrainTreePaymentStrategy brainTreePaymentStrategy)
方法中调用。你们都会这样做吗?
您的建议(将演示者传递给每个访问者的构造函数)似乎完全没问题。
从干净的架构角度来看,只要您不违反依赖规则,这一切都很好。因此,如果您的策略和访客住在 "interface adapter layer" 中,您可以轻松通过演示者。另一方面,如果你的 strategy/visitor 属于 "use cases layer" 而不是通过演示者将违反依赖规则,你不应该这样做。
有关简洁架构中演示者的更详细讨论,请参阅我的博客 post:https://plainionist.github.io/Implementing-Clean-Architecture-Controller-Presenter/