我想知道将对象存储在内存中的最佳方法,该对象在整个应用程序中的许多类中使用。
让我为你解决问题:
我们有多个数据库,每个客户1个。我们还有一个主表,每行都有关于数据库的详细信息,例如数据库名称,它所在的服务器IP以及一些配置设置。
我有一个应用程序循环遍历这些多个数据库并对它们运行一些更新。我在上面提到的设置每次循环迭代都更新到内存中。然后,应用程序将运行一系列进程,这些进程包含使用此数据的多个类。只有在循环迭代期间,数据才会在进程中发生变化。
变量与客户有关,因此我将它们存储在客户类中。我想我可以让所有成员共享,还是应该为客户类使用单例?我从来没有真正使用过单身人士,只读过他们在这种情况下很好。这种情况有更好的解决方案吗?
此外,我可以计划稍后将此应用程序设置为多线程。
很抱歉,如果这令人困惑。如果您有任何疑问,请告诉我,我会回答。
感谢您的帮助。
答案 0 :(得分:1)
为此,我建议使用一种名为“依赖注入”的模式,在这种情况下,您可以通过构造函数或构造后设置的属性传入每个客户需要的共享变量。最好将变量定义为接口,以便稍后在进行单元测试时可以使用不同的接口实现。
如果您需要线程安全,可以将其烘焙到存取方法/属性中。
答案 1 :(得分:0)
在使用您的客户的本地实例配置了作为属性(或公共字段)所需的详细信息时,应该没有任何错误(我认为)。即使你转而使用它作为多线程配置,每个应用更新到特定数据库的活动进程应该在一个线程中完成,然后在该任务完成后返回,因此不需要实例数据共享(或使用单例)。也许只是将参数中特定于流程的数据提供给可以在工作线程上调用的方法?
依赖注入也可能是一种很好的方式来看待它。
答案 2 :(得分:0)
将这些数据存储在系统的缓存中将是我认为最好的选择。
现在你如何做到这一点取决于你将要做什么。该应用程序是多线程的吗?是经常还是仅在启动时更新此客户数据?
如果应用程序不是多线程的,那么单例将完全满足您的需求。但是,如果它是多线程的,那么有一些事情需要考虑。如果你计划大多数读取几乎没有更新,并且更新很快且很少,线程安全单例就可以正常工作。但是,如果您要进行大量重大更新,即使是线程安全的单例也可能很快遇到竞争条件。