首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是管理晋升的好方法?

什么是管理晋升的好方法?
EN

Software Engineering用户
提问于 2017-08-24 08:58:52
回答 2查看 218关注 0票数 1

我正在从头开始我的代理网站,一个在线食品订购和送货服务。

我正在努力完善推广系统:每家餐厅都有自己的促销活动,其中一些餐厅比其他餐厅有一定的优先地位。

例如,如果客户订购了三个比萨饼,而每个订购的比萨都有一个免费的罐头,网站将建议一个大瓶子而不是三个小罐头。可能有更多的晋升类型:

  1. 如果您的订单高于阈值,您将得到免费的东西(例如,如果订单超过20美元,您将得到一瓶免费啤酒);
  2. 某一种产品有一些是免费的,即使你只订购其中的一种(例如,每根香肠和意大利辣香肠比萨饼都有一瓶免费啤酒);
  3. 如果你订购了某一特定类别的非专利产品,你就会得到一些免费的东西(例如,无论你订购哪种比萨饼,你都可以免费获得啤酒);
  4. 如果你订购了多个产品,你就会得到免费的东西(例如,如果你订购了一个以上的比萨饼或多个烤肉串,你就会得到免费的东西)。

有些餐馆只提供上述四种促销中的一种,或者是其中的一种:其中一些可能相互混淆。

旧的网站是一团糟的,金字塔的厄运嵌套if和他们希望我使它更好,更容易处理(插入和删除促销必须很容易)。

我试着回想一下是哪所大学留给我的,我想到了确定性有限自动机:语法将是优先考虑促销的规则,字母符号将是菜肴和免费产品,语言将是可能的促销集。但是:

  • 每家餐厅都会有自己的促销活动,即语法、DFA (为这样一小部分免费产品开发DFA可能是过分的做法);
  • 语法设计可能很难(如果一家餐厅提供更多类型的促销,一些促销可能会与另一些促销混为一谈;此外,一些促销的优先级可能难以用语法规则设计,更容易用某种“权重”概念来描述)。

在这些情况下,将使用什么更合适的算法/数据结构?

EN

回答 2

Software Engineering用户

发布于 2017-08-24 11:25:04

您可能需要的是一个业务规则引擎。这听起来可能更复杂,因为你可能不需要一些过度设计的通用规则引擎与一个100K美元的规则管理系统。一个简单的系统,其规则以表格形式存储,包括

  • 规则类型
  • 用于描述特定宣传的前提条件的参数
  • 本规则授予的宣传项目(S)本身。

对于这些规则,一个特定的解释器至少可以解决80%的问题。例如,前提条件可以定义哪些产品、类别或价格限制调用了promo。在als的前提条件下,可能已经从先前的规则块中授予了授予另一项的promo项。

这样做的想法应该是为每一家餐馆设置一张这样的桌子,并将规则一个接一个地应用于任何订单,并以一组宣传品作为输出。表中规则的顺序可能足以控制它们的优先级。

您可能需要添加一些后处理规则,以便将promo项分组在一起(如您最初的三个-can示例),而不是多次授予相同的项,或者用于解决其他冲突。后处理规则也可以添加到上面的表中,但是如果它们太复杂,无法以通用的方式解决,只需制定一个后处理规则SpecialProcessingRestaurant_Foo,并在那里实现餐厅"Foo“的特定代码。

这应该会减少你对每一家餐厅所需要的代码的数量,不是零,而是最小。由于您没有让非程序员管理规则的要求,我想这对您的情况可能是足够的。

票数 5
EN

Software Engineering用户

发布于 2017-08-24 17:31:17

如果您愿意实现gui/database来管理促销活动,这是可行的。

我已经实现了一个java类Promotion,它包含

  • 特殊无形手推车-物品"PromotionAdvantage“
  • 一个或多个PromotionExpressions-s的列表,每个列表返回true或false。

THe提升引擎试图找到所有表达式都匹配的升级,并将此优势应用于购物车。

升职可能是这样的

  • 推广名称:“免费葡萄酒瓶”
    • PromotionExpression: RestaurantPromotionEpression(“Kreta”,“Samos”)
    • PromotionExpression: MinValuePromotionEpression("20美元“)
    • PromotionExpression: CartContainsProduct("Giros“,"Souvlaki")
    • PromotionAdvantage: FreeGiftPromotionAdvantave(“免费葡萄酒瓶”)
    • PromotionAdvantage: RefundPromotionAdvantave("0.99美元“)
    • 允许更多晋升:假

因此,顾客可以得到0.99美元的折扣和一瓶免费的葡萄酒,如果订单来自"Kreta-Nyc“或"Samos-La”的“Kreta”或“Samos-La”餐厅,总共至少有20美元,而且订单中至少包含"Giros Pita“或"Souvlaki”。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/356197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档