【发布时间】:2014-08-22 03:36:05
【问题描述】:
我正在学习 SRP 并且不得不减少包含太多信息的客户对象的责任。所以我把它变成了一个 Pojo 并提取了数据库逻辑。 我正在尝试为此设置找到最佳设计,并在使 DatabaseManager 类成为父类或可以返回单个连接对象的单例之间进行分裂。该系统将用于从数据库中插入和删除客户。我不希望我的域对象/DAO 担心连接细节。我目前的设计是否强烈遵循 OOP 设计原则?
public class DatabaseManager {
private Connection conn;
private static DatabaseManager managerInstance = new DatabaseManager();
private DatabaseManager() {
}
public static DatabaseManager getInstance() {
return managerInstance;
}
/**
* contains connection details
*
* @throws SQLException
*/
public void connect() throws SQLException {
System.out.println("Established Database Connection...");
conn = DriverManager.getConnection("Some/Database/URL");
}
public Connection getConnectionObject() {
return conn;
}
public void disconnect() throws SQLException {
conn.close();
System.out.println("Disconnected from Database...");
}
}
这是客户对象:
public class Customer {
private int id;
private String name;
private boolean active;
public Customer(int id, String name, String department, boolean working) {
super();
this.id = id;
this.name = name;
this.department = department;
this.working = working;
}
@Override
public String toString() {
return "Customer [id=" + id + ", name=" + name + ", department="
+ department + ", working=" + working + "]";
}
}
客户 DAO:
public class CustomerDAO {
public CustomerDAO() {
}
public void addCustomer(Customer Customer) throws SQLException {
DatabaseManager.getInstance().getConnectionObject().prepareStatement("some sql... ");
}
public void removeCustomer(Customer Customer) throws SQLException {
DatabaseManager.getInstance().getConnectionObject().prepareStatement("some sql... ");
// implementation details avoided
}
}
【问题讨论】:
-
我不会选择在 2014 年实现新的
DatabaseManager。有很多好的连接池实现,我会使用其中的一个。 -
节省一些时间并使用 Spring Data JPA
-
Singleton...个人...这种资源管理确实需要在一个地方完成 - 个人。
-
@MadProgrammer 谢谢。你能详细说明为什么这样会更好吗?如果有多个连接对象实例会发生什么?如果多个 DAO(例如 productDAO、employeeDAO)都使用单例发布数据库命令怎么办?这不会导致数据库出现问题吗?你能告诉我吗?谢谢!
-
再次,这是为了学习 OOP 设计而不是选择最新技术。
标签: java oop design-patterns object-oriented-analysis