Нужна помощь в моделировании объекта домена, который содержит более 100 полей - PullRequest
0 голосов
/ 24 сентября 2010

Существует класс с именем "Foo", который обычно содержит более 100 полей. Это объект домена, и я должен настроить его для каждого клиента, потому что спецификация полей почти полностью отличается от одного клиента к другому (не более 10 полей одинаковы). У некоторых клиентов есть более 200 полей.

В настоящее время я должен обновить определение класса "Foo" в IDE в соответствии со спецификацией для каждого клиента. Поскольку я должен использовать эти поля в «Foo» для выполнения некоторых вычислений на бизнес-уровне, иногда это действительно подвержено ошибкам и отнимает много времени.

Мне интересно, кто-нибудь знает какой-нибудь элегантный способ сделать это? Например, я могу написать определение всех полей (имя, тип, длина, значение по умолчанию, масштаб, точность, формула вычисления (в основном + - * /)) вне кода Java (предположим, файл XML), а затем использовать инструмент для генерировать исходный код Java. После этого я просто компилирую и упаковываю сгенерированный код в виде foo-custom.jar и помещаю его в свое приложение.

Ответы [ 2 ]

2 голосов
/ 24 сентября 2010

Не генерировать Java.

Если это так, выполните XML-процедуру, чтобы определить соответствующие данные для каждого клиента. Затем создайте объекты Field из данных XML. Поместите их в карту в Foo. Теперь вместо foo.getName () вы будете использовать foo.get ("name");

Создайте Factory, которая читает соответствующий XML-файл и возвращает вам экземпляр Foo, который был загружен из XML.

Попытка поместить разные данные в один класс очень неудачна.


Или создайте конкретные классы, специфичные для каждого клиента. Да, это утомительно, но вы должны сделать это только один раз. Они должны реализовывать интерфейс, который определяет все методы, необходимые на бизнес-уровне. Теперь ваша фабрика определяет, какой из них подходит, создает его и возвращает интерфейс.

Теперь ваш бизнес-уровень не знает клиента. Это хорошо.

Теперь, если ваш бизнес-уровень очень зависит от клиента, мы можем сделать немного больше, чтобы облегчить боль ...

2 голосов
/ 24 сентября 2010

Я думаю, вам нужно потратить некоторое время и попытаться лучше понять (или хотя бы объяснить), что именно этот класс намеревается запечатлеть. Какому объекту в реальном мире соответствует этот класс?

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

Я не могу представить ни одного "объекта", который действительно имеет сотни полей / свойств.

...