java - 我需要在数据库中搜索 "customer",这里有什么好的设计?

标签 java oop

我们是一对学生,他们试图实现一种设计来在数据库中搜索客户信息。当 GUI 类要求任何姓氏为“Jensen”的客户时,客户类是否会为每个姓氏的客户创建许多对象,将所有这些对象提供给 GUI 类,让 GUI 类例如更改一些东西或添加一些东西,然后在客户类中使用某种方法在数据库中更新它?


Customer class:
  Surname
  Email

getSurname()
setSurname()

static List getCustomerFromDb(surname, email):
  Customer customer = new Customer()
  customer.setSurname(surname from db)
  ..
  ..
  return listOfCustomers

updateThisCustomerInDb():
  //updates all fields in db

我们现在的实现是,我们从客户中的静态方法向 GUI 类发送一个结果集以搜索客户。如果 GUI 类想要更改客户中的电子邮件等字段,它会发送一个具有要更改的键和值的 HasMap。

创建大约 300 个客户对象并且只需要其中一个不是很糟糕吗?

我们寻求帮助的原因是,我们听说不使用对象而是使用 ResultSet 和 HasMap 来更新、更改、查找(在数据库中)客户是一个糟糕的 OO 设计。

谢谢 =)

最佳答案

假设像 Hibernate 这样的 ORM 框架要么矫枉过正,要么不允许您进行分配,这就是我的建议:

实现 DAO 设计模式。简而言之,这意味着您声明一个接口(interface),其中包含用于检索和更改数据库数据的方法。他们的签名应该类似于您提供的示例代码,并且应该返回域对象,即不特定于数据库访问代码实现的对象。客户的典型域对象可能如下所示:

public class Customer {

    private String surname;
    private String email;
    private long id;

    public String getSurname() {
        return surname;
    }
    public void setSurname(String surname) {
        this.surname = surname;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }

}

然后创建一个接口(interface)的实现,其中放置了所有严格的 DB 特定代码。

关于糟糕设计的说法对我来说似乎是正确的,您不想在设计的上层公开特定于数据库的代码。您应该使用自己的、领域特定的对象或它们的集合。

祝你好运

关于java - 我需要在数据库中搜索 "customer",这里有什么好的设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1453669/

相关文章:

php - 特征中的构造函数定义如何冲突?

java - 更新 recyclerview 中的特定项目

java - Swing + MigLayout,其他组件的动态增长和收缩

Javascript OOP : loosing "this" and take last object created instead (jsfiddle sample)

javascript - 在类中使用 setInterval() 和 clearInterval()

C++ - 使用基类作为模板参数

oop - Fortran,(1) 处的终结尚未实现

java - 带有 hibernate 验证的 Spring MVC 不起作用

java - 下拉菜单行为异常

java - 写数组作为参数Java