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) وجود دارد تا مشکل افت عملکرد حل شود.
