我正在开发一个杂志的网络应用程序,允许用户在线登录和续订订阅。这些订阅会根据一组规则进行续订,我想就如何设置这些规则提出一些想法/建议。
此Web应用程序与具有订户数据的外部(第三方)系统连接。当用户登录时,web应用程序从该第三方系统获取一堆信息,包括称为“订阅定义ID”的号码,其(表面上)表示订户具有的订阅类型。此订阅类型可能已过期数年,因此Web应用程序包含一组“订单规范”(存储在数据库中),其中包含当前订阅选项以及当前费率等信息(因此价格可以是在订单上向用户显示)。
我目前的想法是创建一个订阅定义ID表,该表映射到给定订阅定义ID更新的订单规范。例如,订阅定义ID可能表示十年前的1年订阅,当时售价39.99美元;在数据库中,这将映射到当前订单规范,其当前价格为59.99美元。
这在理论上非常有效,但像往常一样,有一个问题。当订阅定义ID在当天重新设置时,它们并不总是唯一的。特别是,一个订阅定义ID具有完全不同的行为,具体取决于上下文。此订阅定义ID用于1年订阅和1年折扣礼品订阅。因此,给定此订阅定义ID,可能会发生许多事情:
我不确定如何在数据库中概括这一点,特别是因为此复杂性仅发生在一个记录中。我基本上需要一种方法来模拟上面的逻辑,它也可以用于不是特殊情况的记录。我总是可以在代码中执行此操作,但我不愿意将所有这些业务逻辑放在代码本身中(特别是在将来出现问题的情况下,使用其他订阅定义ID)。
对这种数据和逻辑规则组合进行建模的最佳方法是什么?
答案 0 :(得分:0)
这不是我通常建议的,但是因为只有一个订阅定义ID 和这就是多年(因此这是一个稳定的业务规则),我建议对此ID的行为进行硬编码。
答案 1 :(得分:0)
这里的技巧是参数化业务逻辑,这意味着创建一个参数表。一般情况是任何类型的订阅都有资格进行其他类型的续订,因此您有一个表格可以将原始订阅映射到合格续订。然后,您可以使用通用代码检查用户的订阅,并显示1选项或续订选项列表。
对于大多数情况,如果我理解您所说的内容,原始订阅只会映射到自身。您只有这种情况,其中一些订阅映射到特殊情况。
但是,如果你这样做,你有一个很好的通用续订系统,现在由管理员控制,因为他们可以修改映射而无需等待你提供新的代码。