java - 设计库存管理中的转移模式
问题描述
我正在为库存管理软件设计类图。基本上它有 3 个概念:Item、Box和类关联Distribution,如下所示。
一个项目可以放置在多个不同数量的盒子中。一个盒子可以有很多物品,当然,数量不同。只有当一个盒子确实有一个数量记录为 Distribution 类中的 DistributedQuantity 的项目时,它们之间的关系才会形成。
现在我正在努力设计一个类来记录从一个盒子到另一个盒子的转移项目。我们称之为转账概念,包括执行日期和转账数量。
将特定物品从第一个盒子转移到第二个盒子时可能会发生某些情况:
在第一个框中:如果转入的数量与框中的数量相等,则删除它们之间的链接。否则,仅修改 Distribution 类中的已分配数量。
在第二个盒子里:如果这个项目和盒子之间已经有链接(这意味着这个盒子已经有这个项目),分配的数量将被修改。否则,一个新的链接形式。
最初,我尝试将 Transfer 与 Distribution 联系起来,因为这个概念同时包含 Item 和 Box 的数据。但它只适用于第一个和第二个盒子都转移了物品的情况。
我不知道这是否有标准(交易)模式。
解决方案
的实例Transfer
用于记录 的实例所发生的历史Distribution
。有两种方法可以对此进行建模。
1.复制Transfer中的所有信息
不要将 Transfer 与任何可以删除的内容相关联,因为如果它被删除,您就会丢失信息。我想 Item、Box 和 Distribution 的实例都可以删除。复制 Transfer 属性中的所有信息。这意味着 Transfer 具有存储在其属性中的有关项目、第一个盒子、第二个盒子和 transferQuantity 的所有信息。类转移没有任何关联。
2.不要删除对象,而是将其标记为死亡
在这种方法中,您不会删除任何对象,只是在它们不应该再存在时将它们标记为已死。您可以通过添加一个布尔属性“dead”(或“deleted”)来做到这一点。现在,您可以将 Transfer 与 Item 和 2 Boxes 相关联。让 Transfer 具有属性“transferredQuantity”。这种方法的缺点是,当您需要使用额外的类和关联来扩展模型时,您经常需要意识到模型中有死对象,这可能会影响多重性。
推荐阅读
- ios - UIStackView 与 superview 的宽度成比例
- python - 如何将由空格分隔的整数(像素)组成的字符串列转换为大约 28000 行的数据帧
- c# - 将多行从form1中的gridview传递到form2并等待按钮单击
- c# - 使用 kernel.dll 获取进程 mdoules c#
- codenameone - CN1 项目未在 Windows10 上显示构建提示和移动属性
- reporting-services - 报表生成器 - 将查询的 where 子句中的一个数据集用于另一个数据集
- angular - 带角度的链式数组
- angular - Angular Universal html 语言标签
- python - Keras模型重复输出0,没有错误
- android - 在基本模块中使用导航组件的 Gradle 同步错误