java - 我应该为我的库存系统使用静态列表吗?

标签 java list arraylist static

我正在开发一个 MilkTea 库存和订购系统,其中我已经为我的 MilkTea 对象创建了一个 MilkTea 类。现在,我计划将所有 MilkTea 对象添加到 ArrayList 中。我的系统应该能够添加、编辑、显示和删除奶茶以及订购奶茶。现在,我的问题是确定我应该实现的程序设计。我应该为我的奶茶制作数组列表,静态吗?

  • 我的数组列表可能会随着时间的推移而更改。
  • 我的奶茶数组列表也将在与订购相关的其他类上访问。
  • 我的数组列表不是一成不变的。

到目前为止,这是我用于添加、编辑、删除和显示奶茶的类:

package inventory;

import java.util.ArrayList;

public class MilkTeaList {

    public ArrayList<MilkTea> list = new ArrayList();

    public void addMilkTea(String flavorName,String[] sizes, double[] prices, int stock) {
        list.add(new MilkTea(flavorName, sizes, prices, stock));
    }

    public ArrayList<MilkTea> getList() {
        return list;
    }
}


最佳答案

如果您使用数据库,我建议您在 DAO 类中实现普通的 CRUD 方法(调用当前类 MilkTeaListDao)并依赖数据库的事务完整性。

如果没有,请调用您的类 MilkTeaListHandlerMilkTeaListController,添加一个 getInstance() 方法(并确保您只有一个对象类的私有(private)构造函数),并使用操作列表的方法。该列表不应是静态的,并且方法应具有全局同步锁以确保事务完整性。 getList() 方法应该返回列表的副本,而不是列表本身。

我注意到您对此问题得到了一些相互矛盾的答案,因此让我为我的建议提供一些论据和解释:

  • 使用可在任何地方操作的静态列表在项目开始时很方便,但它最终可能会成为您在项目生命周期的剩余时间内必须处理的头痛问题。例如,假设代码的一部分正在将列表存储到磁盘(使用 for 循环),而代码的另一部分(同时)正在添加、更新和删除列表中的项目。然后你不知道磁盘上存储了什么(先保存还是更新),并且你将在某个阶段(可能几年后)得到 nullPointerExceptions,因为保存功能假设列表中存在记录其他人刚刚删除了。
  • 当 MilkTea 对象发生变化时,您需要更新整个代码。例如,请记住在所有地方添加 expireDate。如果操作列表的所有方法都聚集在一个地方,则更容易更改它们(并且更容易看到更改的影响,因为您将在代码的其余部分中收到编译错误)。
  • 如果添加/删除/更新分散开来,那么围绕您的 MilkTea 的其余逻辑很可能也会分散开。当逻辑发生变化时,您可能会在整个项目中发现重复的代码,并且在多个位置更新它会很乏味且容易出错。逻辑的一个例子是错误处理。假设当系统通过读取文件中的行来更新库存时,如果价格设置为零,则会抛出异常。好的。但对于用户可以从网络界面手动更新股票信息的功能,您忘记添加该限制。不好。如果操作方法集中在一个地方,您将必须执行一次price==zero 检查,然后您就会知道它会永远存在。

关于java - 我应该为我的库存系统使用静态列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60691618/

相关文章:

java - Alfresco 不允许超过 1000 个 Activity session

android - protobuf 消息使用不可修改的列表,我正在尝试将其用作数据结构

Java - 在对象的ArrayList中搜索字符串

java - ArrayList "cannot be resolved"尝试在方法中访问 ArrayList 时,Java

java - 从 ArrayList 填充 JTable

java - tomcats 的负载平衡已经完成,但应用程序仍然很慢?

java - IllegalArgumentException : com. sun.xml.internal.messaging.saaj.soap.LocalStrings != com.sun.xml.messaging.saaj.soap.LocalStrings

java - 适用于 Java 的开源托管运行时环境 (MRTE) 服务器?

python - 递归识别排序列表

python - 如果只有 int 1 是 [1, 2.3, '' ] 中的列表项,为什么 Python '' return ' in operator 'blabla' True' for float 1.0 ?