ได้เห็นคำถามที่คล้ายกัน:
- JavaBean และ POJO แตกต่างกันอย่างไร
- อะไรคือความแตกต่างระหว่าง POJO (Object Java แบบธรรมดาเก่า) และ DTO (Data Transfer Object)
คุณช่วยเล่าเรื่องเกี่ยวกับบริบทที่พวกเขาใช้ให้ฉันได้ไหม หรือวัตถุประสงค์ของพวกเขา?
ได้เห็นคำถามที่คล้ายกัน:
คุณช่วยเล่าเรื่องเกี่ยวกับบริบทที่พวกเขาใช้ให้ฉันได้ไหม หรือวัตถุประสงค์ของพวกเขา?
คำตอบ:
JavaBean เป็นคลาสที่ตามหลังการประชุม JavaBeans ตามที่กำหนดโดย Sun Wikipedia มีข้อสรุปที่ดีว่าJavaBeansคืออะไร:
JavaBeans เป็นส่วนประกอบซอฟต์แวร์ที่สามารถใช้ซ้ำได้สำหรับ Java ที่สามารถจัดการได้ด้วยเครื่องมือสร้าง ในทางปฏิบัติแล้วจะเป็นคลาสที่เขียนด้วยภาษาการเขียนโปรแกรม Java ที่สอดคล้องกับข้อกำหนดเฉพาะ พวกเขาจะใช้ในการห่อหุ้มวัตถุจำนวนมากเป็นวัตถุเดียว (ถั่ว) เพื่อให้พวกเขาสามารถถูกส่งผ่านเป็นวัตถุถั่วเดียวแทนที่จะเป็นวัตถุหลายบุคคล JavaBean เป็น Java Object ที่สามารถทำให้เป็นอนุกรมมีตัวสร้าง nullary และอนุญาตให้เข้าถึงคุณสมบัติโดยใช้วิธี getter และ setter
เพื่อที่จะทำหน้าที่เป็นคลาส JavaBean คลาสอ็อบเจ็กต์ต้องปฏิบัติตามข้อตกลงบางอย่างเกี่ยวกับการตั้งชื่อเมธอดการก่อสร้างและพฤติกรรม อนุสัญญาเหล่านี้ทำให้สามารถมีเครื่องมือที่สามารถใช้นำมาใช้ใหม่ทดแทนและเชื่อมต่อ JavaBeans
การประชุมที่ต้องการคือ:
- ชั้นต้องมีตัวสร้างค่าเริ่มต้นสาธารณะ สิ่งนี้ทำให้การอินสแตนซ์ง่ายภายในกรอบการแก้ไขและการเปิดใช้งาน
- คุณสมบัติคลาสต้องสามารถเข้าถึงได้โดยใช้ get, set และเมธอดอื่น ๆ (เรียกว่าเมธอด accessor และเมธอด mutator) ตามหลักการตั้งชื่อมาตรฐาน สิ่งนี้ช่วยให้การตรวจสอบอัตโนมัติและการอัปเดตสถานะถั่วง่ายขึ้นภายในเฟรมเวิร์กซึ่งส่วนใหญ่มีตัวแก้ไขที่กำหนดเองสำหรับคุณสมบัติประเภทต่างๆ
- คลาสควรเป็นแบบอนุกรม สิ่งนี้อนุญาตให้แอ็พพลิเคชันและกรอบงานสามารถบันทึกจัดเก็บและกู้คืนสถานะของ bean ในแบบที่เป็นอิสระจาก VM และแพลตฟอร์มได้อย่างน่าเชื่อถือ
เนื่องจากข้อกำหนดเหล่านี้ส่วนใหญ่จะแสดงเป็นแบบแผนแทนที่จะใช้ส่วนต่อประสานนักพัฒนาบางคนมองว่า JavaBeans เป็นวัตถุ Java แบบธรรมดาแบบเก่าที่ตามหลักการตั้งชื่อแบบเฉพาะ
Plain Old Object Java หรือ POJO เป็นคำที่เริ่มต้นในการกำหนดวัตถุ Java น้ำหนักเบาอย่างง่ายไม่ได้ใช้javax.ejb
อินเตอร์เฟซใด ๆเมื่อเทียบกับ EJB 2.x เฮฟวี่เวท (โดยเฉพาะ Entity Beans, เซสชันไร้สัญชาติถั่วไม่ IMO แย่) วันนี้คำนี้ใช้สำหรับวัตถุอย่างง่าย ๆ ที่ไม่มีสิ่งใดพิเศษ อีกครั้ง Wikipedia ทำงานได้ดีในการกำหนดPOJO :
POJO เป็นตัวย่อสำหรับวัตถุ Java เก่าธรรมดา ชื่อนี้ใช้เพื่อเน้นว่าวัตถุที่เป็นปัญหานั้นเป็น Java Object ธรรมดาไม่ใช่วัตถุพิเศษและโดยเฉพาะอย่างยิ่งไม่ใช่ Enterprise JavaBean (โดยเฉพาะก่อน EJB 3) คำประกาศเกียรติคุณจาก Martin Fowler, Rebecca Parsons และ Josh MacKenzie ในเดือนกันยายน 2000:
"เราสงสัยว่าทำไมผู้คนถึงต่อต้านการใช้วัตถุปกติในระบบของพวกเขาและสรุปว่ามันเป็นเพราะวัตถุธรรมดา ๆ ไม่มีชื่อแฟนซีดังนั้นเราจึงให้พวกเขาหนึ่งและมันก็จับได้อย่างดี"
คำนี้ยังคงรูปแบบของคำศัพท์ที่เก่ากว่าสำหรับเทคโนโลยีที่ไม่ได้ใช้คุณสมบัติใหม่ที่แปลกใหม่เช่น POTS (บริการโทรศัพท์เก่าธรรมดา) ในโทรศัพท์และ PODS (โครงสร้างข้อมูลเก่าธรรมดา) ที่กำหนดไว้ใน C ++ แต่ใช้เฉพาะภาษา C เท่านั้น และ POD (เอกสารเก่าธรรมดา) ใน Perl
คำนี้มีแนวโน้มที่จะได้รับการยอมรับอย่างกว้างขวางเนื่องจากความต้องการคำทั่วไปและเข้าใจได้ง่ายซึ่งขัดแย้งกับกรอบวัตถุที่ซับซ้อน JavaBean เป็น POJO ที่สามารถทำให้เป็นอนุกรมมีตัวสร้างแบบไม่มีอาร์กิวเมนต์และอนุญาตให้เข้าถึงคุณสมบัติโดยใช้วิธี getter และ setter Enterprise JavaBean ไม่ใช่คลาสเดียว แต่เป็นโมเดลส่วนประกอบทั้งหมด (อีกครั้ง EJB 3 จะลดความซับซ้อนของ Enterprise JavaBeans)
เมื่อการออกแบบที่ใช้ POJO กลายเป็นสิ่งที่ใช้กันอย่างแพร่หลายระบบได้เกิดขึ้นที่ให้ POJO ฟังก์ชั่นบางอย่างที่ใช้ในเฟรมเวิร์กและทางเลือกอื่น ๆ Hibernate และ Spring เป็นตัวอย่าง
Value Object หรือ VO เป็นวัตถุเช่นjava.lang.Integer
นั้นถือค่า (วัตถุค่าดังนั้น) สำหรับคำจำกัดความที่เป็นทางการมากขึ้นฉันมักจะอ้างถึงคำอธิบายของValue Objectของ Martin Fowler :
ในรูปแบบของสถาปัตยกรรมแอปพลิเคชันองค์กรฉันอธิบายถึงวัตถุค่าเป็นวัตถุขนาดเล็กเช่นเงินหรือวัตถุช่วงวันที่ คุณสมบัติที่สำคัญของพวกเขาคือพวกเขาปฏิบัติตามค่าความหมายมากกว่าการอ้างอิงความหมาย
โดยปกติคุณสามารถบอกพวกเขาได้เพราะแนวคิดเรื่องความเท่าเทียมไม่ได้ขึ้นอยู่กับตัวตน แต่วัตถุค่าสองค่าเท่ากันถ้าเขตข้อมูลทั้งหมดเท่ากัน แม้ว่าเขตข้อมูลทั้งหมดจะเท่ากัน แต่คุณไม่จำเป็นต้องเปรียบเทียบทุกเขตข้อมูลหากชุดย่อยไม่ซ้ำกัน - เช่นรหัสสกุลเงินสำหรับวัตถุสกุลเงินก็เพียงพอที่จะทดสอบความเท่าเทียมกัน
ฮิวริสติกทั่วไปคือวัตถุที่มีคุณค่าควรจะไม่เปลี่ยนรูปแบบโดยสิ้นเชิง หากคุณต้องการเปลี่ยนวัตถุค่าคุณควรแทนที่วัตถุด้วยวัตถุใหม่และไม่ได้รับอนุญาตให้อัปเดตค่าของวัตถุค่าเอง - วัตถุค่าที่อัพเดตได้นำไปสู่ปัญหานามแฝง
วรรณกรรม J2EE ช่วงต้นใช้วัตถุคุณค่าในระยะที่จะอธิบายความคิดที่แตกต่างกันสิ่งที่ผมเรียกวัตถุการถ่ายโอนข้อมูล พวกเขาเปลี่ยนการใช้งานและใช้คำว่าTransfer Objectแทน
คุณสามารถค้นหาบางวัสดุที่ดีมากขึ้นบนวัตถุที่คุ้มค่าในวิกิพีเดีย และเดิร์ค Riehle
Data Transfer Object หรือ DTO เป็นรูปแบบ (ต่อต้าน) ที่รู้จักกับ EJB แทนที่จะทำการเรียกระยะไกลจำนวนมากบน EJB แนวคิดก็เพื่อห่อหุ้มข้อมูลในวัตถุค่าที่สามารถถ่ายโอนผ่านเครือข่าย: วัตถุการถ่ายโอนข้อมูล Wikipedia มีคำจำกัดความที่ดีของData Transfer Object :
Data transfer object (DTO) เดิมชื่อ value objects หรือ VO เป็นรูปแบบการออกแบบที่ใช้ในการถ่ายโอนข้อมูลระหว่างระบบย่อยของแอปพลิเคชันซอฟต์แวร์ DTO มักใช้ร่วมกับ data access objects เพื่อดึงข้อมูลจากฐานข้อมูล
ความแตกต่างระหว่างวัตถุการถ่ายโอนข้อมูลและวัตถุธุรกิจหรือวัตถุการเข้าถึงข้อมูลคือ DTO ไม่มีพฤติกรรมใด ๆ ยกเว้นการจัดเก็บและการดึงข้อมูลของตัวเอง (accessors และ mutators)
ในสถาปัตยกรรม EJB แบบดั้งเดิม DTO ให้บริการวัตถุประสงค์ที่สอง: อันดับแรกพวกเขาแก้ไขปัญหาที่เอนทิตีถั่วไม่ได้ต่อเนื่องกัน วินาทีพวกเขากำหนดเฟสแอสเซมบลีโดยนัยซึ่งข้อมูลทั้งหมดที่จะใช้โดยมุมมองถูกดึงและ marshalled เข้าไปใน DTOs ก่อนที่จะกลับการควบคุมไปยังระดับการนำเสนอ
ดังนั้นสำหรับคนจำนวนมาก DTO และ VO นั้นเป็นสิ่งเดียวกัน (แต่ Fowler ใช้ VO เพื่อหมายถึงสิ่งอื่นที่เราเห็น) เวลาส่วนใหญ่พวกเขาปฏิบัติตามอนุสัญญา JavaBeans และทำให้ JavaBeans เกินไป และทั้งหมดคือ POJOs
class SomeClass { public String foo;public String bar; }
ภายในคลาสที่มีตรรกะที่ซับซ้อนจำนวนมากแน่นอนว่าไม่ใช่ JavaBean มันไม่สามารถเป็น VO ได้เนื่องจากมันไม่แน่นอน DTO? altought มันไม่ได้มีการกำหนดเป้าหมายสำหรับการเรียกใช้จากระยะไกลทุกประเภท มันอาจจะถือเป็น POJO หรือไม่?
DTO กับ VO
DTO -วัตถุการถ่ายโอนข้อมูลเป็นเพียงภาชนะข้อมูลที่ใช้ในการขนส่งข้อมูลระหว่างชั้นและชั้น
คล้ายคลึง:
แบบฟอร์มการลงทะเบียนง่ายพร้อมชื่อผู้ใช้แอตทริบิวต์รหัสผ่านและอีเมล
- เมื่อส่งแบบฟอร์มนี้ในไฟล์ RegistrationServlet คุณจะได้รับคุณลักษณะทั้งหมดจากมุมมองเลเยอร์ไปยังชั้นธุรกิจที่คุณผ่านแอททริบิวไปยังจาวาถั่วแล้วไปยัง DAO หรือเลเยอร์คงอยู่
- DTO ช่วยในการขนส่งคุณลักษณะจากมุมมองเลเยอร์ไปยังชั้นธุรกิจและในที่สุดก็ไปยังชั้นการคงอยู่
DTO ส่วนใหญ่ใช้เพื่อรับส่งข้อมูลข้ามเครือข่ายได้อย่างมีประสิทธิภาพอาจจะเป็นจาก JVM ไปยัง JVM อื่น
บ่อยครั้งที่ DTOs java.io.Serializable
- เพื่อถ่ายโอนข้อมูลข้าม JVM
VO -วัตถุที่มีค่า [1] [2] หมายถึงชุดข้อมูลที่แน่นอนและคล้ายกับ Java enum เอกลักษณ์ของค่าวัตถุขึ้นอยู่กับสถานะของพวกเขามากกว่าตัวตนของวัตถุและไม่เปลี่ยนรูป ตัวอย่างในโลกแห่งความเป็นจริงจะเป็น Color.RED, Color.BLUE, SEX.FEMALE เป็นต้น
POJO กับ JavaBeans
[1] Java-Beanness ของ POJO คือแอททริบิวต์ส่วนตัวเข้าถึงได้ทั้งหมดผ่าน public getters และ setters ที่สอดคล้องกับระเบียบ JavaBeans เช่น
private String foo;
public String getFoo(){...}
public void setFoo(String foo){...};
[2] JavaBeans ต้องใช้งาน Serializable ได้และไม่มี Constructor ในขณะที่ POJO ไม่มีข้อ จำกัด เหล่านี้
โดยทั่วไป
DTO: "วัตถุการถ่ายโอนข้อมูล" สามารถเดินทางระหว่างเลเยอร์แยกในสถาปัตยกรรมซอฟต์แวร์
VO: "วัตถุค่า" ถือวัตถุเช่นจำนวนเต็มเงิน ฯลฯ
POJO: วัตถุ Java เก่าธรรมดาซึ่งไม่ใช่วัตถุพิเศษ
Java Beans: ต้องการJava Class
ให้เป็นแบบอนุกรม, มีno-arg
Constructor และ Getter และ Setter สำหรับแต่ละฟิลด์
Java Beans นั้นไม่เหมือนกับ EJB
ข้อกำหนด JavaBeansใน Java 1.0 เป็นความพยายามของดวงอาทิตย์ที่จะอนุญาตให้วัตถุ Java ที่จะจัดการใน IDE ที่ดูเหมือน VB มีกฎที่วางไว้สำหรับวัตถุที่ผ่านการรับรองเป็น "Java Beans":
EJB มาในภายหลัง พวกเขารวมองค์ประกอบกระจายและรูปแบบของทรานแซคชันทำงานในภาชนะบรรจุที่จัดการหัวข้อการรวมกำไรวงจรชีวิตและให้บริการ พวกเขาเป็นหนทางไกลจาก Java Beans
DTOs เกิดขึ้นในบริบทของ Java เพราะผู้คนพบว่าข้อมูลจำเพาะ EJB 1.0 นั้น "ช่างพูด" เกินไปกับฐานข้อมูล แทนที่จะทำการส่งแบบไปกลับสำหรับองค์ประกอบข้อมูลทุกคนผู้คนจะจัดเก็บข้อมูลเหล่านั้นลงใน Java Beans เป็นกลุ่มและจัดส่งไปทั่ว
POJO เป็นปฏิกิริยาต่อ EJB
POJO : เป็นไฟล์ java (คลาส) ซึ่งไม่ขยายหรือใช้ไฟล์ java อื่น (คลาส)
Bean : มันเป็นไฟล์ java (คลาส) ซึ่งตัวแปรทั้งหมดเป็นส่วนตัววิธีการเป็นสาธารณะและได้รับที่เหมาะสมและ setters จะใช้สำหรับการเข้าถึงตัวแปร
คลาสปกติ : เป็นไฟล์ java (คลาส) ซึ่งอาจประกอบด้วยตัวแปรสาธารณะ / ส่วนตัว / ค่าเริ่มต้น / ที่ได้รับการป้องกันและอาจขยายหรือใช้ไฟล์ java อื่น (คลาส) ได้หรือไม่
พูดคุยครั้งแรกเกี่ยวกับ
Normal Class -นั่นหมายถึงคลาสใด ๆ ที่ปกติแล้วในจาวานั่นหมายถึงคุณสร้างคุณสมบัติเมธอดที่แตกต่างกันเป็นต้น
Bean - Bean ไม่ได้เป็นเพียงวัตถุของคลาสนั้นโดยใช้ bean นี้คุณสามารถเข้าถึงคลาสจาวาของคุณได้เช่นเดียวกับวัตถุ .
และหลังจากนั้นพูดคุยเกี่ยวกับ POJO อันสุดท้าย
POJO - POJOเป็นคลาสที่ไม่มีบริการใด ๆ มันมีเพียงคอนสตรัคเตอร์เริ่มต้นและคุณสมบัติส่วนตัวและคุณสมบัติเหล่านั้นสำหรับการตั้งค่าเมธอด setter และ getter ที่สอดคล้องกัน มันเป็นรูปแบบสั้น ๆ ของวัตถุ Java ธรรมดา
ความแตกต่างระหว่างมูลค่าวัตถุรูปแบบและการถ่ายโอนข้อมูลรูปแบบ