Как обработать класс Java с сотнями полей? [закрытый]

9
задан C. Ross 27 July 2010 в 18:42
поделиться

7 ответов

Yikes.

Один из вариантов - просто использовать Map или аналогичный держатель свойств.

Другой вариант: использовать серию вложенных классов, чтобы добавить организацию (например, Order.Person.ContactInfo.Address.ZipCode, а не просто Order.ZipCode). Я не уверен, что мне это нравится, поскольку это означает дополнительную сложность, но без этого поиск нужного геттера/сеттера (например, с помощью автозаполнения в IDE) превращается в кошмар.

Еще один вариант: если вы создаете один класс с большим количеством свойств, рассмотрите возможность использования шаблона "конструктора выражений", в котором каждый "сеттер" возвращает сам объект, позволяя вам объединять сеттеры в цепочки:

myObject.setPropertyA("Foo").setPropertyB("Bar").setPropertyC("Baz")...

что может создать более быстрый и беглый интерфейс

myObject.setPropertyA("Foo");
myObject.setPropertyB("Bar");
myObject.setPropertyC("Baz");
...
5
ответ дан 4 December 2019 в 13:44
поделиться

Возможно, обернуть методы API с громоздким количеством параметров и применить Introduce Parameter Object рефакторинг повторно, группируя логически связанные параметры в объекты параметров, особенно если результаты отображаются на существующие объекты модели, к которым можно применить adaptor pattern.

3
ответ дан 4 December 2019 в 13:44
поделиться

Я бы серьезно подумал об использовании двух хэш-таблиц, если максимальная производительность не является критерием убийства.

2
ответ дан 4 December 2019 в 13:44
поделиться

Можете ли вы использовать java.util.Map вместо класса с сеттерами / получателями?

2
ответ дан 4 December 2019 в 13:44
поделиться

Сторонний API должен объявить какой-то тип/класс для обработки выходных данных, верно? Если предположить, что этот API - класс Java, то очевидно, что они должны возвращать единственный объект Output из своего метода.

Если это так, то для взаимодействия с этим API я бы создал объект-обертку, который

  1. обернул бы входные поля/объект и выходной объект
  2. Только имел публичные методы доступа для полей моей программы, с которыми нужно взаимодействовать (у меня есть ощущение, что вам не нужно обращаться ко всем 296 полям)

Таким образом, остальная часть вашей программы должна знать о существовании только тех полей, о которых ей нужно знать, а остальные поля (и сами сторонние объекты) полностью скрыты/абстрагированы.

0
ответ дан 4 December 2019 в 13:44
поделиться

Вау, много полей. Несмотря на это ...

Как API взаимодействует с этим классом? Если он обеспечивает реализацию требуемой структуры классов, вам обязательно стоит пойти на это.

1
ответ дан 4 December 2019 в 13:44
поделиться

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

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

2
ответ дан 4 December 2019 в 13:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: