我们是一对学生,他们试图实现一种设计来在数据库中搜索客户信息。当 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/