Java ORM ใดที่คุณชอบและเพราะอะไร [ปิด]


262

มันเป็นคำถามที่เปิดกว้าง ฉันจะเริ่มต้นโครงการใหม่และกำลังมองหา ORM ที่แตกต่างกันเพื่อรวมเข้ากับการเข้าถึงฐานข้อมูล

คุณมีรายการโปรดหรือไม่? มีผู้ใดแนะนำให้คุณพักอย่างชัดเจน?


2
ดูคำถามที่เกี่ยวข้องที่สำคัญเหล่านี้: stackoverflow.com/questions/494816/using-an-orm-or-plain-sql/... stackoverflow.com/questions/716532/...
ripper234

ดู micro-orms - wrappers เล็ก ๆ รอบ ๆ เทคโนโลยีการเข้าถึง DB ของแพลตฟอร์ม - เช่น sql2o สำหรับ Java github.com/aaberg/sql2o หรือ ServiceStack.OrmLite สำหรับ. NET github.com/ServiceStack/ServiceStack/ServiceStack.OrmLite
tomaszkubacki

3
หลังจากใช้ ORM มานานกว่า 5 ปีตัวเลือกส่วนบุคคลของฉันคือ Spring JDBC เหนือ ORM และอันดับที่สองที่ดีที่สุดคือ iBatis (MyBatis) ฉันไม่ชอบโหมดไฮเบอร์เนตเนื่องจากเส้นโค้งการเรียนรู้การควบคุมน้อยลงและปัญหาด้านประสิทธิภาพ

นี่คือรายการ (ปิด) ของตัวห่อ jdbc น้ำหนักเบาที่สามารถใช้เป็นทางเลือกแทน orms แบบเต็มเป่า: stackoverflow.com/questions/7137929/…
Vadzim

คำตอบ:


237

ฉันหยุดใช้ ORM แล้ว

เหตุผลไม่ได้เป็นข้อบกพร่องที่ดีในแนวคิด ไฮเบอร์เนตทำงานได้ดี แต่ฉันพบว่าแบบสอบถามมีค่าใช้จ่ายต่ำและฉันสามารถใส่ตรรกะที่ซับซ้อนจำนวนมากให้เป็นแบบสอบถาม SQL ขนาดใหญ่ได้และเปลี่ยนการประมวลผลจำนวนมากของฉันไปยังฐานข้อมูล

ดังนั้นให้พิจารณาใช้แพ็คเกจ JDBC


81
มันเป็นเรื่องเดียวกันซ้ำแล้วซ้ำอีกด้วย ORM: การพัฒนาเริ่มต้นที่รวดเร็วและแหล่งข้อมูลขนาดใหญ่ของคุณเพิ่มเติมในโครงการเมื่อติดตามข้อบกพร่อง ORM ที่เกี่ยวข้องและความไร้ประสิทธิภาพ ฉันเกลียดความจริงที่ว่ามันทำให้ผู้พัฒนาคิดว่าพวกเขาไม่จำเป็นต้องเขียนข้อความค้นหาที่เหมาะสมที่สุด
Eelco

7
เฮ้นี่เป็นความจริงทั้งหมดสำหรับโครงการชีวิตจริงขนาดใหญ่หรือไม่?
santiagobasulto

30
ฉันเห็นด้วย. ฉันใช้ ORM มานานกว่า 3 ปีแล้วและฉันไม่สามารถบอกได้ว่าเสียเวลาเท่าไร (ยังคงเป็น) เพื่อแก้ไขปัญหาที่เกี่ยวข้องกับการคงอยู่ เราไม่สามารถควบคุมสิ่งใดก็ตามที่เกี่ยวกับสิ่งที่เกิดขึ้น "ภายใต้ประทุน" การกำหนดค่ามีมากเกินไปที่จะจัดการได้อย่างมีประสิทธิภาพและมีพฤติกรรมที่สามารถผลักดันคนบ้าได้ ในขณะที่ฉันมีการสนับสนุนฐานข้อมูลที่สำคัญและไม่ต้องกังวลกับความแตกต่าง
marcolopes

58
ทำไมไม่ใช้ทั้งสองขึ้นอยู่กับความซับซ้อนของแบบสอบถาม / การทำธุรกรรม? มันไม่เหมือนที่พวกเขาเป็นเอกสิทธิ์เฉพาะบุคคล
สัตว์สะเทินน้ำสะเทินบก

6
@ WillSheppard ใช่จะ ฉันใช้ Django ORM ค่อนข้างมากและใช้งานได้ดี ฉันคิดว่าความแตกต่างอาจอยู่ในธรรมชาติของ python (และ Perl) การใช้ ORM ใน Java เป็นความเจ็บปวด แต่ในภาษาไดนามิกมันสามารถแสดงออกได้จริงๆ มีบางโครงการที่ยอดเยี่ยมในการฝังการดำเนินงาน ORM เช่น DSL ใน Python และยอดเยี่ยม
santiagobasulto

97

ไม่มีเนื่องจากการใช้ ORM จะควบคุมได้มากเกินไปพร้อมกับผลประโยชน์เล็ก ๆ น้อย ๆ ประหยัดเวลาได้อย่างง่ายดายเมื่อคุณต้องแก้ไขข้อบกพร่องที่เกิดจากการใช้ ORM นอกจากนี้ ORMs ยังกีดกันนักพัฒนาจากการเรียนรู้ SQL และวิธีการทำงานของฐานข้อมูลเชิงสัมพันธ์และการใช้สิ่งนี้เพื่อประโยชน์ของพวกเขา


4
ฉันเห็นด้วยกับคำสั่งนี้ เท่าไหร่จากเวลาในการพัฒนาทั้งหมดจะถูกใช้โดยการเขียนรหัสการติดตา? ฉันคิดว่าน้อยกว่า 10-15%
adrian.tarau

16
มันขึ้นอยู่กับ. แน่นอนว่าถ้าคุณใช้ฐานข้อมูลประเภทใดประเภทหนึ่งเป็นเรื่องง่ายที่จะไม่ต้องใช้ ORM อย่างไรก็ตามเมื่อคุณต้องการสนับสนุนฐานข้อมูลประเภทอื่น ๆ ก็สามารถจัดการได้อย่างรวดเร็วน้อยลง
Jason Baker

3
"การประหยัดเวลาที่ได้รับจะถูกพัดหายไปอย่างง่ายดายเมื่อคุณต้องแก้ไขข้อผิดพลาดที่เกิดจากการใช้ ORM" สิ่งนี้ไม่เป็นจริงเมื่อเส้นโค้งทักษะเป็นปัจจัยที่เหมาะสมเมื่อเลือกเทคโนโลยี
elsadek

7
ข้อโต้แย้งของคุณอาจถูกเสนอให้ต่อต้านการใช้ห้องสมุดใด ๆ ผลกำไรที่ใหญ่ที่สุดของ ORMs คือสิ่งต่าง ๆ เช่นหน่วยงานการแมปวัตถุการติดตามการเปลี่ยนแปลงการโหลดที่ขี้เกียจการโยกย้ายและความสัมพันธ์ มันเป็นสิ่งที่ยอดเยี่ยมที่สามารถเขียน user.profile.givenName และไม่สนใจว่าโครงสร้างใดที่ใช้ในการจัดเก็บข้อมูล
อเล็กซ์

1
มันสามารถใช้กับห้องสมุดใด ๆ แต่เพื่อองศาที่แตกต่าง โดยทั่วไปฉันเป็นผู้สนับสนุนที่ดีในการใช้ห้องสมุด - ทำไมต้องคิดค้นวงล้อใหม่ อย่างไรก็ตามในกรณีนี้ฉันรู้สึกว่าไฮเบอร์เนตเหมาะสำหรับการใช้งานที่หนักมากเกินไปและ ORM ที่มีน้ำหนักเบากว่าจะเป็นที่นิยมมากกว่า ประสบการณ์ของฉันขึ้นอยู่กับประสบการณ์หลายปีในการพัฒนาด้วยไฮเบอร์เนตและการเรียนรู้อย่างลึกซึ้ง
simon

92

ORM จำนวนมากนั้นยอดเยี่ยมคุณต้องรู้ว่าทำไมคุณจึงต้องการเพิ่มสิ่งที่เป็นนามธรรมลงไปด้านบนของ JDBC ฉันสามารถแนะนำhttp://www.jooq.orgให้กับคุณ (ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้สร้าง jOOQ ดังนั้นคำตอบนี้จึงมีอคติ) jOOQ รวบรวมกระบวนทัศน์ต่อไปนี้:

  • SQL เป็นสิ่งที่ดี หลายสิ่งหลายอย่างสามารถแสดงได้ค่อนข้างดีใน SQL ไม่จำเป็นต้องมีการลดลงของ SQL ที่สมบูรณ์
  • แบบจำลองข้อมูลเชิงสัมพันธ์เป็นสิ่งที่ดี มันได้พิสูจน์รูปแบบข้อมูลที่ดีที่สุดในช่วง 40 ปีที่ผ่านมา ไม่จำเป็นสำหรับฐานข้อมูล XML หรือโมเดลข้อมูลเชิงวัตถุอย่างแท้จริง บริษัท ของคุณใช้ Oracle, MySQL, MSSQL, DB2 หรือ RDBMS อื่นแทน
  • SQL มีโครงสร้างและไวยากรณ์ ไม่ควรแสดงโดยใช้การต่อสตริง "ระดับต่ำ" ใน JDBC - หรือการเชื่อมต่อสตริง "ระดับสูง" ใน HQL ซึ่งทั้งคู่มีแนวโน้มที่จะมีข้อผิดพลาดทางไวยากรณ์
  • การรวมตัวแปรมีแนวโน้มที่จะซับซ้อนมากเมื่อจัดการกับคิวรีที่สำคัญ นั่นคือสิ่งที่ควรจะเป็นนามธรรม
  • POJO นั้นยอดเยี่ยมเมื่อเขียนโค้ด Java ที่จัดการข้อมูลฐานข้อมูล
  • POJO เป็นความเจ็บปวดในการเขียนและบำรุงรักษาด้วยตนเอง การสร้างรหัสเป็นวิธีที่จะไป คุณจะมีการสืบค้นที่ปลอดภัยรวมถึงการรวบรวมข้อมูลประเภท
  • ฐานข้อมูลมาก่อน ในขณะที่แอปพลิเคชันด้านบนของฐานข้อมูลของคุณอาจมีการเปลี่ยนแปลงเมื่อเวลาผ่านไปฐานข้อมูลอาจจะคงอยู่นานกว่าเดิม
  • ใช่คุณมีขั้นตอนการจัดเก็บและประเภทที่ผู้ใช้กำหนด (UDT) ในฐานข้อมูลดั้งเดิมของคุณ เครื่องมือฐานข้อมูลของคุณควรสนับสนุน

มี ORM ที่ดีอื่น ๆ อีกมากมาย โดยเฉพาะอย่างยิ่งไฮเบอร์เนตหรือ iBATIS มีชุมชนที่ยอดเยี่ยม แต่ถ้าคุณกำลังมองหาสิ่งที่เข้าใจง่ายและเรียบง่ายฉันจะบอกว่าลอง jOOQ คุณจะรักมัน! :-)

ลองดูตัวอย่าง SQL นี้:

  // Select authors with books that are sold out
  SELECT * 
    FROM T_AUTHOR a
   WHERE EXISTS (SELECT 1
                   FROM T_BOOK
                  WHERE T_BOOK.STATUS = 'SOLD OUT'
                    AND T_BOOK.AUTHOR_ID = a.ID);

และวิธีสามารถแสดงใน jOOQ:

  // Alias the author table
  TAuthor a = T_AUTHOR.as("a");

  // Use the aliased table in the select statement
  create.selectFrom(a)
        .whereExists(create.selectOne()
                           .from(T_BOOK)
                           .where(T_BOOK.STATUS.equal(TBookStatus.SOLD_OUT)
                           .and(T_BOOK.AUTHOR_ID.equal(a.ID))))));

1
เครื่องมือ ORM นั้นยอดเยี่ยมพอ ๆ กับที่คุณจัดการให้ใช้อย่างถูกต้อง มีโครงการที่เครื่องมือ ORM ทำงานได้อย่างมีเสน่ห์ในขณะที่โครงการอื่น ๆ พวกเขาไม่เข้ากันได้ดี ในท้ายที่สุดมันเป็นความรับผิดชอบของทีมพัฒนาในการเลือกเครื่องมือที่เหมาะสมสำหรับความต้องการของโครงการ เครื่องมือ ORM นั้นซับซ้อน น่าเสียดายที่มีเพียงส่วนหนึ่งของนักพัฒนาทั้งหมดที่จะใช้เวลาในการทำความเข้าใจวิธีการทำงานของพวกเขา ที่เหลือก็แค่ตำหนิเครื่องมือและบอกว่ามันแย่ คำถามคือ: คำตอบที่ upvoted ที่สุดเสนอคำแนะนำที่ดีที่สุดหรือไม่? > ดังนั้นให้พิจารณาใช้แพ็คเกจ JDBC เราต้องการใช้ JDBC ธรรมดาหรือไม่?
Vlad Mihalcea

ฉันพยายามอย่าให้ "ฐานข้อมูลมาก่อน" แอปพลิเคชันมีกฏทางธุรกิจสำหรับคุณสมบัติที่ลูกค้าขอและพวกเขาแทบไม่เคยขอให้สร้างฐานข้อมูล นั่นเป็นรายละเอียดทางเทคนิคที่กำหนดระหว่างการดำเนินการ
Kwebble

58

Hibernate เนื่องจากเป็นมาตรฐาน defacto ใน Java และเป็นหนึ่งในแรงผลักดันในการสร้าง JPA มันได้รับการสนับสนุนอย่างยอดเยี่ยมใน Spring และเกือบทุก Java framework รองรับ ในที่สุด GORM นั้นเป็นเสื้อคลุมที่เท่ห์มาก ๆ รอบตัวมันทำการค้นหาแบบไดนามิกและใช้ Groovy

มันถูกส่งไปยัง. NET (NHibernate) ด้วยซ้ำดังนั้นคุณจึงสามารถใช้งานได้ที่นั่นเช่นกัน


4
ฉันลงคะแนน Hib ด้วย แต่ด้วยการเพิ่มที่สำคัญ: เราควรใช้ JPA API เฉพาะในกรณีที่การใช้ JPA นั้นเป็นความจริง
Vladimir Dyuzhev

52

ไฮเบอร์เนตเพราะ:

  • เสถียร - อยู่ใกล้มาหลายปีแล้วมันไม่มีปัญหาอะไรเลย
  • กำหนดมาตรฐานในฟิลด์ ORM
  • ใช้มาตรฐาน (JPA) นอกเหนือจากการกำหนด
  • มีข้อมูลมากมายเกี่ยวกับมันบนอินเทอร์เน็ต มีแบบฝึกหัดมากมายการแก้ปัญหาที่พบบ่อย ฯลฯ
  • มีประสิทธิภาพ - คุณสามารถแปลโมเดลวัตถุที่ซับซ้อนมากเป็นโมเดลเชิงสัมพันธ์ได้
  • มีการสนับสนุน RDBMS หลักและขนาดกลางใด ๆ
  • ใช้งานง่ายเมื่อคุณเรียนรู้ได้ดี

จุดสองสามข้อเกี่ยวกับสาเหตุที่ (และเมื่อ) ใช้ ORM:

  • คุณทำงานกับวัตถุในระบบของคุณ (หากระบบของคุณได้รับการออกแบบมาอย่างดี) แม้ว่าการใช้ JDBC คุณจะสร้างเลเยอร์การแปลเพื่อให้คุณถ่ายโอนข้อมูลของคุณไปยังวัตถุของคุณ แต่การเดิมพันของฉันคือการจำศีลดีกว่าการแปลมากกว่าโซลูชันที่กำหนดเองใด ๆ
  • มันไม่ได้กีดกันคุณในการควบคุม คุณสามารถควบคุมสิ่งต่าง ๆ ในรายละเอียดเล็ก ๆ น้อย ๆ และถ้า API ไม่มีคุณสมบัติระยะไกล - ดำเนินการแบบสอบถามท้องถิ่นและคุณมีมัน
  • ระบบขนาดกลางหรือใหญ่กว่าไม่สามารถมีคิวรีได้หนึ่งตัน (ไม่ว่าจะอยู่ที่ใดที่หนึ่งหรือกระจายอยู่ทั่ว) ถ้ามันมีจุดมุ่งหมายที่จะรักษาได้
  • ถ้าประสิทธิภาพไม่สำคัญ Hibernate เพิ่มค่าใช้จ่ายด้านประสิทธิภาพซึ่งในบางกรณีไม่สามารถเพิกเฉยได้

เมื่อฉันเปรียบเทียบ Hibernate และ JPA ฉันจะไป Hibernate และหากเปรียบเทียบ JPA และ JDO ฉันจะไปที่ JDO! ฉันชอบ JDO มาก ๆ แต่ฉันชอบคุณสมบัติสองอย่างของ Hibernate (ซึ่งไม่มีใน JDO) ส่วนหนึ่งคือ @Filters และอีกอันคือคุณสามารถแมปฟิลด์รุ่น (สำหรับการล็อกในแง่ดี) ลงในฟิลด์ปกติซึ่งเป็นไปไม่ได้ใน JDO .
Amir Pashazadeh

27

ฉันจะแนะนำให้ใช้MyBatis มันเป็นเลเยอร์บางที่ด้านบนของ JDBC มันง่ายมากที่จะแมปออบเจ็กต์กับตารางและยังคงใช้ SQL ธรรมดาทุกอย่างอยู่ภายใต้การควบคุมของคุณ


10
ฟรีสำหรับการอ่านที่ซับซ้อนและจำศีลในการสร้างอัปเดตการลบและการอ่านอย่างง่ายเป็นตัวเลือกที่สมบูรณ์แบบ
darpet

19

ฉันมีประสบการณ์ที่ดีกับAvaje Ebeanเมื่อฉันกำลังเขียนแอปพลิเคชัน JavaSE ขนาดกลาง

โดยใช้การเพิ่มความคิดเห็น JPA มาตรฐานเพื่อกำหนดเอนทิตี แต่จะเปิดเผย API ที่ง่ายกว่ามาก (ไม่มีเอนทิตีผู้จัดการหรือเอนทิตีใด ๆ ที่แนบมา / ต่อพ่วง) นอกจากนี้ยังช่วยให้คุณสามารถใช้เคียวรี SQL หรือการโทร JDBC ธรรมดาเหตุการณ์ได้อย่างง่ายดายเมื่อจำเป็น

นอกจากนี้ยังมี API ที่ปลอดภัยและเป็นประเภทที่ปลอดภัยสำหรับการสืบค้น คุณสามารถเขียนสิ่งต่าง ๆ เช่น:

List<Person> boys = Ebean.find(Person.class)
                                  .where()
                                       .eq("gender", "M")
                                       .le("age", 18)
                                  .orderBy("firstName")
                                  .findList();

6
ฉันจะต้องเป็นนิด ๆ หน่อย ๆ แปลก ... เลือกจากคนที่เพศ = 'M' และอายุ <18 ได้รับคำสั่งจาก firstName ก็ดูดีขึ้นมากกับผม :-)
Eelco

4
นี่เป็นหนึ่งในจุดเริ่มต้นที่ดีกว่าที่ฉันเคยเห็นในจาวา การตัดสินใจใช้ซิงเกิลนั้นสดชื่นและทำให้ได้เปรียบในทางปฏิบัติมากกว่าคนอื่น ๆ
opsb

ฉันคิดว่าคุณหมายถึงคล่องแคล่วไม่ใช่ของเหลว
จันทร์ที่

@opsb ฉันคิดว่าในทางเทคนิคแล้วมันเป็น monostate ไม่ใช่ singleton
จันทร์ที่

วิธีเริ่มต้นใช้งาน Avaje Ebean ORM วิดีโอสอนใด ๆ ??
Avinash

11

SimpleORMเพราะมันตรงไปตรงมาและไม่มีเวทย์มนตร์ มันกำหนดโครงสร้างข้อมูลเมตาทั้งหมดในรหัส Java และมีความยืดหยุ่นมาก

SimpleORM จัดเตรียมฟังก์ชันการทำงานที่คล้ายคลึงกับ Hibernate โดยการแมปข้อมูลในฐานข้อมูลเชิงสัมพันธ์กับวัตถุ Java ในหน่วยความจำ แบบสอบถามสามารถระบุได้ในแง่ของวัตถุจาวาเอกลักษณ์ของวัตถุสอดคล้องกับฐานข้อมูลคีย์ความสัมพันธ์ระหว่างวัตถุได้รับการดูแลและวัตถุที่แก้ไขจะถูกล้างโดยอัตโนมัติไปยังฐานข้อมูลด้วยการล็อคในแง่ดี

แต่แตกต่างจาก Hibernate SimpleORM ใช้โครงสร้างวัตถุและสถาปัตยกรรมที่ง่ายมากที่หลีกเลี่ยงความจำเป็นในการแยกวิเคราะห์ที่ซับซ้อนการประมวลผลรหัสไบต์เป็นต้น SimpleORM มีขนาดเล็กและโปร่งใสบรรจุในสองขวดขนาด 79K และ 52K เพียงขนาดเล็ก การพึ่งพา (Slf4j) (ไฮเบอร์เนตมีมากกว่า 2400K บวกกับ Jars ที่ขึ้นต่อกันประมาณ 2000K) ซึ่งทำให้ SimpleORM ง่ายต่อการเข้าใจและลดความเสี่ยงด้านเทคนิคลงอย่างมาก


ยังไม่ได้ใช้ แต่ ActiveObjects อธิบายตัวเองว่าเป็น Hibernate-lite บนเว็บไซต์ของพวกเขาดังนั้นอาจมีความคล้ายคลึงกันบ้าง
Abdullah Jibaly

10

ลิงก์ Eclipseด้วยเหตุผลหลายประการ แต่โดยเฉพาะอย่างยิ่งฉันรู้สึกว่ามันมีจำนวนน้อยกว่าโซลูชั่นสตรีมหลักอื่น ๆ (อย่างน้อยก็ในหน้าของคุณขยายตัวน้อยลง)

โอ้และ Eclipse Link ได้รับเลือกให้ใช้งานการอ้างอิงสำหรับ JPA 2.0


5

ในขณะที่ฉันแบ่งปันข้อกังวลเกี่ยวกับการแทนที่ Java สำหรับการสืบค้น SQL ในรูปแบบอิสระฉันคิดว่าคนที่วิจารณ์ ORM กำลังทำเช่นนั้นเนื่องจากการออกแบบแอปพลิเคชันที่ไม่ดี

True OOD ถูกขับเคลื่อนโดยคลาสและความสัมพันธ์และ ORM ให้การแมปที่สอดคล้องกันของประเภทความสัมพันธ์และวัตถุต่าง ๆ หากคุณใช้เครื่องมือ ORM และสิ้นสุดการเข้ารหัสแบบสอบถามนิพจน์ในภาษาแบบสอบถามใด ๆ กรอบ ORM สนับสนุน (รวมถึง แต่ไม่ จำกัด เฉพาะต้นไม้นิพจน์ Java, วิธีการสืบค้น, OQL และอื่น ๆ ) คุณกำลังทำสิ่งผิดปกติเช่นโมเดลชั้นเรียนของคุณ ส่วนใหญ่แล้วไม่รองรับความต้องการของคุณในแบบที่ควรจะเป็น การออกแบบแอปพลิเคชันใหม่ทั้งหมดไม่ต้องการการสืบค้นในระดับแอปพลิเคชัน ฉันได้รับการรีแฟคเตอร์หลายโครงการที่ผู้คนเริ่มใช้เฟรมเวิร์ก ORM ในลักษณะเดียวกับที่ใช้ในการฝังค่าคงที่สตริง SQL ในรหัสของพวกเขาและในที่สุดทุกคนก็แปลกใจว่าแอพพลิเคชั่นทั้งหมดนั้นง่ายเพียงใด อัพโมเดลคลาสของคุณด้วยโมเดลการใช้งาน ได้รับสำหรับสิ่งต่าง ๆ เช่นฟังก์ชั่นการค้นหา ฯลฯ คุณต้องใช้ภาษาของคิวรี แต่ถึงอย่างนั้นเคียวรีก็มีข้อ จำกัด อย่างมากที่การสร้าง VIEW และการแมปที่ซับซ้อนยิ่งขึ้นไปยังคลาสถาวรแบบอ่านอย่างเดียวนั้นดีกว่า ในภาษาคิวรีบางภาษาในรหัสของแอปพลิเคชันของคุณ วิธีการ VIEW ยังใช้ประโยชน์จากความสามารถของฐานข้อมูลและ Materialization นั้นสามารถใช้งานได้ดีกว่า SQL ที่เขียนด้วยมือในแหล่ง Java ของคุณ ดังนั้นฉันไม่เห็นเหตุผลใด ๆ สำหรับแอปพลิเคชันที่ไม่สำคัญไม่ใช้ ORM แต่ถึงอย่างนั้นเคียวรีก็มีข้อ จำกัด อย่างมากที่การสร้าง VIEW ที่ซับซ้อนและการแมปที่คลาสถาวรแบบอ่านอย่างเดียวนั้นดีกว่าการรักษาและดูมากกว่าการสร้างนิพจน์ในภาษาคิวรีบางรหัสในแอปพลิเคชันของคุณ วิธีการ VIEW ยังใช้ประโยชน์จากความสามารถของฐานข้อมูลและ Materialization นั้นสามารถใช้งานได้ดีกว่า SQL ที่เขียนด้วยมือในแหล่ง Java ของคุณ ดังนั้นฉันไม่เห็นเหตุผลใด ๆ สำหรับแอปพลิเคชันที่ไม่สำคัญไม่ใช้ ORM แต่ถึงอย่างนั้นเคียวรีก็มีข้อ จำกัด อย่างมากที่การสร้าง VIEW ที่ซับซ้อนและการแมปที่คลาสถาวรแบบอ่านอย่างเดียวนั้นดีกว่าการรักษาและดูมากกว่าการสร้างนิพจน์ในภาษาคิวรีบางรหัสในแอปพลิเคชันของคุณ วิธีการ VIEW ยังใช้ประโยชน์จากความสามารถของฐานข้อมูลและ Materialization นั้นสามารถใช้งานได้ดีกว่า SQL ที่เขียนด้วยมือในแหล่ง Java ของคุณ ดังนั้นฉันไม่เห็นเหตุผลใด ๆ สำหรับแอปพลิเคชันที่ไม่สำคัญไม่ใช้ ORM


11
หากคุณกำลังสร้างแอปพลิเคชันที่ด้านบนของร้านค้าแบบถาวรเช่นเดียวกับพวกเราหลายคนไม่ว่าจะเป็น RDBMS หรือรสชาติของ NoSQL บางร้านนั้นจะมีวิธีการเข้าถึงที่มีประสิทธิภาพ การพยายามที่จะสรุปจากสิ่งที่มากเกินไปนั้นเป็นเพียงการเอาชนะ การกระตือรือร้นอย่างแรงกล้าในเรื่อง 'OOD ที่แท้จริง' ทำให้สถาปัตยกรรมมนุษย์อวกาศของจาวานั้นเสียชื่อ
Eelco
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.