Создание неизменных объектов от javabean

Вы не можете сделать это с помощью одного запроса, потому что PUT, POST и DELETE - это разные типы запроса. Если вы используете AJAX, вы можете определить три метода для отправки формы; один на тип запроса.

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

Вы также можете выполнить несколько запросов на основе одного клика, вызвав все три метода подряд.

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

5
задан Rachel 8 January 2011 в 00:40
поделиться

6 ответов

Чтобы сделать его действительно неизменным, необходимо инициализировать элементы во время строительства.

Один из способов (и я не говорю, что это красиво!) Сделать это и избежать огромного списка параметров в конструкторе - это иметь изменяемый тип с такими же свойствами. Задайте свойства изменяемого типа по одному через «setters», затем передайте изменяемый объект конструктору неизменяемого типа в качестве единственного аргумента. Затем неизменяемый объект копирует свойства из изменяемого источника в собственные ( final ) члены.

Вы также можете рассмотреть «эффективную неизменность». То есть, несмотря на то, что неизменность не обеспечивается системой, вы используете методы кодирования, которые четко отделяют фазу инициализации от фазы использования. В конце концов, неизменяемость не требуется для сериализации.

Вы можете пойти дальше, создав оболочку, скрывающую реализацию, для интерфейса, который не раскрывает свойства реализации. Оболочка реализует только методы в интерфейсе, делегируя «реальную» реализацию. Установщики и получатели из реализации отсутствуют в оболочке. Это остановит клиентов от простого перехода от интерфейса к классу реализации и манипулирования свойствами.

Установщики и получатели из реализации отсутствуют в оболочке. Это остановит клиентов от простого перехода от интерфейса к классу реализации и манипулирования свойствами.

Установщики и получатели из реализации отсутствуют в оболочке. Это остановит клиентов от простого перехода от интерфейса к классу реализации и манипулирования свойствами.

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

20-25 свойств невелики для одного, особенно если вы используете полуприличный редактор.

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

Если вы хотите, чтобы был действительно злым хакером , используйте java.beans создать сериализуемую карту для изменяемого класса или подкласса, реализующего Externalizable . В качестве альтернативы вы можете использовать java.beans XML-сериализацию (XML, который можно отправить через Java-сериализацию ...).

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

Несколько идей:

Защищенные сеттеры и фабричные методы Вы можете определить bean-компоненты с помощью защищенных методов установки и в том же пакете - фабричный класс, который принимает все параметры и вызывает эти методы. Боб неизменен вне этой упаковки. Для обеспечения этого обязательно закройте свой jar-файл, чтобы конечные пользователи не могли создавать новые классы в одном пакете.

Примечание. Вы можете использовать мои аннотации JavaDude Bean, чтобы упростить создание: http://code.google.com/p/javadude/wiki/Annotations

Например:

@Bean(writer=Access.PROTECTED, // all setXXX methods will be protected
    properties={
        @Property(name="name"),
        @Property(name="age", type=int.class)
    })
public class Person extends PersonGen {
}

Создание геттеров и конструктора в eclipse

В Eclipse есть несколько хороших инструментов для быстрой работы:

  1. Создайте класс bean-компонента
  2. Добавьте нужные поля
  3. Щелкните правой кнопкой мыши в окне редактора
  4. Выберите Source-> Generate Getters and Setters
  5. Нажмите кнопку «Выбрать геттеры»
  6. Нажмите ok
  7. Щелкните правой кнопкой мыши в окне редактора.
  8. Выберите Source-> Generate Constructors from fields
  9. . Выберите и упорядочите нужные поля в конструкторе.
  10. Нажмите ok

. Imoutable Decorator

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

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

Мне нравится Mercurial для подобных задач.

Преимущества:

  • Репозиторий - это всего лишь один каталог .hg - вы можете скопировать его по мере необходимости, вам не нужно иметь дело со скрытыми каталогами «CVS» или .svn, разбросанными по всему проекту, и т. Д.
  • Настройка сервера не требуется - особенно хорошо для ситуаций, когда вы просто используете это для себя. Это верно для всех DVCS - то же самое относится и к вышеуказанному пункту, действительно.
  • Хорошо работает в Windows - нет необходимости в Cygwin
  • . Легко работать в автономном режиме (хотя, похоже, это не так). не имеет большого значения для вас)

(возможно) Недостатки:

  • Только для командной строки (в значительной степени). Я думаю, что интерфейс CL довольно хороший, но некоторые люди уклоняются, если нет графического интерфейса. Существует TortoiseHg, но я не могу ручаться за это.
  • . Создайте новый класс и присвойте ему переменные экземпляра с теми же именами, что и переменные экземпляра вашего «большого объекта Java-бина». Этот новый класс не должен иметь установщиков (но только получателей), чтобы сделать его неизменным.

    Шаг 2 : Используйте Apache Commons BeanUtils.copyProperties , чтобы скопировать все свойства (то есть переменные экземпляра) из вашего 'большой объект Java-бина' для вашего нового объекта.

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

Как насчет простого интерфейса только для чтения, содержащего геттеры?

Если класс bean-компонента является вашим собственным, позвольте ему просто реализовать интерфейс и использовать только интерфейс после создания.

Если у вас нет контроля над классом bean-компонента, вы также можете создать интерфейс получателя и реализовать его, создав прокси для интерфейса получателя с обработчиком вызова, делегирующим все вызовы методов bean-компоненту.

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

Книга Джошуа Блоха "Эффективная Java" иллюстрирует паттерн Builder, в котором простые объекты Builder используются для построения сложного объекта с длинным списком аргументов конструктора. Рекомендую.

http://www.drdobbs.com/java/208403883;jsessionid=PJWS41F5DJ4QRQE1GHRSKH4ATMY32JVN? pgno=2

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

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