2012-02-06 4 views
1

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

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

+1

Если поле является классом, можете ли вы сохранить флаг в качестве члена, указывающий, является ли он необязательным или обязательным? Тогда класс Сегмент может установить это в поле, когда он создает новый. – kevintodisco

+0

Да, это будет сделано. Не уверен, почему я не думал об этом ... – tabdulla

ответ

1

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

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

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

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

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

0

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

0

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

Смежные вопросы