Java XML дизайн логический флаг и значения

1

Вот как выглядит мой текущий XML файл.

<book>
    <isWritable>true</isWritable>
    <writeDelay>4.0</writeDelay>

    <isReadable>true</isReadable>
    <readDelay>3.2</readDelay>

    <isDestroyed>false</isDestroyed>
</book>

У меня есть:

3 булевых флага - isWritable, isReadable, isDestroyed.

2 значения writeDelay, readDelay.

Условия:

isWritable требует writeDelay

isReadable требует readDelay

Вы можете быть isDestroyed, но не isWritable или isReadable

Вы можете быть isWriteable и isReadable

Вы можете быть правдоподобным или isReadable

Текущая реализация:

У Book.class есть все необходимые поля. Я хочу упростить это.

Если моя книга читаема, но не доступна для записи. Файл XML должен быть только:

<book>
    <isReadable>true</isReadable>
    <readDelay>3.2</readDelay>
</book>

Точно так же, если книга уничтожена. XML должен быть только:

<book>
    <isDestroyed>true</isDestroyed>
</book>

Существует ли какая-либо существующая модель дизайна, применимая к моей ситуации? Я посмотрел на несколько и склоняюсь к полиморфизму, но хотел связаться, чтобы увидеть, есть ли какие-либо другие шаблоны, которые я еще не рассматривал.

Полиморфизм: вот моя идея, но мне кажется, что это всего лишь логическое значение и ценность.

Класс называется bookDescription.

подкласс: writeDescription, readDescription, writeAndReadDescription (подкласс writeDescription), destroyDescription.

Будут оценены любые комментарии и предложения. Спасибо!

Теги:
jaxb
design
flags

2 ответа

1

Я бы посоветовал атрибуты XML. Проблема довольно распространена при рассмотрении Java и XML, поскольку элементы, как правило, гораздо более конкретны по сравнению с атрибутами.

Здесь хорошо читается с целью атрибутов: qaru.site/questions/29804/...

Мы описываем что-то о свойствах этой книги, а не о содержании самой книги.

В этом случае вы можете сделать следующее:

<book isWritable="true" isReadable="true" writeDelay="4.0" readDelay="3.2" isDestroyed="false"/>

Затем вы можете быстро вывести атрибуты и не считать, что атрибуты не являются ложными.

Однако вы фактически предоставили 5 частей данных, но 2 части данных зависят от двух других данных:

isWritable: writeDelay

isReadable: readDelay

Поскольку вы указываете writeDelay и readDelay требуются на основе других полей, вы можете сделать это еще более эффективным:

<book writeDelay="4.0" readDelay="3.2" isDestroyed="false"/>

Книга только для чтения:

<book readDelay="3.2"/>

Разрушенная книга:

<book isDestroyed="true"/>

Затем вы можете использовать writeDelay и readDelay вары для обработки булевых. Если они не предоставлены, вы можете предположить, что их связанное значение ложно.

Это позволяет вашему XML быть совместимым с SAX, так как все жизненно важные атрибуты предоставляются в соответствии с самим элементом, а не обязательно в дальнейшем разбираться. Вы можете легко утверждать от единственного узла, а не узла и его дочерних элементов, на основе свойств.

Однако объект Java, как вы его описали, в порядке. Вы должны сохранить все 5 этих значений там для ясности и фактического использования программ. XML предназначен специально для хранения данных, в то время как ваше приложение интерпретирует сохраненные данные.

0

Для этого конкретного случая использования вы можете создать отдельную версию класса Book которая используется только для преобразования объекта /XML. Этот класс будет иметь свойства типа данных объекта (т. Boolean вместо boolean), так что нулевые значения не преобразуются в XML. Затем вы можете инкапсулировать всю свою логику в класс конвертера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню