我有一个金融相关的服务,使我们的用户可以补充他们的余额在我们的系统,然后支付的钱。他们每次付款都要收费。问题是,我需要做一系列需要在几个地方完成的步骤。
相关构成部分:
业务流程流程:
这些步骤可能在几个地方完成,所以我试图找到一种方法来防止其他程序员试图实现这个流程,忘记了一个步骤或者做错了一个步骤。
我现在做的是:
user_deposit转移到unearned_revenue帐户,因此user_deposit将成为借方帐户,而unearned_revenue将成为新插入的日记账分录中的信用帐户。每个静态函数只在区分哪个帐户将是信贷帐户和哪个帐户将是借方帐户方面有所不同。除此之外,这个帮助者还会减少或增加贷方和借方账户的余额。因此,在本例中,它将减少user_deposit余额,并增加unearned_revenue余额。与此示例相关的示例函数名:withdrawPayment和withdrawTransactionconfirmAndWithdrawCashPaymentconfirmAndwithdraw,它将在支付助手上调用confirmAndWithdrawCashPayment,在日记条目助手上调用withdrawTransaction,后者将在日记条目助手上调用withdrawPayment。confirmAndwithdraw函数即可。当然,这是可行的,但我也知道这是一个非常糟糕的设计。是否有任何设计模式或适合这种情况的解决方案的建议?
主要是,我正在寻找一种方法来包装一系列步骤,以便我可以删除那些助手类,同时也为其他程序员实现这个业务流程提供了一种方便的方法。
很抱歉有这么长的问题。如果问题不清楚,请告诉我,我可以提供更多的信息。
发布于 2018-12-21 12:16:14
在这种情况下,实例化类型需要一定的步骤顺序,我建议查看Builder模式。通过这种方式,您可以通过存储对象的中间状态来链接所需的步骤,并在任何时候(延迟)执行它们。完成后,您将调用build()作为接收初始化实例。构建器的每个方法都可以返回不同的对象,因此可以强制客户端只使用依赖于先前调用的操作的方法选择。
可能是这样的:
PaymentBuilder paymentBuilder = new PaymentBuilder();
paymentBuilder.OpenTransaction();
// PaymentBuilder e.g. has only the OpenTransaction() method which returns a
// PaymentTransactionOptions instance. This instance contains the
// state of OpenTransaction() and adds further information by
// invoking its SetPayment() method.
paymentBuilder.OpenTransaction(args).SetPaymentMethod(moreArgs);
// SetPaymentMethod(moreArgs) returns a PaymentJournalOptions instance
// that contains the prior collected information and a method SetJournalData().
paymentBuilder.OpenTransaction(args).SetPaymentMethod(moreArgs).SetJournalData(journalArgs); 您继续这样做,直到您的事务数据完成以供执行。然后调用(在最后一个结果对象上) build()来检索构建实例,该实例可能公开一个方法'commit()‘。与其将方法调用链接起来,您还可以存储中间结果并传递它,并在代码中的任何点完成它。
https://stackoverflow.com/questions/53863888
复制相似问题