大家好,
这是一个原则问题,而非事实问题。
我有一个在客户端和服务器上都使用的数据结构。
但是,在服务器端,我想要从某种数据存储创建客户端的功能(目前 SQL,它曾经是序列化数据,但这并不重要)。
最初我有一个名为“Datastore”的巨型类,它具有用于检索任何存储对象的静态方法。
虽然并不可怕,但这并不完全是面向对象的,而且也不完全是可扩展的。
所以我考虑将这些静态方法移至数据结构本身。然而,这意味着共享客户端库知道如何从我的数据存储中检索对象 - 这有点愚蠢。
因此,我现在正在为新数据存储包中的每个对象创建新类,每个类都包含用于从数据存储中检索一个对象的静态方法。
我的问题是,如何表示这些数据管理器类和它们检索的对象之间的关系?
从功能上来说,这并不重要。静态方法工作得很好。但我想向 future 的我和其他 future 的开发人员表明,数据检索器类和对象类是紧密联系在一起的。
我的第一个想法是让数据检索器扩展数据结构。然而,这将需要声明默认构造函数并暗示该类可以被实例化 - 它可以,但为什么要这样做呢?
我的第二个想法是让数据检索器扩展数据结构,但要抽象。这将标志着与其他开发人员的紧密关系,并且还清楚地表明仅添加了新方法,没有添加新字段。
但是,用抽象类扩展具体类似乎很奇怪,而且 Java 仍然让我创建默认构造函数。
最佳答案
My question is, how do I signify the relationship between these data manager classes and the objects that they retrieve?
这是一个标准的行业问题:如何将数据从数据库获取到应用程序中。常见的解决方案是使用 DAO 模式,即让一个数据访问对象 (DAO) 负责从数据库中检索对象。
如果您要检索员工的个人信息、工资等,您可以使用 EmployeeDAO 类来从相应的表中检索这些信息。如果您要检索公司的利润、地点、员工数量,您可以使用 CompanyDAO 类从数据库中检索此对象。
在此之上可能是一个服务层,用于执行业务逻辑;另外,还有一个 DAO 管理器,用于实例化 DAO 并返回对需要它们的任何类的引用。
关于Java向类添加静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16681893/