2010-03-23 57 views
0

我想知道在整个应用程序中许多类中使用的内存中存储对象的最佳方法。存储一个对象以在多个类中使用

让我建立了我的问题给你:

我们有多个数据库,1%的客户。我们也有一个主表,每一行都是关于数据库的详细信息,例如数据库名称,它所在的服务器IP以及一些配置设置。

我有一个应用程序,循环通过这些多个数据库,并在它们上运行一些更新。我上面提到的设置将每次循环迭代更新到内存中。然后应用程序运行一系列包含使用此数据的多个类的进程。只有在循环迭代期间,数据才会在过程中改变。

变量与客户有关,因此我将它们存储在客户类中。我想我可以让所有的成员共享,或者我应该为客户类使用单例吗?我从来没有实际使用过单身人士,只有阅读他们擅长这种情况。对这种情况有更好的解决方案吗?

此外,我可能有计划此应用程序以后多线程。

对不起,如果这是混乱。如果你有问题,请告诉我,我会回答他们。

感谢您的帮助。

回答

1

为此,我建议使用一种名为“依赖注入”的模式,在这种情况下,这意味着您可以通过构造函数或构建后设置的属性传递每个客户需要的共享变量。您最好将变量定义为接口,以便稍后在进行单元测试时可以放入不同的接口实现。

如果您需要线程安全性,可以将它烧入访问器方法/属性中。

0

在使用配置了属性(或公共字段)所需详细信息的客户本地实例时,应该没有任何问题(我认为)。即使您要切换到将其用作多线程配置,每个将更新应用于特定数据库的活动进程都应该在单个线程中完成,然后在该任务完成时返回,因此不需要实例数据共享(或使用单例)。也许只是将参数中特定于进程的数据提供给可以在工作线程上调用的方法?

依赖注入可能也是一种很好的方法。

0

将此数据存储在系统缓存中将成为我认为的最佳选择。

现在你如何做到这一点取决于你将要做什么。该应用是多线程的吗?是否要频繁更新此客户数据或仅在启动时更新?

如果应用程序不是多线程的,单身人士将完全按照您的需要进行操作。但是,如果它是多线程的,有一些事情需要考虑。如果你打算在大多数情况下读取并且更新很少,并且更新很快且很少,那么线程安全的singleton就可以正常工作。然而,如果你要做大量的更新,即使是一个线程安全的单身人士也会很快进入竞赛状态。

相关问题