Widziałem kilka podobnych pytań:
- Jaka jest różnica między JavaBean a POJO?
- Jaka jest różnica między POJO (Plain Old Java Object) a DTO (Data Transfer Object)?
Czy możesz mi również powiedzieć, w jakich kontekstach są używane? A może ich cel?
Widziałem kilka podobnych pytań:
Czy możesz mi również powiedzieć, w jakich kontekstach są używane? A może ich cel?
Odpowiedzi:
JavaBean to klasa zgodna z konwencjami JavaBeans zdefiniowanymi przez Sun. Wikipedia ma całkiem dobre podsumowanie, czym są JavaBeans :
JavaBeans to komponenty oprogramowania wielokrotnego użytku dla Java, które można wizualnie manipulować w narzędziu do budowania. Praktycznie są to klasy napisane w języku programowania Java zgodnie z określoną konwencją. Służą do kapsułkowania wielu obiektów w jednym obiekcie (fasoli), dzięki czemu można je przekazywać jako obiekt jednej fasoli zamiast wielu pojedynczych obiektów. JavaBean to obiekt Java, który można serializować, ma konstruktor zerowy i umożliwia dostęp do właściwości za pomocą metod pobierających i ustawiających.
Aby funkcjonować jako klasa JavaBean, klasa obiektowa musi przestrzegać pewnych konwencji dotyczących nazewnictwa, budowy i zachowania metod. Konwencje te umożliwiają korzystanie z narzędzi, które mogą używać, ponownie wykorzystywać, zastępować i łączyć komponenty JavaBeans.
Wymagane konwencje to:
- Klasa musi mieć domyślny konstruktor publiczny. Umożliwia to łatwe tworzenie instancji w ramach do edycji i aktywacji.
- Właściwości klasy muszą być dostępne przy użyciu metod get, set i innych (tak zwane metody akcesora i metody mutatora), zgodnie ze standardową konwencją nazewnictwa. Umożliwia to łatwą automatyczną kontrolę i aktualizację stanu komponentu w ramach, z których wiele zawiera niestandardowe edytory dla różnych typów właściwości.
- Klasa powinna być serializowalna. Pozwala to aplikacjom i platformom na niezawodne zapisywanie, przechowywanie i przywracanie stanu komponentu bean w sposób niezależny od maszyny wirtualnej i platformy.
Ponieważ wymagania te są w dużej mierze wyrażone jako konwencje, a nie przez implementację interfejsów, niektórzy programiści postrzegają komponenty JavaBeans jako zwykłe stare obiekty Java zgodne z określonymi konwencjami nazewnictwa.
Zwykły stary obiekt Java lub POJO to termin początkowo wprowadzony w celu oznaczenia prostego lekkiego obiektu Java, nie implementującego żadnego javax.ejb
interfejsu, w przeciwieństwie do ciężkiego EJB 2.x (szczególnie Fasola Entity, Stateless Session Beans nie są aż tak złe IMO). Dziś termin ten jest używany dla każdego prostego obiektu bez dodatkowych rzeczy. Ponownie Wikipedia wykonuje dobrą robotę w definiowaniu POJO :
POJO to skrót od Plain Old Java Object. Nazwa służy do podkreślenia, że przedmiotowy obiekt to zwykły obiekt Java, a nie obiekt specjalny, a w szczególności nie Enterprise JavaBean (zwłaszcza przed EJB 3). Termin został wymyślony przez Martina Fowlera, Rebeccę Parsons i Josha MacKenzie we wrześniu 2000 r .:
„Zastanawialiśmy się, dlaczego ludzie są tak przeciwni używaniu zwykłych obiektów w swoich systemach, i doszliśmy do wniosku, że dzieje się tak, ponieważ proste obiekty nie mają fantazyjnej nazwy. Więc daliśmy im jedną i jest bardzo ładna”.
Termin ten kontynuuje wzór starszych terminów dla technologii, które nie wykorzystują wymyślnych nowych funkcji, takich jak POTS (zwykła stara usługa telefoniczna) w telefonii i PODS (zwykłe stare struktury danych), które są zdefiniowane w C ++, ale używają tylko funkcji języka C, i POD (Plain Old Documentation) w Perlu.
Termin najprawdopodobniej zyskał powszechną akceptację ze względu na potrzebę wspólnego i łatwego do zrozumienia terminu, który kontrastuje ze skomplikowanymi ramami obiektowymi. JavaBean to POJO, który można serializować, ma konstruktor bez argumentów i umożliwia dostęp do właściwości za pomocą metod pobierających i ustawiających. Enterprise JavaBean nie jest pojedynczą klasą, ale całym modelem komponentów (ponownie, EJB 3 zmniejsza złożoność Enterprise JavaBeans).
Ponieważ projekty wykorzystujące POJO stały się coraz bardziej popularne, pojawiły się systemy, które dają POJO niektóre funkcje używane w ramach i dają większy wybór, które obszary funkcjonalności są rzeczywiście potrzebne. Hibernacja i Wiosna to przykłady.
Obiekt wartości lub VO to obiekt taki jak te, java.lang.Integer
które przechowują wartości (stąd obiekty wartości). Aby uzyskać bardziej formalną definicję, często odwołuję się do opisu obiektu wartości : Martin Fowler :
W Patterns of Enterprise Application Architecture opisałem Value Object jako mały obiekt, taki jak Money lub obiekt zakresu dat. Ich kluczową właściwością jest to, że stosują semantykę wartości zamiast semantyki odniesienia.
Zwykle możesz im powiedzieć, ponieważ ich pojęcie równości nie jest oparte na tożsamości, zamiast tego dwa obiekty wartości są równe, jeśli wszystkie ich pola są równe. Chociaż wszystkie pola są równe, nie trzeba porównywać wszystkich pól, jeśli podzbiór jest unikalny - na przykład kody walut dla obiektów walutowych wystarczą do przetestowania równości.
Ogólna heurystyka polega na tym, że obiekty wartości powinny być całkowicie niezmienne. Jeśli chcesz zmienić obiekt wartości, powinieneś go zastąpić nowym i nie możesz aktualizować wartości samego obiektu wartości - obiekty z możliwością aktualizacji prowadzą do problemów z aliasingiem.
Wczesna literatura J2EE używała terminu wartość obiekt do opisania innego pojęcia, które nazywam Obiektem Transferu Danych . Od tego czasu zmienili swoje użycie i zamiast tego używają terminu Obiekt transferu .
Więcej dobrych materiałów na temat przedmiotów wartościowych można znaleźć na wiki i przez Dirka Riehle'a .
Obiekt transferu danych lub DTO to (anty) wzór wprowadzony w EJB. Zamiast wykonywać wiele zdalnych wywołań w EJB, pomysł polegał na kapsułkowaniu danych w obiekcie wartości, który można było przesyłać przez sieć: Obiekt przesyłania danych. Wikipedia ma przyzwoitą definicję obiektu do przesyłania danych :
Obiekt przesyłania danych (DTO), wcześniej znany jako obiekty wartości lub VO, to wzorzec projektowy używany do przesyłania danych między podsystemami aplikacji. DTO są często używane w połączeniu z obiektami dostępu do danych w celu pobierania danych z bazy danych.
Różnica między obiektami do przesyłania danych a obiektami biznesowymi lub obiektami dostępu do danych polega na tym, że DTO nie zachowuje się poza przechowywaniem i odzyskiwaniem własnych danych (akcesoriów i mutatorów).
W tradycyjnej architekturze EJB DTO służą dwóm celom: po pierwsze, rozwiązują problem polegający na tym, że komponenty bean nie są serializowane; po drugie, domyślnie definiują fazę montażu, w której wszystkie dane, które mają być użyte w widoku, są pobierane i wprowadzane do DTO przed przywróceniem kontroli do warstwy prezentacji.
Tak więc dla wielu osób DTO i VO są tym samym (ale Fowler używa VO w znaczeniu czegoś innego, jak widzieliśmy). Przez większość czasu przestrzegają konwencji JavaBeans, a zatem są również JavaBeans. I wszystkie są POJO.
class SomeClass { public String foo;public String bar; }
wewnątrz klasy z dużą ilością skomplikowanej logiki, na pewno nie jest to JavaBean, nie może to być VO, ponieważ jest zmienne, czy może to być DTO? Uważa się jednak, że nie jest on przeznaczony do wszelkiego rodzaju zdalnych wywołań. Czy można to uznać za POJO?
DTO vs VO
DTO - Obiekty do przesyłania danych to tylko kontenery danych, które służą do transportu danych między warstwami i warstwami.
Analogia:
prosty formularz rejestracyjny z atrybutami nazwa użytkownika, hasło i identyfikator e-mail.
- Gdy ten formularz zostanie przesłany w pliku RegistrationServlet, otrzymasz wszystkie atrybuty z warstwy widoku do warstwy biznesowej, gdzie przekazujesz atrybuty do java bean, a następnie do DAO lub warstwy trwałości.
- DTO pomaga w przenoszeniu atrybutów z warstwy widoku do warstwy biznesowej i wreszcie do warstwy trwałości.
DTO służyło głównie do wydajnego przesyłania danych w sieci, może to być nawet z JVM do innego JVM.
DTO są często java.io.Serializable
- w celu przesyłania danych przez JVM.
VO - Obiekt wartości [1] [2] reprezentuje stały zestaw danych i jest podobny do wyliczenia Java. Tożsamość obiektu wartości opiera się raczej na jego stanie niż na tożsamości obiektu i jest niezmienna. Przykładem w świecie rzeczywistym jest Color.RED, Color.BLUE, SEX.FEMALE itp.
POJO vs JavaBeans
[1] Java-Beanness POJO polega na tym, że wszystkie jego prywatne atrybuty są dostępne za pośrednictwem publicznych programów pobierających i ustawiających, które są zgodne z konwencjami JavaBeans. na przykład
private String foo;
public String getFoo(){...}
public void setFoo(String foo){...};
[2] JavaBeans musi implementować Serializable i mieć konstruktor bez argumentów, podczas gdy w POJO nie ma tych ograniczeń.
Gruntownie,
DTO: „Obiekty przesyłania danych” mogą przemieszczać się między oddzielnymi warstwami w architekturze oprogramowania.
Lektor: „Obiekty wartości” przechowują obiekty takie jak liczba całkowita, pieniądze itp.
POJO: Plain Old Java Object, który nie jest obiektem specjalnym.
Java Beans: wymaga Java Class
możliwości serializacji, posiadania no-arg
konstruktora oraz metody pobierającej i ustawiającej dla każdego pola
Ziarna Java to nie to samo, co komponenty EJB.
Specyfikacja JavaBeans w Javie 1.0 była próbą Sun pozwalającą na manipulowanie obiektami Java w środowisku IDE, które wyglądało jak VB. Dla obiektów zakwalifikowanych jako „Java Beans” określono zasady:
EJB przyszły później. Łączą rozproszone komponenty i model transakcyjny, działając w kontenerze, który zarządza wątkami, pula, cykl życia i świadczy usługi. Są dalekie od Java Beans.
DTO powstały w kontekście Java, ponieważ ludzie odkryli, że specyfikacja EJB 1.0 była zbyt „gadatliwa” z bazą danych. Zamiast obchodzić każdy element danych, ludzie pakowaliby je masowo do komponentów Java Beans i wysyłali.
POJO były reakcją na EJB.
POJO : Jest to plik (klasa) java, który nie rozszerza ani nie implementuje żadnego innego pliku (klasy) java.
Fasola : jest to plik java (klasa), w którym wszystkie zmienne są prywatne, metody są publiczne, a do uzyskiwania dostępu do zmiennych używane są odpowiednie metody pobierające i ustawiające.
Normalna klasa : jest to plik java (klasa), który może składać się ze zmiennych publicznych / prywatnych / domyślnych / chronionych i który może, ale nie musi, rozszerzyć lub zaimplementować inny plik java (klasa).
Pierwsza rozmowa o
Normalna klasa - oznacza to, że każda klasa definiuje normalnie w Javie, oznacza to, że tworzysz różne właściwości metod itp.
Fasola - Fasola to nic innego, to tylko obiekt tej konkretnej klasy. Za pomocą tej fasoli możesz uzyskać dostęp do swojej klasy Java tak samo jak obiekt. .
a potem rozmowa o ostatnim POJO
POJO - POJO to klasa, która nie ma żadnych usług, ma tylko domyślny konstruktor i własność prywatną oraz te właściwości do ustawiania odpowiadającej wartości metody ustawiającej i pobierającej. To krótka forma Plain Java Object.
różnica między wartością wzorzec-obiekt-wzorzec i wzorzec transferu danych