在一个地方整合业务逻辑 - SQL Server

时间:2018-03-27 18:47:38

标签: sql sql-server stored-procedures

我有一种情况,随着时间的推移,相同的逻辑分散在应用程序的不同位置(存储过程)。我试图将它带到一个地方并根据需要重新使用它。

情境:

我们在线销售产品,这些产品属于类别,业务规则因类别而异。执行搜索时,可能会从同一类别返回多个产品。

业务规则的示例如下:

  1. 代理商可以销售此类别的产品(许可,许可等)吗?
  2. 该类别可以在特定州销售吗?
  3. 是否需要对该类别征税?
  4. 此类别的标记是什么?
  5. 这个'产品'满足客户的要求?
  6. 当前实施:

      

    第1步 - 搜索

    我们有一个存储过程,它将@agent_id,@ state_id,@ markup_amount,@ category_id,@ customer_id作为输入,并返回符合客户要求的特定类别的所有产品。客户的要求是使用customer_id导出的。 (SELECT'产品'存储过程)

      

    第2步 - 报价

    将特定产品添加到购物车时,再次使用附加参数@product_id执行上述逻辑,以确保添加到购物车的产品满足原始要求(INSERT' cart& #39;存储过程)

      

    第3步 - 重新验证

    如果客户的要求发生变化,购物车中已有的产品可能仍符合要求。必须从UI中删除不符合条件的那些(is_active_flag在SQL上设置为0)。因此,我们重复使用相同的逻辑来确定产品仍然满足客户的要求。 (更新'购物车'存储过程)

      

    第4步 - 销售

    客户只能从特定类别购买一种产品。当客户准备购买时,我们重新运行相同的逻辑,以查看该特定产品是否仍然通过所有业务规则,包括满足客户的要求(INSERT'销售'存储过程)

    合并:

    我要做的是在一个地方合并这个逻辑,并根据需要在不同的存储过程中引用它。唯一的变量是@product_id。执行初始搜索时,我们不知道哪些产品符合条件。一旦我们得到了有限的产品ID列表,我们就会在每个步骤中深入查看该列表。

    例如:搜索存储过程可能会返回500个产品,这些产品构成有限列表,客户最终可能会将3个产品添加到购物车中,最终只能购买1个。添加的3个产品和最终出售的1种产品是500种合格产品的有限列表中的一部分。

    实现这一目标的最有效方法是什么?谢谢。

1 个答案:

答案 0 :(得分:0)

如果你的目标是创建可读的东西,你可以创建一个布尔sql函数来评估每个场景中的每个产品。