Как правильно реализовать свойства в сложных объектах - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть следующие модели:

class IdNamePair
{
    protected int id;
    protected String name;

    public IdNamePair()
    {
        id = 0;
        name = "";
    }
}

class Voyage extends IdNamePair
{
    //Several string and int variables
}

class Employee extends IdNamePair
{
    //Several string and int variables
}

class Vessel extends IdNamePair
{
    //Some string and int variables
}

class Details
{
    //Several string and int variables
}

class Summary
{
    protected Vessel vessel;
    protected Employee chief;
    protected Employee operator;
    protected List<Details> details
}

class Update
{
    protected LocalDateTime created;
    protected LocalDateTime modified;
    List<Summary> summaries;
    //Some string and int variable.
}

Я не понимаю, как создать сложный объект с несколькими списками, картами и экземплярами других классов.Я могу заменить существующие типы полей соответствующими типами свойств (String до StringProperty, double до DoubleProperty и т. Д.), Но как мне обрабатывать сложные типы (List<Summary>, HashMap<String, Vessel>, List<Details>)?

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

class IdNamePair
{
    protected int id;
    protected String name;
}

на

class IdNamePair
{
    protected IntegerProperty id;
    protected StringProperty name;
}

или предоставить новый тип

class IdNamePairEx
{
    protected IntegerProperty id;
    protected StringProperty name;

    public IdNamePairEx(IdNamePair idNamePair);

    ///to simple object
    public IdNamePair toIdNamePair();
    ///from simple object
    public void fromIdNamePair(IdNamePair idNamePair);
}

и использовать его при работе с кодом GUI.Этот подход обеспечил бы обратную совместимость с существующим кодом (сериализация JSON, JDBC), но фактически удвоил бы количество моих классов модели.Какой предпочтительный способ?

Обновление:

У меня есть программа, которая взаимодействует с PostgreSQL и выполняет различные операции CRUD.Соответствующие классы существуют для каждой таблицы в базе данных.Мне нужно разработать новый модуль, который будет использовать существующие классы, и я хотел бы реализовать обновления GUI через привязки и свойства.Нужно ли заменять каждый тип переменной на соответствующий ему тип свойства (String -> StringProperty) или лучше создавать похожие классы, которые работают через свойства и предоставляют методы преобразования (class Vessel -> class VesselWithPropertiesInteadOfRawTypes)

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