Ruby on rails 涉及经常性付款和未来事件的复杂体系结构问题
我正在寻找关于如何为这个有点棘手的问题设计一个优雅的解决方案的指导。虽然我正在使用Ruby(和Rails),但我认为我的问题主要是架构问题,尽管我选择的语言显然会对涉及库等的建议产生影响,因此该语言仍然具有相关性 总之,简而言之:我的应用程序包含表示成员身份的对象,这些对象属于健身机构的成员。会员资格包含一系列定期付款。一些会员资格在任期结束时自动续约,而另一些则不续约 例如,您可能有一个初始期限为一年的会员资格,然后按月续订。在应用程序中,创建此类成员身份会导致创建12个定期付款。当最后一个月到期时,会员资格也将到期。每日cron任务负责根据已完成的付款导致成员资格过期。如果成员资格设置为自动续订,则相同的cron任务将续订成员资格 您也可能有没有初始期限的会员资格,只是逐月或每周运行。这些工作以类似的方式进行,减去初始付款计划 到目前为止还不错。使事情变得复杂的是附加要求:Ruby on rails 涉及经常性付款和未来事件的复杂体系结构问题,ruby-on-rails,ruby,design-patterns,datetime,architecture,Ruby On Rails,Ruby,Design Patterns,Datetime,Architecture,我正在寻找关于如何为这个有点棘手的问题设计一个优雅的解决方案的指导。虽然我正在使用Ruby(和Rails),但我认为我的问题主要是架构问题,尽管我选择的语言显然会对涉及库等的建议产生影响,因此该语言仍然具有相关性 总之,简而言之:我的应用程序包含表示成员身份的对象,这些对象属于健身机构的成员。会员资格包含一系列定期付款。一些会员资格在任期结束时自动续约,而另一些则不续约 例如,您可能有一个初始期限为一年的会员资格,然后按月续订。在应用程序中,创建此类成员身份会导致创建12个定期付款。当最后一个月
- 管理员可以在特定期限内“冻结”会员资格(将其搁置),然后自动重新激活(例如,代表外出度假一段时间的人)。我可以选择立即冻结会员资格并在以后重新激活,也可以选择通过在将来某个时间点设置冻结日期以及重新激活日期来安排冻结(注意:总是有一个重新激活日期,这使事情变得更容易)
- 管理员可以立即取消会员资格,也可以将取消设置为在将来进行。(尚未建立未来取消。)
- 管理员可以退还会员资格,这类似于取消,但以前的任何付款都会被退还
def process(day)
raise "Already processed or missed a day" unless day == last_processed_day + 1
check_expiration day
check_frozen day
check_anything day
#...
self.last_processed_day = day
self.save!
end