Я пытаюсь создать хороший дизайн ООП, особенно соответствующий SRP для взаимодействия с базой данных для вставки и удаления Customer
. Я сосредоточен на дизайне, а не на деталях SQL и JDBC или источниках данных. Поэтому я оставил простые реализации с использованием линий печати. Но мне интересно, так ли спроектирован Springs jdbctemplate.
Эта попытка возникла, когда я изучал принцип проектирования SRP OOP. Плохо спроектированный класс Customer
нарушил SRP, поскольку содержал ответственность за вставку/удаление базы данных. Я вытащил код из класса Customer
и поместил его в класс, наследуемый от базового класса RdbmsManager
, который отвечает за установление соединений и взаимодействие с базой данных. Я не уверен в том, что это хороший дизайн, и я также не уверен, что какой-то объект API базы данных, похожий на jdbcTemplate
, или что-то еще нужно предоставить дочерним классам для взаимодействия с базой данных.
Customer
класс
public class Customer {
private int id;
private String fullName;
private boolean active;
public Customer(int id, String name, boolean active){
this.id = id;
this.fullName = name;
this.active = active;
}
@Override
public String toString() {
return "Customer [id=" + id + ", name=" + name + ", active=" + active
+ "]";
}
}
Класс доступа к родительской базе данных:
public class RdbmsManager{
public RdbmsManager(){
connectToDatabase();
}
private void connectToDatabase(){
// read from properties files to get DB URL, PORT number etc.
// Create Datasource object and establish connection to database
System.out.println("Established Database Connection...");
}
// Below method returns the database object children can use to issue commands
protected DatabaseAPI getDatabaseObject(){
DatabaseAPI databaseObject = new DatabaseAPI ();
return databaseObject;
}
}
Дочерний класс CustomerDataManager:
public class CustomerDataManager extends RdbmsManager{
public CustomerDataManager() {
super(); // call to super will establish database connection from parent class
}
public void saveCustomerToDatabase(Customer Customer) {
getDatabaseAPI().insert(Customer);
}
public void deleteCustomerFromDatabase(Customer Customer) {
getDatabaseAPI().delete(Customer);
}
}
Простая реализация объекта взаимодействия с базой данных, чтобы сосредоточиться на дизайне:
public class DatabaseAPI{
protected void insert(Object object){
System.out.println("inserted the into the database: "+ object.toString());
}
protected void delete(Object object){
System.out.println("Deleted object from database" + object.toString());
}
}