What is ORM?
توضیحات جلسه
جزوه و مستندات
مفاهیم کلیدی
- ORM Object-Relational Mapping
یک تکنیک برنامهنویسی است که مانند پلی بین زبانهای شیگرا، مانند Java یا Python، و پایگاهدادههای رابطهای، مانند MySQL یا PostgreSQL، عمل میکند. این ابزار اجازه میدهد با استفاده از مفاهیم شیگرایی با دیتابیس تعامل داشته باشیم.
- Object
در دنیای برنامهنویسی، یک موجودیت واقعی مانند تراکنش بانکی یا کاربر را نشان میدهد. هر Object شامل دادهها، یعنی Attributes، و رفتارها، یعنی Methods، است.
- Relational Database
پایگاهدادهای است که دادهها را در قالب جدولها، شامل ردیفها و ستونها، ذخیره میکند. این سیستمها از استاندارد ACID پشتیبانی میکنند و بسیار انعطافپذیر هستند، اما درکی از مفهوم Object ندارند.
- Mapping
فرآیند متصل کردن مدلهای شیگرا به جدولهای دیتابیس است. در این لایه، Objectها بهصورت خودکار به ردیفهای جدول تبدیل میشوند و برعکس، نتیجه کوئریهای دیتابیس دوباره بهشکل Object در برنامه ظاهر میشود.
- Encapsulation
مفهومی در شیگرایی است که در آن دادهها و رفتارهای مربوط به یک موجودیت در قالب یک Object بستهبندی میشوند. در مقابل، دیتابیسهای رابطهای ساختاری مسطح یا Flat دارند و چنین قابلیتی را بهصورت مستقیم ارائه نمیکنند.
موارد مصاحبه ای
- تفاوت اصلی بین مدلهای شیگرا و دیتابیسهای رابطهای چیست؟
در مدلهای شیگرا مفاهیمی مانند ارثبری یا Inheritance و ترکیب یا Composition وجود دارد. اما دیتابیسهای رابطهای ساختاری مسطح دارند و دادهها را در جدولها، با استفاده از کلیدهای اصلی یا Primary Key و کلیدهای خارجی یا Foreign Key، مدیریت میکنند.
- چرا استفاده از ORM سرعت توسعه را افزایش میدهد؟
چون برنامهنویس نیازی به نوشتن کدهای تکراری برای مدیریت Connectionها، ResultSetها و کوئریهای دستی SQL ندارد. ORM بسیاری از این کارها را بهصورت خودکار انجام میدهد.
- مزیت امنیتی استفاده از ORM چیست؟
استفاده از ORM ریسک حملات SQL Injection را تا حد زیادی کاهش میدهد؛ زیرا این ابزار کوئریها را بهصورت امن تولید و اجرا میکند.
- معایب استفاده از ORM نسبت به کدهای SQL دستی چیست؟
۱. سربار عملکردی: به دلیل وجود یک لایه میانی، سرعت اجرا نسبت به SQL خالص کمی کمتر است.
۲. پیچیدگی در کوئریهای خاص: برای کوئریهای بسیار پیچیده، ممکن است عملکرد ORM بهینه نباشد.
۳. منحنی یادگیری: یادگیری کار با یک فریمورک ORM جدید به زمان نیاز دارد.
سناریو کاربردی
در یک اپلیکیشن مدیریت هتل، موجودیتهایی مانند مهمان یا Guest و رزرو یا Reservation داریم.
در حالت عادی و بدون استفاده از ORM، برای ذخیره یک رزرو جدید باید کدهای طولانی JDBC بنویسیم، کوئری INSERT را بهصورت دستی تایپ کنیم و پارامترها را تکتک مقداردهی کنیم.
با استفاده از ORM، مانند Hibernate در جاوا، برنامهنویس فقط با شیء Reservation کار میکند. وقتی متد ذخیره صدا زده میشود، ORM خودش تشخیص میدهد که کدام ویژگیهای شیء باید در کدام ستونهای جدول دیتابیس قرار بگیرند و دستور SQL لازم را بهصورت خودکار در پشت صحنه تولید و اجرا میکند.
بیشتر بدانید
- تولید خودکار کد
بسیاری از ابزارهای مدرن ORM قابلیت Automatic SQL Generation دارند و میتوانند بر اساس تغییرات کلاسها، جدولهای دیتابیس را بهروزرسانی کنند.
- یکپارچگی زبان
با ORM میتوانید با همان زبانی که برنامه را مینویسید، مانند C# یا Python، عملیات دیتابیس را انجام دهید. بنابراین نیازی نیست مدام بین سینتکس زبان برنامهنویسی و سینتکس SQL جابهجا شوید.
- تعامل با کوئریهای پیچیده
در بیشتر فریمورکهای ORM، اگر به اجرای یک کوئری بسیار بهینه و پیچیده نیاز داشته باشید، همچنان امکان نوشتن Native SQL وجود دارد. در این حالت، کد SQL بهصورت مستقیم نوشته میشود تا مشکل افت عملکرد برطرف شود.
