Структурный дизайн - PullRequest
       1

Структурный дизайн

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

Я работаю с тремя отдельными классами: Группа, Сегмент и Поле.Каждая группа представляет собой набор из одного или нескольких сегментов, а каждый сегмент - это набор из одного или нескольких полей.Существуют различные типы полей, которые подклассируют базовый класс Field.Существуют также различные типы сегментов, которые являются подклассами базового класса Segment.Подклассы определяют типы полей, ожидаемых в сегменте.В любом сегменте некоторые из определенных полей должны иметь введенные значения, а некоторые могут быть пропущены.Я не уверен, где хранить эти метаданные (является ли данное поле в сегменте необязательным или обязательным).

Какой самый чистый способ хранения этих метаданных?

Ответы [ 3 ]

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

Я не уверен, что вы предоставляете достаточно информации о полном заявлении, чтобы получить лучший ответ.Однако вот несколько возможных подходов:

  1. Определите метод isValid () в вашем базовом классе, который по умолчанию возвращает true.В ваших подклассах вы можете кодировать определенную логику для каждого сегмента или FieldType, чтобы возвращать false, если какие-либо требования отсутствуют.Если вы хотите сообщить об ошибке, чтобы указать, какие поля отсутствуют, вы можете добавить аргумент List в метод isValid, чтобы каждый тип мог сообщать о списке пропущенных значений.

  2. ИспользоватьАннотации (как AlexR сказал выше).

Преимущество двух вышеуказанных подходов состоит в том, что метаданные находятся внутри кода, привязанного непосредственно к объектам, которые его требуют.Недостатком является то, что если вы хотите изменить обязательные поля, вам необходимо обновить код и развернуть новую сборку.

Если вам нужно что-то, что можно изменить на лету, то предложение Гангуса о Xml:хорошее начало, потому что ваше приложение может перезагрузить определение Xml во время выполнения и выдать разные результаты проверки.

0 голосов
/ 07 февраля 2012

Поскольку выпущена Java 5, метаданные этого типа могут храниться с использованием аннотаций. Определите собственную аннотацию @MandatoryField и пометьте все обязательные поля ею. Затем вы можете обнаружить объект поле за полем, используя отражение, и проверить, не являются ли обязательные поля обязательными, и вызвать исключение в этом случае.

0 голосов
/ 07 февраля 2012

Думаю, лучшим размещением для таких данных будет обычный XML-файл.И для работы с такими данными лучшей структурой будет также XMLDOM с XPATH.Работа с классами будет слишком сложной.

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