Шаблон проектирования для хранения новых значений для полей Abitrary - PullRequest
0 голосов
/ 09 февраля 2012

Скажите, у меня есть класс, Пользователь:

public class User {
    private String name;
    private Integer age;
    private Double cash;

    // Getters and setters...
}

Какая-то волшебная система выплевывает данные для всех пользователей, и моя система забирает их. Некоторые сотрудники должны сообщать об этих данных, но некоторые из них, как известно, неверны. Поскольку исходная система волшебная, никто не может связываться с пользовательскими данными в ней, поэтому им нужно использовать мою систему для обновления этих данных, чтобы они были правильными в отчете. Таким образом, я хочу создать класс, похожий на следующий:

public class UserUpdate {
    private UserPropertyEnum property;
    private Something newValue;
    private Date dateAdded;

    // Getters and setters...
}

Итак, проблема в том, что я не знаю тип поля, которое я изменяю. Я полагаю, я мог бы сделать newValue типа Object, и привести его на основе значения свойства enum ...

В любом случае, есть хороший шаблон дизайна, который решает это? И если есть, как это реализовано на уровне данных (я использую реляционную базу данных)?

(Пожалуйста, воздержитесь от "вы неизменны, волшебная система глупа ... не храните данные, о которых известно, что они неверны", поскольку я знаю об этом и совершенно бессилен что-либо с этим делать.)

Спасибо!

1 Ответ

1 голос
/ 09 февраля 2012

В C # я бы использовал дженерики. Вы можете сделать что-то вроде:

public class UserUpdate<T> {
    private UserPropertyEnum property;
    private T newValue;
    private Date dateAdded;

    // Getters and setters...
}

А затем создайте обновление, скажем, для Зарплаты, используя:

UserUpdate<Int32> salaryUpdate = new UserUpdate<Int32>();
salaryUpdate.newValue = 50000; //This will be an int, no need to cast

Я предполагаю, что ваши обновления жестко закодированы в какой-то механизм, который "исправляет" ваши магические данные, поэтому типы каждого обновления будут известны. Я полагаю, что дженерики в Java работают так же, но вам придется подтвердить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...