我有一个具有数据库连接的应用程序,虽然显然有对应于我数据库中数据的对象,但我发现我的所有数据处理方法都可以是静态的,因为我不需要对象的实例作为我的类只是对数据进行操作并吐出一些东西,不需要存储方法范围之外的任何东西。如果我可以制作一个方法或类静态吗?
我还使用实用程序单例类来实现常见(单实例)“全局数据”。我想要一个好的设计,但这些不赞成吗?
让我举个例子说明我在做什么。我使用静态方法从我的数据库加载一些数据,将它放入我的Singleton类中的全局变量(自定义对象列表)
所以我的单例类有类似
的东西List<MyCustomObject> SomeList
我的静态类有
static void LoadData()
foreach(data in database something or other)
singletonClass.SomeList.Add()
因此上面的代码可能会将数据库中的某些记录加载到SomeList中,其中SomeList中的每个项都是MyCustomObject类型,其中包含单个信息记录。
这是好的实施吗?这是你编码的方式吗?
然后在我的表示层中,我将调用另一个静态类方法,以便将单例类中的数据转换为所需的格式。
感觉不太好OOPey。但是我真的不能想到如何以另一种方式去做它。
答案 0 :(得分:2)
请允许我指导您撰写关于此主题的优秀文章:Singletons are Pathological Liars。
问题是需要调用LoadData()
函数并不是不言而喻的。将您的情况与文章中描述的情况进行比较,我认为您会看到一些相似之处。
答案 1 :(得分:0)
在你的例子中,为什么要有单独的类,一个是单例,一个是静态的?单例在很多方面等同于只有静态数据和方法的类。如果你已经有一个单例,我会说你应该添加方法来将数据加载到它而不是单独的类。如果您拥有存储数据类型的所有通用的实用程序代码,则使用静态方法的类会更合适。
(另外,我不会过分关注什么是OOPey,什么不是。在OOP原则的盲目服务中过度工程可能是一个严重的问题,作为一个不得不涉及Eclipse代码库的人来说......)
答案 2 :(得分:0)
Singletons是一个,但静态是另一个非常大的。
OOP与否,静态变量有许多缺点,但编码方便性很小。
...