Бачили кілька подібних питань:
- Чим відрізняється JavaBean від POJO?
- Яка різниця між POJO (Plain Old Java Object) та DTO (Object Transfer Data)?
Чи можете ви також, будь ласка, розкажіть мені про контексти, в яких вони використовуються? Або мета їх?
Бачили кілька подібних питань:
Чи можете ви також, будь ласка, розкажіть мені про контексти, в яких вони використовуються? Або мета їх?
Відповіді:
JavaBean - клас, який дотримується конвенцій JavaBeans , визначених Sun. У Вікіпедії є досить хороший підсумок того, що таке JavaBeans :
JavaBeans - це програмні компоненти для багаторазового використання для Java, якими візуально можна керувати в інструменті для побудови. Практично це класи, написані мовою програмування Java, що відповідають певній умові. Вони використовуються для інкапсуляції багатьох об'єктів в один об'єкт (квасоля), так що вони можуть передаватися навколо як один об'єкт бобів, а не як кілька окремих об'єктів. JavaBean - це об'єкт Java, який можна серіалізувати, має нульовий конструктор і дозволяє отримати доступ до властивостей за допомогою методів getter та setter.
Для того, щоб функціонувати як клас JavaBean, клас об’єктів повинен дотримуватися певних умов щодо іменування методів, побудови та поведінки. Ці конвенції дозволяють мати інструменти, які можуть використовувати, використовувати повторно, замінювати та підключати JavaBeans.
Необхідні умови:
- Клас повинен мати публічний конструктор за замовчуванням. Це дозволяє легко інстанціювати в межах редагування та активації.
- Властивості класу повинні бути доступними за допомогою методу get, set та інших методів (так званих методів accessor та mutator), дотримуючись стандартної угоди про іменування. Це дозволяє легко автоматизовано перевіряти та оновлювати стан бобів у рамках, багато з яких містять спеціальні редактори для різних типів властивостей.
- Клас повинен бути серіалізаційним. Це дозволяє програмам та рамкам надійно зберігати, зберігати та відновлювати стан бобів таким чином, що це не залежить від віртуального комп'ютера та платформи.
Оскільки ці вимоги значною мірою виражаються як конвенції, а не через реалізацію інтерфейсів, деякі розробники розглядають JavaBeans як звичайні старі об’єкти Java, які слідують певним умовам іменування.
Простий старий об’єкт Java або POJO - це термін, спочатку введений для позначення простого об'єкта Java, який не реалізує жодного javax.ejb
інтерфейсу, на відміну від важкої ваги EJB 2.x (особливо Entity Beans, Beatless Session Beans - це не такий вже й поганий IMO). Сьогодні цей термін використовується для будь-якого простого об'єкта без зайвих речей. Знову ж таки, Вікіпедія робить хорошу роботу у визначенні POJO :
POJO - абревіатура для Plain Old Java Object. Назва використовується для підкреслення того, що спірний об'єкт є звичайним об'єктом Java, а не спеціальним об'єктом і, зокрема, не Enterprise JavaBean (особливо перед EJB 3). Цей термін було введено Мартіном Фаулером, Ребеккою Парсонс та Джошем Макензі у вересні 2000 року:
"Ми поцікавились, чому люди настільки проти використання звичайних об'єктів у своїх системах і зробили висновок, що це тому, що простим об'єктам не вистачає фантазійної назви. Тож ми дали їм один, і це дуже приємно".
Цей термін продовжує схему старих термінів для технологій, які не використовують фантазійних нових функцій, таких як POTS (Plain Old Telephone Service) в телефонії та PODS (Plain Old Data Structures), які визначені в C ++, але використовують лише функції мови C, та POD (звичайна стара документація) в Perl.
Цей термін, швидше за все, отримав широке визнання через необхідність використання загального і легко зрозумілого терміна, який контрастує зі складними рамками об'єктів. JavaBean - POJO, який можна серіалізувати, має конструктор без аргументів і дозволяє отримати доступ до властивостей за допомогою методів getter та setter. Enterprise JavaBean - це не один клас, а ціла модель компонентів (знову ж, EJB 3 зменшує складність Enterprise JavaBeans).
Оскільки конструкції, що використовують POJO, стали все частіше використовуватися, виникли системи, які надають POJO деяку функціональність, що використовується в рамках, і більше можливостей щодо того, які саме області функціональності потрібні. Зимовий режим і Весна - приклади.
Об'єкт значення або VO - такий об'єкт, java.lang.Integer
який містить значення (отже, об'єкти значення). Для більш формального визначення я часто звертаюся до опису Мартіна Фаулера Значення Об'єкта :
У «Шаблонах архітектури корпоративних додатків» я описав Value Object як невеликий об’єкт, такий як об’єкт «Гроші» чи «діапазон дат». Їх ключовою властивістю є те, що вони слідують семантиці значення, а не еталонній семантиці.
Зазвичай їх можна сказати, оскільки їхнє поняття рівності не базується на ідентичності, натомість два ціннісні об'єкти рівні, якщо всі їхні поля рівні. Хоча всі поля рівні, вам не потрібно порівнювати всі поля, якщо підмножина унікальна - наприклад, коди валют для валютних об'єктів достатньо для перевірки рівності.
Загальним евристичним є те, що ціннісні об'єкти повинні бути повністю незмінні. Якщо ви хочете змінити об'єкт значення, вам слід замінити об'єкт на новий і не дозволяти оновлювати значення самого об'єкта значення - об’єкти, що можна оновити, призводять до виникнення проблем.
Рання література J2EE використовувала об'єкт значення терміна, щоб описати інше поняття, як я називаю " Об'єкт передачі даних" . З тих пір вони змінили своє використання і натомість використовують термін " Передача" .
Ви можете знайти ще кілька хороших матеріалів про цінні об’єкти на вікі та від Дірка Ріле .
Об'єкт передачі даних або DTO - це (анти) шаблон, що вводиться з EJB. Замість того, щоб виконувати багато віддалених дзвінків на EJB, ідея полягала в тому, щоб інкапсулювати дані в об'єкт значення, який можна перенести через мережу: Об'єкт передачі даних. У Вікіпедії є гідне визначення об’єкта передачі даних :
Об'єкт передачі даних (DTO), раніше відомий як об'єкти цінності або VO, є схемою проектування, що використовується для передачі даних між підсистемами програмного забезпечення. DTO часто використовуються спільно з об'єктами доступу до даних для отримання даних із бази даних.
Різниця між об'єктами передачі даних та бізнес-об'єктами або об'єктами доступу до даних полягає в тому, що DTO не має жодної поведінки, крім зберігання та пошуку власних даних (аксесуарів та мутаторів).
У традиційній архітектурі EJB, DTO служать подвійним призначенням: по-перше, вони вирішують проблему, що сутність об'єктів не піддається серіалізації; по-друге, вони неявно визначають фазу складання, коли всі дані, які будуть використовуватися представленням даних, збираються та розміщуються в DTO перед поверненням управління до рівня представлення.
Отже, для багатьох людей DTO і VO - це одне і те ж (але Фоулер використовує VO для того, щоб означати щось інше, як ми бачили). Здебільшого вони дотримуються конвенцій JavaBeans і, таким чином, також є JavaBeans. І всі - POJO.
class SomeClass { public String foo;public String bar; }
всередині класу з великою кількістю складної логіки, напевно це не JavaBean, він не може бути VO, оскільки він є змінним, чи може це бути DTO? але він не орієнтований на віддалений виклик будь-якого типу. Чи може це вважатися POJO?
DTO проти VO
DTO - Об'єкти передачі даних - це просто контейнери даних, які використовуються для транспортування даних між шарами та ярусами.
Аналогія:
проста реєстраційна форма з атрибутами ім'я користувача, пароля та електронної пошти.
- Коли ця форма буде подана у файл RegistrationServlet, ви отримаєте всі атрибути від шару перегляду до бізнес-шару, де ви передасте атрибути до Java-бобів, а потім до DAO або шару збереження.
- DTO допомагає транспортувати атрибути від рівня перегляду до бізнес-рівня та, нарешті, до рівня стійкості.
DTO в основному використовувався для ефективного транспортування даних по мережі, можливо, це навіть з JVM в інший JVM.
ЗНО часто java.io.Serializable
- для передачі даних через JVM.
VO - ціннісний об’єкт [1] [2] являє собою фіксований набір даних і схожий на перерахунок Java. Ідентичність ціннісного об’єкта базується не на їхньому стані, а не на їх об'єктній ідентичності та є незмінною. Справжнім прикладом світу можуть бути Color.RED, Color.BLUE, SEX.FEMALE тощо.
POJO проти JavaBeans
[1] Java-Beanness POJO полягає в тому, що всі його приватні атрибути доступні через публічні геттери та сетери, які відповідають конвенціям JavaBeans. напр
private String foo;
public String getFoo(){...}
public void setFoo(String foo){...};
[2] JavaBeans повинен реалізувати Serializable і мати конструктор без аргументів, тоді як у POJO немає цих обмежень.
В основному,
DTO: "Об'єкти передачі даних" можуть пересуватись між окремими шарами в архітектурі програмного забезпечення.
VO: "Об'єкти цінності" містять такі об'єкти, як Integer, Money тощо.
POJO: Простий старий об'єкт Java, який не є спеціальним об'єктом.
Java Beans: вимагає, Java Class
щоб підлягає серіалізації, мати no-arg
конструктор та геттер та сетер для кожного поля
Java Beans - це не те саме, що EJB.
Специфікація JavaBeans в Java 1.0 - це спроба Sun дозволити маніпулювати об'єктами Java в IDE, схожий на VB. Існували правила, встановлені для об'єктів, які кваліфікуються як "Квасоля Java":
EJB прийшли пізніше. Вони поєднують розподілені компоненти та транзакційну модель, що працює в контейнері, який управляє потоками, об'єднанням, життєвим циклом та надає послуги. Вони далеко від Java Beans.
DTO з'явилися в контексті Java, оскільки люди з'ясували, що специфікація EJB 1.0 надто "балакана" з базою даних. Замість того, щоб робити зворотну пряму для кожного елемента даних, люди збирають їх у Java Beans оптом і відправляють їх навколо.
POJO були реакцією проти EJB.
POJO : Це файл Java (клас), який не розширює та не реалізує жоден інший файл (клас) java.
Бін : це файл Java (клас), у якому всі змінні є приватними, методи є загальнодоступними, а для доступу до змінних використовуються відповідні getters та setters.
Нормальний клас : це файл java (клас), який може складатися із загальнодоступних / приватних / за замовчуванням / захищених змінних і який може або не може поширювати чи реалізовувати інший файл Java (клас).
Перша розмова про
Нормальний клас - це означає, що будь-який клас визначає, що це звичайно в java, це означає, що ви створюєте різні типи властивостей методу тощо.
Bean - Bean - це нічого, це лише об'єкт цього конкретного класу, використовуючи цей bean, ви можете отримати доступ до свого класу java так само, як і до об'єкта. .
а після цього поговоріть про останній POJO
POJO - POJO - це клас, який не має жодних послуг, у нього є лише конструктор за замовчуванням і приватна власність, а також ця властивість для встановлення відповідних значень методів встановлення та отримання. Це коротка форма простого об'єкта Java.
різниця між значенням-об'єктом-шаблоном-передачею-шаблоном передачі даних