- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想知道人们如何处理以下情况(这是为了让这个想法得到理解而假设的)...
表 A(订单):OrderId、StatusId
等(状态表上的外键)表 B(状态):StatusId、名称,
等表 B 需要存在(IOW,例如,我不能只创建一个状态枚举),因为订单状态列表需要随着业务需求和实践的变化而动态变化,并且您的程序中有方法,例如 GetAllOrders()
、GetAllStatuses()
、GetOrderByStatus(int statusId)
等。但是,您似乎一直需要访问“硬编码”地位。例如,首次创建订单时,它的状态为“新建”,您需要在没有任何用户干预的情况下将其设置为该状态。也许您有一个 GetUnfilledOrders 报告返回所有正在“处理”的订单,同样没有让用户选择他们正在寻找的状态,因为报告的名称暗示了他们想要什么。我希望你明白这一点。
在这些情况下,我一直在做的是创建一个设置,例如 DefaultNewOrderStatus (int)
并将其设置为我想用于新订单的状态 ID,或者 StatusesForUnfilledOrdersReport (int[])
并再次设置要使用的状态列表。我的想法是,如果我们的状态“架构”发生变化,我可以即时更改这些设置。问题是需要使用的“硬编码”值的数量似乎在增长(也许现在我需要一个默认状态来设置已完成的订单,或者一个状态列表来显示“打开”订单 UI View ,等)以及处理它们的设置数量。
我非常想知道其他人是如何处理这些情况的?
最佳答案
我不确定我是否捕获了您问题的要点,但看起来您正在尝试以“硬编码”方式实现业务流程管理器。你真正需要的不是一个动态的状态列表,而是动态的进程列表,它们实际上是如何使用状态的场景。此外,您需要采取行动,这将触发状态变化。所以,让我们举个例子,你有一个状态列表:
接下来是操作列表:
现在,您可以设计一个流程:
您的应用程序需要有一组可以对上述内容进行操作的方法(通常是表单、一些向导等)。当事情发生变化时,您添加新状态,复制和修改流程,您的应用程序已经知道如何处理它,例如您需要处理订单取消。您将取消添加到您的操作中,将取消添加到您的订单中并创建新流程(或修改旧流程)添加:
所以,综上所述,你的问题不仅仅是状态变化,而是业务流程的变化。在那种情况下,您需要有动态流程,而不仅仅是状态。然后,问题消失了 - 但您需要重建您的应用程序 - 或者更确切地说是构建一个新的应用程序。
编辑
关于报告,这是一个相当不同的情况。如果您找到一种方法来准备能够生成任何报告的通用架构,那么您将接触到商业智能的实际形式、数据仓库概念等。:-)
关于.net - 从关系数据库中检索 "Hard"值的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12465330/
我是 git 的新手,所以问题可能很简单,git reset --hard HEAD 和 git reset --hard 有什么区别? 最佳答案 HEAD 在您未指定该参数时是隐含的。 但是,您可以
为了恢复工作树和索引中的更改,此答案 ( https://stackoverflow.com/a/5812972/8278160) 建议运行以下命令: git reset --hard 运行它是否与运
这个问题在这里已经有了答案: What's the difference between HEAD^ and HEAD~ in Git? (17 个答案) 关闭 6 年前。 git reset --
我在 Stackoverflow/elsewhere 上尝试了很多链接来正确理解 的行为 git reset --hard option 我知道: 如果它被省略或者它是 origin,则在 origi
只是一个简短的问题。我想知道是否有一个选项或开关可以启用重新加载按钮下的“硬重新加载”和“清空缓存和硬重新加载”选项而无需打开devtools,以便它们始终弹出,即使devtools没有开放。 我知道
我最近在 Chrome 中发现了这个新功能: 我可以找出选项 1 和选项 3 之间的区别,选项 2 可能介于两者之间,但我在任何地方都找不到更精确的信息。 有人知道这 3 个选项的确切行为吗? 最佳答
我正在寻找一种很好的简单方法来查找哪些扇区占用给定文件。我的语言偏好是 C#。 从我的 A-Level Computing 类(class)中,我了解到硬盘驱动器在磁盘的前几 KB 上有一个查找表。在
我相信这是一个被分配的值并且这是无法改变的。一个例子是: int limit =5; for(int i =0 ; i
有些程序可以从硬盘恢复已删除的文件,也有一些程序会覆盖可用空间以防止已删除的文件被恢复。 覆盖可用空间的行为似乎是可以理解的。该程序创建文件并向其中写入任意字节。 但是,当谈到读取已删除的文件时,我感
Python 中有几种用于分割的包和方法。但是,如果我先验地知道某些像素(而不是其他像素)对应于特定对象,我如何使用它来分割其他对象? 哪些在 python 中实现的方法适用于这种方法? 谢谢。 最佳
我试图找到一个文件,然后在不同的目录中创建一个具有相同名称的硬链接(hard link)。但这不起作用,如果我使用 -exec 并在关闭后显示一个结果。我已经让它与 cp 一起工作,但我决定改用硬链接
我想知道是否可以在 Linux 上识别文件(或链接)是否是硬链接(hard link)。例如,如果我创建了: dd if=/dev/urandom bs=1024 count=10000 of=fil
在上次提交后,我的团队认为远程变得太繁重了,最好做一个新的来在 Assets 测试(重 repo )和功能测试(轻 repo )之间拆分任务。所以我做了一个 push --mirror 并创建了一个新
我不确定我是否遇到了默认超时(我可以在某处设置它吗?),但也许我错过了一些东西。当客户端的浏览器建立 websocket 连接时,我保持持久性。然后,在断开连接时,我删除该持久对象。足够简单。当客户端
我正在编写一个备份脚本,它使用硬链接(hard link)来不占用未修改文件的空间。 我想检查给定的文件系统(根据特定目录确定)是否在脚本的开始 支持硬链接(hard link) - 否则,它可能会中
我需要在运行时为路径长度超过 255 个字符的文件创建硬链接(hard link)(这是针对令人恼火的 Excel/Word 2011 限制的解决方法)。但由于稍后可能会再次打开同一个文件,如果我已经
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的作业要求我访问 test.txt 文档,因此文件名必须硬编码到我的 C 驱动器。我不知道硬编码是什么意思。有人可以帮我解决这个问题吗? 最佳答案 “硬编码”意味着将某些内容放入源代码中。如果您不进
我刚开始玩 Git,想知道一个具体案例: 我错误地做了一个沉重的提交,更糟糕的是我将它推送到远程服务器。 现在我正在尝试使用 git reset --hard v1.0 和 git push -f o
对于 Unix cp,您可以使用 --link 选项。当与文件夹一起使用时,它将 hard link涉及的文件而不是复制,示例 cp --recursive --link foo bar 这在某些情况
我是一名优秀的程序员,十分优秀!