ORM چیست؟
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 8 دقیقه

ORM چیست؟

به عنوان یک تازه کار که مشغول یادگیری برنامه‌نویسی است همواره کار کردن با دیتابیس و یادگیری زبان SQL می‌تواند وحشتناک و کمی پیچیده باشد. اما آیا راهکار مناسب و کاربردی برای این موضوع وجود دارد؟

بله! ORM دقیقا قصد دارد که چنین کمکی را به ما بکند. با استفاده از ORM شما قابلیت آن را خواهید داشت تا بتوانید با استفاده از همان زبان برنامه‌نویسی که مشغول یادگیری و توسعه پروژه تان هستید، با دیتابیس ارتباط برقرار کرده و مدل‌های مربوط به دیتابیس را توسعه دهید.

ORM یا Object Relational Mapping در واقع یک لایه انتزاعی برای ارتباط برقرار کردن با دیتابیس بوده و تا زمانی که از دیتابیس‌های رابطه‌ای استفاده کنید، شما را از نوشتن کدهای SQL بی نیاز می‌کند.

در این مقاله قصد داریم با جزئیات بیشتری بگوییم که ORM چیست؟ چه کمکی به ما می‌کند؟ و چه مزایا و معایبی خواهد داشت.

ORM چیست؟

ORM مخفف کلمات Object Relational Mapping است که متاسفانه چندان ترجمه درخوری در زبان فارسی ندارد: «رابطه نقشه برداری به شی». هدف ORM این است که با استفاده از زبان برنامه‌نویسی مورد نظرتان و با کمک گرفتن از قدرت پارادایم شئ‌گرایی جداول و ستون‌های مربوط به بانک اطلاعاتی‌تان را توسعه دهید.

در واقع هر آنچه که شما در پارادایم شئ‌گرا با آن سر و کار دارید می‌تواند به اصطلاحات مربوط به دنیای دیتابیس‌ها تبدیل شود. برای مثال زمانی که شما یک کلاس (مدل) جدید ایجاد می‌کنید در بانک اطلاعاتی‌تان یک جدول درست خواهد شد. هر موقع یک خاصیت را تعریف می‌کنید، یک ستون جدید به جداول‌تان اضافه خواهد شد.

یکی از اهداف ORM این است که شما را از پیچیدگی بسیار زیادی نوشتن کوئری با استفاده از زبان SQL دور نگه داشته و به روش منطقی‌ و ساده‌تری دیتابیس‌تان را توسعه دهید.

البته این روش نیز می‌تواند مزایا و معایب خاص خود را داشته باشد اما در نهایت یک روش اثبات شده بوده و بسیاری از افراد در زمینه توسعه اپلیکیشن‌های مورد نظرشان از این خاصیت استفاده می‌کنند.

یک مثال ساده از کاربرد ORM در توسعه یک دفترچه تلفن خواهد بود. در این حالت شما یک کلاس برای دفترچه تلفن مورد نظرتان ایجاد کرده و سپس مشخصات هر فردی که قصد وارد کردن به این دفترچه تلفن را دارید به صورت یکسری پراپرتی ایجاد می‌کنید. مطمئنا هر پراپرتی حاوی یکسری نوع داده‌ای خاص خواهد بود که ORM در فرایند تعریف این نوع‌ها به شما کمک خواهد کرد.

چگونه به ORM دسترسی داشته باشیم؟

هر زبان برنامه‌نویسی شئ‌گرا یکسری کتابخانه منحصر به فرد در اختیار شما قرار خواهد داد که با استفاده از آن می‌توانید به قابلیت‌های ORM دسترسی داشته و از آن استفاده کنید.

برای مثال در زبان برنامه نویسی پایتون ما قابلیت استفاده از ORM را از طریق کتابخانه‌هایی مانند Django ORM، Peewee، SQLAlchemy و موارد دیگری را خواهیم داشت.

در زبان برنامه‌نویسی جاوا اسکریپت نیز مواردی مانند Prisma، Waterline، TypeORM و... وجود دارند.

شما می‌توانید با یک جستجو ساده در گوگل براساس زبان برنامه‌نویسی مورد نظرتان کتابخانه‌های ORM را پیدا کنید.

یک نمونه ساده از ORM در زبان برنامه‌نویسی پایتون را می‌توانید در زیر مشاهده کنید:

users = Users.objects.filter(zip_code=94107)

مقدار برابر این دستور در زبان SQL قطعه کد زیر خواهد بود:

SELECT * FROM USERS WHERE zip_code=94107;

خروجی هر دو قطعه کد بالا کاربرانی که مقدار zip_code شان برابر با ۹۴۱۰۷ خواهد بود را برگشت می‌دهد. همانطور که می‌توانید مشاهده کنید ORM یک زبان بیان‌مند و Human-Readableتری دارد.

مزایا و معایب استفاده از ORM چیست؟

هر ابزاری که در دنیای برنامه نویسی مورد استفاده قرار می‌گیرد یکسری مزایا و یکسری معایب دارد که کاملا نیز طبیعی است. در این بخش ابتدا قصد داریم در رابطه با مزایا ORM صحبت کرده و سپس به بررسی معایب آن بپردازیم.

مزیت ۱ – زبان محلی

شما برای کار با دیتابیس و ارتباط برقرار کردن با آن نیاز به دانستن یک زبان دیگر تحت عنوان SQL دارید. این موضوع می‌تواند تمرکز شما روی کدهای اصلی‌تان را کمتر کرده و درگیر یادگیری و استفاده از یک زبان دیگر شوید. ORM این مشکل را برای شما حل خواهد کرد. شما تنها با استفاده از قابلیت‌های زبان برنامه نویسی مورد نظر در ارتباط با پارادایم شئ‌گرا می‌توانید دیتابیس خود را توسعه دهید.

مزیت ۲ – بدون وابستگی به دیتابیس

از آنجایی که ORM یک لایه انتزاعی و مستقل است، نگرانی در ارتباط با اینکه از چه دیتابیسی استفاده می‌شود نیست. برای مثال چه شما از MySQL استفاده کنید و یا PostgreSQL، کدهای مربوط به ORM می‌تواند ثابت باقی مانده و در این رابطه هیچ نگرانی نداشته باشید. این در حالی‌ست که در زمان نوشتن SQL گاهی اوقات ناهماهنگی بین دیتابیس‌های مختلف پیش آمده و این کار را کمی پیچیده می‌کند.

مزیت ۳ – امنیت بیشتر

اگر نتوانید به صورت حرفه‌ای SQL بنویسید ممکن است در فرایند اجرا شدن اپلیکیشن با خطاهای عجیب و غریب روبرو شوید و ناسازگاری‌هایی در اپلیکیشن اتفاق بیافتد. اما اگر ORM را برای این مرحله انتخاب کنید می‌توانید بهترین خروجی‌های ممکن را تولید کنید چرا که ORM بیشتر کارها را به صورت خودکار برای شما انجام می‌دهد. در نتیجه نیازی به نگرانی در این رابطه ندارید.

مزیت ۴- طراحی بهتر

زمانی که یک طرح گرافیکی از بانک اطلاعاتی را توسعه می‌دهید، تبدیل کردن آن طرح به واقعیت و وارد کردن‌شان به اپلیکیشن از طریق ORM بسیار بهینه‌تر و با دقت بیشتری اتفاق می‌افتد. دلیل این موضوع نیز OOP است. اگر درک خوبی از برنامه نویسی شئ‌گرا داشته باشید به آسانی می‌توانید مدل‌های ذهنی و یا گرافیکی را به واقعیت تبدیل کنید.

مزیت ۵ – تست کمتر

از آنجایی که ORM بسیار واضح بوده و کدهای ساده‌ای دارد نیاز کمتری به تست کردن خواهد داشت. در نتیجه شما با دردسر کمتری در زمان اجرا برخورد کرده و نهایتا همه چیز با درستی بیشتری پیش خواهد رفت.

در کنار مزایای گفته شده می‌تواند موارد بسیار دیگری را نیز مطرح کرد اما این پنج مورد جزو اصلی‌ترین مزایایی بود که می‌توانید از برنامه‌نویسی ORM دریافت کنید. بیایید نگاهی به معایب ORM نیز بیاندازیم.

عیب ۱ – کارایی

ORM یک لایه انتزاعی است و در نهایت کدهایی که نوشته‌اید برای ارتباط برقرار کردن با دیتابیس باید به SQL ترجمه شود. در نتیجه این موضوع باعث کند شدن انجام عملیات های بانک اطلاعاتی می‌شود. یکی از اصلی‌ترین شکایت‌هایی که توسعه دهندگان از ORM نیز دارند دقیقا همین مورد است. به همین دلیل برخی از افراد که سرعت ارائه کارها برای‌شان بسیار مهم است به همان روش‌های قدیمی SQLنویسی یا روش‌های دیگری باز می‌گردند.

عیب ۲ – دقت

گاهی اوقات ORM در صورتی که کوئری‌های پیچیده‌ای را با آن بنویسیم ممکن است خروجی کاملا اشتباهی را برای ما تولید بکند. به همین دلیل در چنین مواقعی نیاز دارید که SQL تولید شده را نیز مشاهده کرده و متوجه شوید که چرا ORM چنین رفتاری را از خود نشان داده است. در نتیجه با حرفه‌ای تر شدن در ORM شما نیاز خواهید داشت که SQL را نیز یاد گرفته و با امکانات آن آشنا شوید. در غیر اینصورت ممکن است کوئری‌های حرفه‌ای شما به درستی اجرا نشوند.

عیب ۳ – ORMهای متفاوت

نبود یک استاندارد کلی برای ORM باعث شده که هر کتابخانه‌ ORM به صورت جزئی با همدیگر تفاوت‌هایی داشته باشند. برای حل این مشکل بهتر است قبل از یادگیری ORM بهترین کتابخانه مربوط به زبان برنامه نویسی‌تان را پیدا کرده و فرایند یادگیری را با استفاده از آن پیش بگیرید.

در پایان

هر فریمورکی که امروزه به عنوان یک فریمورک همه فن حریف توسعه داده می‌شود شامل یک ORM منحصر به فرد است. برای مثال فریمورک Django در ابتدا از ORMهای کلی استفاده می‌کرد اما با توسعه نسخه‌های جدید Django-ORM را معرفی کرد که به توسعه‌دهندگان یک تجربه منحصر به فرد و عالی را ارائه می‌دهد.

بسیار مهم است که در هنگام انتخاب یک فریمورک از وجود ORM قدرتمند در آن مطمئن شوید در غیر اینصورت توسعه مدل‌های دیتابیس می‌تواند بسیار دردسرساز باشد.

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
4.1 از 10 رای

/@arastoo
ارسطو عباسی
کارشناس تولید و بهینه‌سازی محتوا

کارشناس ارشد تولید و بهینه‌سازی محتوا و تکنیکال رایتینگ - https://arastoo.net

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید