NHibernate - สถาปัตยกรรม

ปัจจุบันระบบจำนวนมากได้รับการออกแบบด้วยสถาปัตยกรรมแบบหลายชั้น NHibernate ยังมีและทำงานได้ดีกับการออกแบบนั้น

สถาปัตยกรรมชั้น

สถาปัตยกรรมแบบเลเยอร์แบ่งระบบออกเป็นกลุ่มต่างๆโดยแต่ละกลุ่มมีโค้ดที่ระบุพื้นที่ปัญหาเฉพาะและกลุ่มเหล่านี้เรียกว่าเลเยอร์ แอปพลิเคชันระดับองค์กรส่วนใหญ่ใช้high-level application architecture ที่ประกอบด้วยสามชั้น -

  • เลเยอร์การนำเสนอ
  • ชั้นธุรกิจ
  • เลเยอร์ความคงอยู่

ตัวอย่างเช่นเลเยอร์อินเทอร์เฟซผู้ใช้ซึ่งเรียกอีกอย่างว่าเลเยอร์การนำเสนออาจมีโค้ดแอปพลิเคชันทั้งหมดสำหรับการสร้างเว็บเพจและการประมวลผลอินพุตของผู้ใช้

ประโยชน์ที่สำคัญอย่างหนึ่งของวิธีการแบ่งเลเยอร์คือคุณสามารถทำการเปลี่ยนแปลงกับเลเยอร์หนึ่งได้บ่อยครั้งโดยที่เลเยอร์อื่น ๆ ไม่หยุดชะงักอย่างมีนัยสำคัญจึงทำให้ระบบต่างๆ lesser fragile and more maintainable.

เลเยอร์การนำเสนอ

  • เป็นชั้นบนสุดซึ่งมีรหัสที่รับผิดชอบในการวาดส่วนติดต่อผู้ใช้หน้ากล่องโต้ตอบหรือหน้าจอและรวบรวมข้อมูลของผู้ใช้และควบคุมการนำทาง

ชั้นธุรกิจ

  • ชั้นธุรกิจมีหน้าที่รับผิดชอบในการดำเนินการตามกฎทางธุรกิจหรือข้อกำหนดของระบบที่ผู้ใช้เข้าใจว่าเป็นส่วนหนึ่งของโดเมนปัญหา

  • นอกจากนี้ยังนำโมเดลที่กำหนดโดยเลเยอร์การคงอยู่มาใช้ซ้ำ

เลเยอร์ความคงอยู่

  • เลเยอร์การคงอยู่ประกอบด้วยคลาสและส่วนประกอบที่รับผิดชอบในการบันทึกและดึงข้อมูลแอปพลิเคชัน

  • เลเยอร์นี้ยังกำหนดการแมประหว่างคลาสโมเดลและฐานข้อมูล NHibernate ถูกใช้เป็นหลักในเลเยอร์นี้

ฐานข้อมูล

  • ฐานข้อมูลอยู่นอกแอปพลิเคชัน. NET
  • เป็นการแสดงสถานะของระบบตามความเป็นจริงและต่อเนื่อง
  • หากใช้ฐานข้อมูล SQL ฐานข้อมูลจะรวมสคีมาเชิงสัมพันธ์และโพรซีเดอร์ที่เก็บไว้

คลาส Helper / Utility

  • ทุกแอปพลิเคชันมีชุดของคลาสผู้ช่วยหรือยูทิลิตี้ที่รองรับเลเยอร์อื่น ๆ เช่นวิดเจ็ต UI คลาสการส่งข้อความคลาส Exception และยูทิลิตี้การบันทึก

  • องค์ประกอบเหล่านี้ไม่ถือว่าเป็นเลเยอร์เนื่องจากไม่ปฏิบัติตามกฎสำหรับการพึ่งพาระหว่างชั้นในสถาปัตยกรรมแบบเลเยอร์

สถาปัตยกรรม NHibernate

  • เป็นมุมมองระดับสูงของแอปพลิเคชัน NHibernate และคุณยังสามารถเห็นสถาปัตยกรรม NHibernate ที่เรียบง่าย

  • รหัสแอปพลิเคชันใช้ NHibernate ISession และ IQuery API สำหรับการดำเนินการคงอยู่และมีไว้เพื่อจัดการธุรกรรมฐานข้อมูลเท่านั้นโดยใช้ NHibernate ITransaction API