我已经在StackOverflow上发布了这个问题,但是我认为在不同的社区问这个问题可能会给我不同的见解。下面是这个问题的转贴:
你好,我有一个金融相关的服务,使我们的用户可以补充他们的余额在我们的系统,然后支付的钱。他们每次付款都要收费。问题是,我需要做一系列需要在几个地方完成的步骤。
相关构成部分:
业务流程流程:
这些步骤可能在几个地方完成,所以我试图找到一种方法来防止其他程序员试图实现这个流程,忘记了一个步骤或者做错了一个步骤。
我现在做的是:
user_deposit转移到unearned_revenue帐户,因此user_deposit将成为借方帐户,而unearned_revenue将成为新插入的日记账分录中的信用帐户。每个静态函数只在区分哪个帐户将是信贷帐户和哪个帐户将是借方帐户方面有所不同。除此之外,这个帮助者还会减少或增加贷方和借方账户的余额。因此,在本例中,它将减少user_deposit余额,并增加unearned_revenue余额。与此示例相关的示例函数名:withdrawPayment和withdrawTransactionconfirmAndWithdrawCashPaymentconfirmAndwithdraw的事务上创建一个实例方法,它将在支付助手上调用confirmAndWithdrawCashPayment,在日记条目助手上调用withdrawTransaction,后者将在日记条目助手上调用withdrawPayment。confirmAndwithdraw函数即可。当然,这是可行的,但我也知道这是一个非常糟糕的设计。是否有任何设计模式或适合这种情况的解决方案的建议?
主要是我在寻找一种方法来包装一系列步骤,这样我就可以删除那些助手类,同时也为其他程序员实现这个业务流程提供了一种方便的方法。
很抱歉有这么长的问题。如果问题不清楚,请告诉我,我可以提供更多的信息。
发布于 2018-12-20 11:09:16
我认为你把不同阶层的角色混合在一起,这样就不知道谁要对什么负责。因此,没有人是任何其他运动的“主人”,每一个运动都需要处理这三个方面的问题。
我们的目标应该是理解每个人之间的关系,并指定一个人作为“主人”和控制器,你依靠他们来处理与另外两个人有关的细节。例如,Payment在这里可能是一个很好的候选人。Payment为从一个帐户到另一个帐户的每一个移动创建并保存一个Transaction,并跟踪Transaction的S状态和它自己的状态。当每个Transaction得出结论时,您将更新Journal条目,以便保存日志。
打电话的人不知道,也不关心从一个帐户到另一个帐户的文章。它只知道源帐户是X,目标帐户是Y。移动的细节由Payment内部处理。
如果Payment不太符合要求,那么您可以始终创建一个专门的类来组织这些方面。将接口调用最小化为只传递基本元素,并让这个新类处理操作的复杂性。
发布于 2018-12-20 12:29:13
只需创建一个定义此过程的接口,并将其实现为无状态类(即。(服务)。接口可以在任何您需要它的地方被要求,而具有后续步骤的实现可以是注入的实现。
你不应该在任何地方重复自己,特别是在执行重要步骤时。只做一个地方,做对的事。在系统中需要该流程的任何地方,都可以将逻辑外包到一个地方,在那里已经定义并测试了逻辑。
https://softwareengineering.stackexchange.com/questions/384331
复制相似问题