Java метод получения поля родительского класса с использованием отражения и метода получения поля копирования и вставки в дочерних классах - PullRequest
0 голосов
/ 31 марта 2020

Немного странный вопрос:)

Для контекста, я реализую сервер с использованием доменно-управляемого дизайна в качестве базовой архитектуры. Для этого конкретного вопроса у меня есть два класса в качестве сущностей в моем домене:

Транспортное средство:

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() даже с дополнительными полями, с точки зрения дизайна? Этот вопрос служит для обоих ответов на первый.

Спасибо:)

...