2

好了朋友们,

这是一个原则性问题,而不是事实问题。

我有一个在客户端和服务器上都使用的数据结构。

但是,在服务器端,我想要从某种数据存储创建客户端的功能(目前 SQL,它曾经是序列化数据,但没关系)。

最初我有一个名为“Datastore”之类的巨型类,它具有用于检索任何存储对象的静态方法。

虽然并不可怕,但这并不完全是面向对象的,而且也不完全是可扩展的。

所以我考虑将这些静态方法移动到数据结构本身。但是,这意味着共享客户端库知道如何从我的数据存储中检索对象——这有点傻。

因此,我现在为新数据存储包中的每个对象创建新类,每个类都包含用于从数据存储中检索一个对象的静态方法。

我的问题是,我如何表示这些数据管理器类和它们检索的对象之间的关系?

从功能上来说,没关系。静态方法工作正常。但我想向未来的我和其他未来的开发人员表明,数据检索器类和对象类是紧密相连的。

我的第一个想法是让数据检索器扩展数据结构。但是,这将需要声明默认构造函数并暗示可以实例化该类——它可以,但你为什么要实例化?

我的第二个想法是让数据检索器扩展数据结构,但要抽象。这将标志着与其他开发人员的紧密关系,并清楚地表明只添加了新方法,没有新字段。

但是,用抽象类扩展具体类似乎很奇怪,Java 仍然让我创建默认构造函数。

4

2 回答 2

2

我的问题是,我如何表示这些数据管理器类和它们检索的对象之间的关系?

这是一个标准的行业问题:如何将数据从数据库中获取到应用程序中。常见的解决方案是使用DAO 模式,即有一个数据访问对象 (DAO) 负责从数据库中检索对象。

如果您正在检索员工的个人信息、工资等,您可以有一个 EmployeeDAO 类,该类将从相应的表中检索它。如果您要检索公司的利润、位置、员工人数,您可以使用 CompanyDAO 类从数据库中检索此对象。

在此之上可能是一个服务层,用于执行业务逻辑;还有一个 DAO 管理器,用于实例化 DAO 并返回对任何需要它们的类的引用。

于 2013-05-22T01:08:40.757 回答
1

您仍然可以合并存储库设计模式和 DAO 模式的概念,将应用程序置于更简洁的抽象级别。存储库充当域级别的抽象。例子:

public class EmployeeBO implements EmployeeRepository { // implementation of a Business Object Domain-model

     @Inject
     private EmployeeDAO employeeDAO; // really implementation of data access


     @Override
     public  boolean createEmployee(String name){ // domain-oriented method
          // ... some validation
          employeeDAO.save(new Employee(name)); // really data access/persistence implementation
     }

}
于 2013-05-22T01:33:46.670 回答