我正在从头开始我的代理网站,一个在线食品订购和送货服务。
我正在努力完善推广系统:每家餐厅都有自己的促销活动,其中一些餐厅比其他餐厅有一定的优先地位。
例如,如果客户订购了三个比萨饼,而每个订购的比萨都有一个免费的罐头,网站将建议一个大瓶子而不是三个小罐头。可能有更多的晋升类型:
有些餐馆只提供上述四种促销中的一种,或者是其中的一种:其中一些可能相互混淆。
旧的网站是一团糟的,金字塔的厄运嵌套if和他们希望我使它更好,更容易处理(插入和删除促销必须很容易)。
我试着回想一下是哪所大学留给我的,我想到了确定性有限自动机:语法将是优先考虑促销的规则,字母符号将是菜肴和免费产品,语言将是可能的促销集。但是:
在这些情况下,将使用什么更合适的算法/数据结构?
发布于 2017-08-24 11:25:04
您可能需要的是一个业务规则引擎。这听起来可能更复杂,因为你可能不需要一些过度设计的通用规则引擎与一个100K美元的规则管理系统。一个简单的系统,其规则以表格形式存储,包括
对于这些规则,一个特定的解释器至少可以解决80%的问题。例如,前提条件可以定义哪些产品、类别或价格限制调用了promo。在als的前提条件下,可能已经从先前的规则块中授予了授予另一项的promo项。
这样做的想法应该是为每一家餐馆设置一张这样的桌子,并将规则一个接一个地应用于任何订单,并以一组宣传品作为输出。表中规则的顺序可能足以控制它们的优先级。
您可能需要添加一些后处理规则,以便将promo项分组在一起(如您最初的三个-can示例),而不是多次授予相同的项,或者用于解决其他冲突。后处理规则也可以添加到上面的表中,但是如果它们太复杂,无法以通用的方式解决,只需制定一个后处理规则SpecialProcessingRestaurant_Foo,并在那里实现餐厅"Foo“的特定代码。
这应该会减少你对每一家餐厅所需要的代码的数量,不是零,而是最小。由于您没有让非程序员管理规则的要求,我想这对您的情况可能是足够的。
发布于 2017-08-24 17:31:17
如果您愿意实现gui/database来管理促销活动,这是可行的。
我已经实现了一个java类Promotion,它包含
PromotionExpressions-s的列表,每个列表返回true或false。THe提升引擎试图找到所有表达式都匹配的升级,并将此优势应用于购物车。
升职可能是这样的
因此,顾客可以得到0.99美元的折扣和一瓶免费的葡萄酒,如果订单来自"Kreta-Nyc“或"Samos-La”的“Kreta”或“Samos-La”餐厅,总共至少有20美元,而且订单中至少包含"Giros Pita“或"Souvlaki”。
https://softwareengineering.stackexchange.com/questions/356197
复制相似问题