ดังนั้นจึงเป็นไปไม่ได้ที่จะเปลี่ยนไปใช้ ORM อื่น (ไม่ใช่ที่เราต้องการ))
ดูเหมือนว่าผิด ข้อได้เปรียบที่สำคัญของรูปแบบที่เก็บคือคุณซ่อนตรรกะการเข้าถึงข้อมูลและแลกเปลี่ยนได้ง่าย
จนถึงตอนนี้ฉันรู้สึกราวกับว่าฉันวางตรรกะทางธุรกิจของฉันในรูปแบบโดเมนของฉันและผ่านที่เก็บฉันจะทำงานร่วมกับ ORM (ซึ่งฉันเคยเลือก) อย่างไรก็ตามถ้าฉันต้องการใช้เครื่องมือ MDA สำหรับส่วน ORM ของแอปพลิเคชันต่อไปโมเดลที่สร้างขึ้นที่นี่จะเป็นโลหิตจางมาก (เช่นไม่มีตรรกะทางธุรกิจ) ในทำนองเดียวกันถ้าฉันใช้ Entity framework (.net) หรือ NHibernate สำหรับ ORM ของฉันมันก็จะเป็นแบบจำลองโลหิตจางด้วย? ฉันไม่แน่ใจว่าคุณจะใช้ตรรกะทางธุรกิจที่ใดถ้าฉันใช้ NHibernate
โมเดลโดเมนโลหิตจางถือว่าเป็นวิธีปฏิบัติที่ไม่ดีของหลาย ๆ คนเช่น Martin Fowler คุณควรหลีกเลี่ยงการออกแบบดังกล่าวเนื่องจากแบบจำลองดังกล่าวนำไปสู่เทคนิคการออกแบบกระบวนการแทนที่จะเป็นการออกแบบเชิงวัตถุที่ดี จากนั้นคุณมีคลาสข้อมูลและคลาสผู้จัดการ / ประมวลผลซึ่งหมายความว่าคุณแยกสถานะและพฤติกรรม แต่วัตถุควรเป็น "สถานะและพฤติกรรม" จริงๆ
NHibernate ทำงานได้อย่างยอดเยี่ยมในการเพิกเฉยต่อความเพียร คุณสามารถซ่อนรายละเอียดการแมปใน XML หรือด้วย FluentNHibernate และเพียงเขียน POCO ธรรมดา มันง่ายมากที่จะสร้างรูปแบบโดเมนที่หลากหลายด้วย NHibernate ฉันคิดว่าคุณสามารถทำได้ด้วยเอนทิตี้ของเฟรมเวิร์กและเครื่องมือ MDA ด้วย ตราบใดที่เครื่องมือนี้สร้างคลาสบางส่วนคุณสามารถขยายโค้ดที่สร้างขึ้นได้อย่างง่ายดายโดยไม่ต้องกังวลว่าคนรุ่นใหม่อาจทำลายโค้ดที่ผู้ใช้เขียนขึ้น
เพื่อตัดเรื่องสั้นนี้ให้สั้น เมื่อคุณใช้ NHibernate ไม่มีอะไรฉันไม่ทำอะไรเลยห้ามไม่ให้คุณโอบกอดโมเดลโดเมนที่มีค่า ฉันแนะนำให้ใช้กับ FluentNHibernate และทำแผนที่ด้วยมือ รหัสการจับคู่ใช้เวลาเพียง 5 ถึง 10 นาทีในการเขียน ฉันคิดว่าเหมือนกันเป็นจริงสำหรับกรอบงานเอนทิตีและเครื่องมืออย่างน้อยสร้างคลาสบางส่วนที่สามารถขยายได้อย่างง่ายดาย
ฉันถูกต้องในการคิดแบบนี้ในคำอื่น ๆ ที่มี DDD ตรรกะทางธุรกิจทั้งหมดในโดเมนและเพียงแค่ใช้ ORM สำหรับการคงอยู่ผ่านทางที่เก็บ?
ส่วนใหญ่คุณถูกต้อง คุณควรมีรูปแบบโดเมนที่หลากหลาย โดยเฉพาะอย่างยิ่งเมื่อสิ่งต่าง ๆ มีความซับซ้อนมากขึ้นมันจะง่ายต่อการบำรุงรักษาและยืดเวลาเมื่อคุณออกแบบอย่างเหมาะสม แต่โปรดทราบว่า DDD ยังรู้ (Domain Layer และ Application Layer) บริการเพื่อใช้ตรรกะทางธุรกิจและโรงงานเพื่อห่อหุ้มตรรกะการสร้าง
ฉันมักจะแยกความแตกต่างของตรรกะทางธุรกิจเป็นตรรกะของโดเมนและตรรกะทางธุรกิจจริงของแอปพลิเคชัน ตรรกะของโดเมนคือวิธีที่โดเมนโต้ตอบและทำงานในขณะที่ตรรกะของแอปพลิเคชันซึ่งเป็นเลเยอร์ที่แตกต่างอย่างสิ้นเชิงสรุปวิธีการใช้โดเมนสำหรับการใช้งาน / แอปพลิเคชันที่เฉพาะเจาะจง บ่อยครั้งที่ฉันต้องอัปเดตโมเดลโดเมนเพื่อรองรับเคสการใช้งานเฉพาะและเพื่อให้มีประสิทธิภาพยิ่งขึ้น