gpt4 book ai didi

.net - 从关系数据库中检索 "Hard"值的最佳实践

转载 作者:搜寻专家 更新时间:2023-10-30 20:42:49 26 4
gpt4 key购买 nike

我想知道人们如何处理以下情况(这是为了让这个想法得到理解而假设的)...

  • 表 A(订单):OrderId、StatusId 等(状态表上的外键)
  • 表 B(状态):StatusId、名称,

表 B 需要存在(IOW,例如,我不能只创建一个状态枚举),因为订单状态列表需要随着业务需求和实践的变化而动态变化,并且您的程序中有方法,例如 GetAllOrders()GetAllStatuses()GetOrderByStatus(int statusId) 等。但是,您似乎一直需要访问“硬编码”地位。例如,首次创建订单时,它的状态为“新建”,您需要在没有任何用户干预的情况下将其设置为该状态。也许您有一个 GetUnfilledOrders 报告返回所有正在“处理”的订单,同样没有让用户选择他们正在寻找的状态,因为报告的名称暗示了他们想要什么。我希望你明白这一点。

在这些情况下,我一直在做的是创建一个设置,例如 DefaultNewOrderStatus (int) 并将其设置为我想用于新订单的状态 ID,或者 StatusesForUnfilledOrdersReport (int[]) 并再次设置要使用的状态列表。我的想法是,如果我们的状态“架构”发生变化,我可以即时更改这些设置。问题是需要使用的“硬编码”值的数量似乎在增长(也许现在我需要一个默认状态来设置已完成的订单,或者一个状态列表来显示“打开”订单 UI View ,等)以及处理它们的设置数量。

我非常想知道其他人是如何处理这些情况的?

最佳答案

我不确定我是否捕获了您问题的要点,但看起来您正在尝试以“硬编码”方式实现业务流程管理器。你真正需要的不是一个动态的状态列表,而是动态的进程列表,它们实际上是如何使用状态的场景。此外,您需要采取行动,这将触发状态变化。所以,让我们举个例子,你有一个状态列表:

  1. 处理
  2. 交付
  3. 完成

接下来是操作列表:

  1. 新建
  2. 开始处理
  3. 开始交付
  4. 完成交付
  5. 返回

现在,您可以设计一个流程:

  • [开始] -> (新建) -> 新建
  • 新建 ->(开始处理)-> 处理
  • 处理中 ->(进入交付)-> 交付
  • 交付 ->(退回) -> 处理
  • 交付 ->(完成交付)-> 完成

您的应用程序需要有一组可以对上述内容进行操作的方法(通常是表单、一些向导等)。当事情发生变化时,您添加新状态,复制和修改流程,您的应用程序已经知道如何处理它,例如您需要处理订单取消。您将取消添加到您的操作中,将取消添加到您的订单中并创建新流程(或修改旧流程)添加:

  • 正在处理 ->(取消)-> 已取消

所以,综上所述,你的问题不仅仅是状态变化,而是业务流程的变化。在那种情况下,您需要有动态流程,而不仅仅是状态。然后,问题消失了 - 但您需要重建您的应用程序 - 或者更确切地说是构建一个新的应用程序。

编辑

关于报告,这是一个相当不同的情况。如果您找到一种方法来准备能够生成任何报告的通用架构,那么您将接触到商业智能的实际形​​式、数据仓库概念等。:-)

关于.net - 从关系数据库中检索 "Hard"值的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12465330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com