Немного странный вопрос:)
Для контекста, я реализую сервер с использованием доменно-управляемого дизайна в качестве базовой архитектуры. Для этого конкретного вопроса у меня есть два класса в качестве сущностей в моем домене:
Транспортное средство:
public class Vehicle {
long vehicle_id;
String licence_plate;
String make;
String model;
Date _date;
public Vehicle(long vehicle_id, String licence_plate, String make, String model, Date _date) {
this.vehicle_id = vehicle_id;
this.licence_plate = licence_plate;
this.make = make;
this.model = model;
this._date = _date;
}
public static Vehicle getVehicle(HashMap<String, Object> values, Repository repository) {
HashMap<String, Object> map = repository.getDriver(values);
Vehicle vehicle = new Vehicle((long)map.get("vehicle_id"),
(String)map.get("licence_plate"),
(String)map.get("make"),
(String)map.get("model"),
(Date)map.get("_date"));
return vehicle;
}
public void insertDriver(Repository repository) {
HashMap<String, Object> map = getStringFieldsMap();
repository.insertDriver(map);
}
public void updateDriver(Repository repository) {
HashMap<String, Object> map = getStringFieldsMap();
repository.updateDriver(map);
}
public void deleteDriver(Repository repository) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("driver_id", this.vehicle_id);
repository.deleteDriver(map);
}
private HashMap<String, Object> getStringFieldsMap() {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("vehicle_id", this.vehicle_id);
map.put("licence_plate", this.licence_plate);
map.put("make", this.make);
map.put("model", this.model);
map.put("_date", this._date);
return map;
}
public long getVehicle_id() {
return vehicle_id;
}
...
}
И Драйвер:
public class Driver {
long driver_id;
String first_name;
String middle_name;
String last_name;
String cc_number;
String driver_licence_number;
String phone_number;
String email;
public Driver(long driver_id, String first_name, String middle_name, String last_name, String cc_number, String driver_licence_number, String phone_number, String email) {
this.driver_id = driver_id;
this.first_name = first_name;
this.middle_name = middle_name;
this.last_name = last_name;
this.cc_number = cc_number;
this.driver_licence_number = driver_licence_number;
this.phone_number = phone_number;
this.email = email;
}
public static Driver getDriver(HashMap<String, Object> values, Repository repository) {
HashMap<String, Object> map = repository.getDriver(values);
Driver driver = new Driver((long)map.get("driver_id"),
(String)map.get("first_name"),
(String)map.get("middle_name"),
(String)map.get("last_name"),
(String)map.get("cc_number"),
(String)map.get("driver_licence_number"),
(String)map.get("phone_number"),
(String)map.get("email"));
return driver;
}
public void insertDriver(Repository repository) {
HashMap<String, Object> map = getStringFieldsMap();
repository.insertDriver(map);
}
public void updateDriver(Repository repository) {
HashMap<String, Object> map = getStringFieldsMap();
repository.updateDriver(map);
}
public void deleteDriver(Repository repository) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("driver_id", this.driver_id);
repository.deleteDriver(map);
}
private HashMap<String, Object> getStringFieldsMap() {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("driver_id", this.driver_id);
map.put("first_name", this.first_name);
map.put("middle_name", this.middle_name);
map.put("last_name", this.last_name);
map.put("cc_number", this.cc_number);
map.put("driver_licence_number", this.driver_licence_number);
map.put("phone_number", this.phone_number);
map.put("email", this.email);
return map;
}
public long getDriver_id() {
return driver_id;
}
...
}
Обе сущности и до сих пор у всех остальных есть метод getFieldsMap()
, который помещает все поля классов в карту для передачи в операции вставки и обновления.
У меня такой вопрос: учитывая, что эти объекты будут использоваться при большинстве запросов к серверу, так как они являются частью основной области, будет ли какое-либо преимущество, дизайн или производительность, в рефакторизации методов в метод родительского класса, который будет делать то же самое, помещая все поля класса в карту, используя отражение?
И когда я пишу это, с тем же успехом можно спросить, хотя я не уверен, если это не связано (с правилами), и если это так, я извиняюсь, но вот оно: в delete()
Я Я делаю в основном то же самое, но только с идентификатором, и поэтому это как бы нарушает аккуратность, к которой я стремлюсь, поэтому я должен использовать getFieldsMap()
даже с дополнительными полями, с точки зрения дизайна? Этот вопрос служит для обоих ответов на первый.
Спасибо:)