ORM چیست

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

در این زمینه به نکات زیر توجه نمایید که شاید برای روشن شدن اینکه چرا ORMها بسیار برای کار مناسب هستند، به شما کمک نمایند:
۱تجارب نشان می‌دهند که تا حدود ۳۰ درصد از کدهایی که برای نوشتن برنامه در NET. لازم است مربوط به ثبت داده و کار با داده‌ها می‌باشد.
۲برای نوشتن کدهای SQL در NET. باید آن‌ها را به صورت رشته متنی یا به صورت stored procedure در خود پایگاه داده می‌نوشتیم که این کار باعث بروز خطا در زمان اجرا می‌شد و ما هیچ کنترلی برای بررسی خطا در زمان کامپایل برنامه نداشتیم.
۳یکی از پرهزینه‌ترین بخش‌های هر پروژه‌ای، مدل‌سازی آن است. مدل‌سازی در زبان شیءگرا کاملا با مدل‌سازی در پایگاه داده‌های رابطه‌ای متفاوت است. ما می‌توانیم این مدل‌سازی را که بین هر دو حیطه مشترک باشد به صورت یک به یک انجام دهیم یعنی هر جدول در پایگاه داده با یک موجودیت (entity) در کلاس‌هایمان معادل شود و هر ستون از جدول با مشخصه (property) آن کلاس و کاملا به صورت معادل پیاده‌سازی شود ولی این کار باعث می‌شود که ما قابلیت‌های زیادی را که در زبان‌های شیء‌گرا داریم مانند ارث‌بری و چندریختی را از دست بدهیم.
۴با ORM دیگر نیاز ندارد که خودمان را درگیر بخش‌های سطح پایین و خسته‌کننده هر سیستم کنیم و این باعث تمرکز بهتر و بیشتر ما روی مشکلات کاری می‌شود، در نتیجه به بهره‌وری بالاتری دست میابیم.
۵ساده‌سازی سیستم باعث خوانا شدن آن و جلوگیری از اتلاف زمان می‌شود. ما به جای آنکه کدهای زیادی را برای کارهای کوچک بنویسیم، با مقدار کم کد می‌توانیم همان کار را انجام دهیم. از همه مهمتر اینکه سیستمی با مقدار کد کمتر، بهتر بازسازی می‌شود.
۶خیلی‌ها از ORM استفاده نمی‌کنند به دلیل اینکه فکر می‌کنند باعث افت کارایی (performance) می‌شوند. این گفته تا حدودی صحیح است ولی این یک گفته کامل نیست. اولا ما باید ببینیم که ارجحیت ما چیست. باید بیان کرد که ORM ها اگر درست استفاده شوند تاثیر منفی بسیار کمی روی کارایی خواهند داشت، در عوض در کنار آن‌ها ما چیزهایی بدست می‌آوریم که بسیار ارزشمندتر است. لازم به ذکر است که ORMهای قوی مانند NHibernate حتی می‌توانند از ADO .NET کلاسیک هم کارایی بهتری داشته باشند. اگر از cache و عملیات دسته‌ای (batching) استفاده نماییم، می‌توانیم به کارایی حتی بالاتر از ADO .NET کلاسیک دست یابیم.
۷یک ORM قوی مانند NHibernate ، برنامه شما را از نوع پایگاه داده و SQL Dialect استفاده شده، جدا می‌کند. این کار باعث می‌شود که استقلال شما نسبت به نوع پایگاه داده حفظ شود.
مدیریت دیتا (اطلاعات) در برنامه های شی گرا امری بسیار ضروری و مهم است . اینکه دریک برنامه ما چگونه بتوانیم اطلاعاتی را که کاربر و یا خودمان در حین اجرای برنامه و هنگامی که برنامه از حالت اجرا خارج شده است ، حفظ ، مدیریت و تغییر دهیم بسیار حیاتی است .
حالتی را در نظر بگیرید که برنامه شما نیاز به ذخیره یکسری اطلاعات در مورد مشتریان خود را دارد ، در این حالت بسته به نیازها،مخاطب و موجودیت ها و فیلد های مختلفی در برنامه وجود دارداز قبیل : نام مشتری ، محل سکونت ، آدرس ، نوع مشترک و … حال برنامه احتیاج به محلی برای ذخیره اطلاعات خود دارد که می تواند یک فایل ، پایگاه دادهSQL Server ، Oracle ، باشد . ما برای ذخیره کردن اطلاعات موجودیت ها مجبور به انجام یک سری اعمال تکراری هستیم برای انجام این اعمال ناچار به نوشتن متدها یی هستیم ، نظیر :

Private void saveData(Object user)

string firstname = user.firstName;

string lastname = user.lastName;

/* other fields */

DB.save(firstname,lastname,…); // Saving data to Database

همچنین برای برگرداندن اطلاعات و اعمال تغییرات روی آنها و احتمالا نمایش آنها به کاربر ، نیاز بهنوشتن متدهایی نظیر فوق هستیم . البته بدون احتساب اعمالی نظیر تبدیل کردن انواع داده به یکدیگر (Casting) .
اگر از معماری چند لایه استفاده کرده باشید ، این متد ها در لایه ی BLL (Bussiness logic layer) پیاده سازی می شوند و متدهایی که مستقیم با پایگاه داده سر و کا ر دارند در لایه یDAL (Data access layer) . همانقدر که برنامه ما وسیع تر می شود به همان ترتیب تعداد وپیچیدگی موجودیت ها و فیلدها بیشتر .حال شما سیستمی را در نظر بگیرید که این ارتباط های دایمی و احتمالا پیچیده ی با پایگاه داده را برای شما انجام دهد بدون انجام اعمال تکرای ، در واقعپلی مابین اشیاء و پایگاه داده شما ایجاد کند (بین لایه ی BLL و DAL ) و شما به راحتی بتوانید اطلاعات اشیاء را با صدا زدن یک متد در پایگاه داده ی خود ذخیره کنید . البته استفاده از اینسسیستم دلیلی بر پیاده سازی نکردن لایه DAL نیست ، زیرا برخی از اعمال بسته به شرایطمختلف نیاز به لایه DAL دارند .این سیستم همان ORM است که این امکان را برای شما فراهم می کند .دقت داشته باشید که ORM محدود به هیچ زبان خاصی نیست و تنها یک تکنیک و سیستم است که می تواند در زبانهای مختلف پیاده سازی شود .
اولین فرم ورک مناسب و خوبی که برای ORM تولید شد، EOF نام گرفت (Enterprise Objects Framework) که البته خود نیز دارای مشکلاتی بود . در واقع Nhibernate ورژن Open source و رایگان Hibernate (فرم ورک پیاده سازی ORM در Java) در دات نت است .

چرا باید از ابزارهای Object relational Mapper یا به اختصار ORM استفاده کرد؟ در اینجا سخن در مورد ORM خاصی نیست. هدف تبلیغ یک محصول ویژه هم نمی باشد و یک بحث کلی مد نظر است.
کار ابزارهای ORM خواندن ساختار دیتابیس شما بوده و سپس ایجاد کلاس هایی بر اساس این ساختار ، برقراری ارتباط بین اشیاء ایجاد شده و جداول، ویووها، رویه های ذخیره شده و غیره می باشد. همچنین این ابزارها امکان تعریف روابط one-to-one, one-to-many, many-to-one, و many-to-many بین اشیاء را نیز بر اساس ساختار دیتابیس شما فراهم می کنند.
در ادامه به فواید استفاده از ORM ها خواهیم پرداخت:
الف) یک ابزار ORM زمان تحویل پروژه را کاهش می دهد
اولین و مهمترین دلیلی که بر اساس آن در یک پروژه، استفاده از ORM حائز اهمیت می شود، بحث بالا بردن سرعت برنامه نویسی و کاهش زمان تحویل پروژه به مشتری است. این کاهش زمان بسته به نوع پروژه بین ۲۰ تا ۵۰ درصد می تواند خود را بروز دهد.
بدیهی است ابزارهای ORM کار شگفت انگیزی را قرار نیست انجام دهند و شما می توانید تمام آن عملیات را دستی هم به پایان رسانید؛ اما اجازه دهید یک مثال کوتاه را با هم مرور کنیم.
برای پیاده سازی یک برنامه متداول با حدود ۱۵ تا ۲۰ جدول، حدودا به ۳۰ شیء برای مدل سازی سیستم نیاز خواهد بود و برنامه نویسی این مجموعه بین ۵۰۰۰ تا ۱۰۰۰۰ سطر کد را به خود اختصاص خواهد داد. بدیهی است برنامه نویسی و آزمایش این سیستم چندین هفته یا ماه به طول خواهد انجامید.
اما با استفاده از یک ORM ، عمده وقت شما به طراحی سیستم و ایجاد ارتباطات بین اشیاء و دیتابیس در طی یک تا دو روز صرف خواهد شد. ایجاد کد بر اساس این مجموعه و با کمک ابزارهای ORM ، آنی است و با چند کلیک صورت می گیرد.
ب) یک ابزار ORM کدی با طراحی بهتر را تولید می کند
ممکن است شما بگوئید که کد نویسی من بی نظیر است و از من بهتر کسی را نمی توانید پیدا کنید! به تمامی زوایای کار خود مسلطم و نیازی هم به این گونه ابزارها ندارم!
عده ای از شما به طور قطع اینگونه اید؛ اما نه همه. در یک تیم متوسط، همه نوع برنامه نویس با سطوح مختلفی را می توانید پیدا کنید و تمامی آن ها برنامه نویس ها و یا طراح های آنچنان قابلی هم نیستند. بنابراین امکان رسیدن به کدهایی که مطابق اصول دقیق برنامه نویسی شیء گرا نیستند و در آن ها الگوهای طراحی به خوبی رعایت نشده، بسیار محتمل است. همچنین در یک تیم زمانیکه از یک الگوی یکسان پیروی نمی شود، نتایج نهایی بسیار ناهماهنگ خواهند بود.
در مقابل استفاده از ORM های طراحی شده توسط برنامه نویس های قابل (senior (architect level) engineers) ، کدهایی را بر اساس الگوهای استاندارد و پذیرفته شده ی شیء گرا تولید میکنند و همواره یک روند کاری مشخص و هماهنگ را در یک مجموعه به ارمغان خواهند آورد.
ج) نیازی نیست تا حتما یک متخصص دات نت فریم ورک باشید تا از یک ORM استفاده کنید
قسمت دسترسی به داده ها یکی از اجزای کلیدی کارآیی برنامه شما است. اگر طراحی و پیاده سازی آن ضعیف باشد، کل برنامه را زیر سؤال خواهد برد. برای طراحی و پیاده سازی دستی این قسمت از کار باید به قسمت های بسیاری از مجموعه ی دات نت فریم ورک مسلط بود. اما هنگام استفاده از یک ORM مهمترین موردی را که باید به آن تمرکز نمائید بحث طراحی منطقی کار است و ایجاد روابط بین اشیاء و دیتابیس و امثال آن. مابقی موارد توسط ORM انجام خواهد شد و همچنین می توان مطمئن بود که پیاده سازی خودکار انجام شده این قسمت ها، بر اساس الگوهای طراحی شیء گرا است.
د) هنگام استفاده از یک ابزار ORM ، مدت زمان آزمایش برنامه نیز کاهش می یابد
بدیهی است اگر قسمت دسترسی به داده ها را خودتان طراحی و پیاده سازی کرده باشید، زمان قابل توجهی را نیز باید به بررسی و آزمایش صحت عملکرد آن بپردازید و الزامی هم ندارد که این پیاده سازی مطابق بهترین تجربیات کاری موجود بوده باشد. اما هنگام استفاده از کدهای تولید شده توسط یک ابزار ORM می توان مطمئن بود که کدهای تولیدی آن که بر اساس یک سری الگوی ویژه تولید می شوند، کاملا آزمایش شده هستند و همچنین صدها و یا هزارها نفر در دنیا هم اکنون دارند از این پایه در پروژه های موفق خود استفاده می کنند و همچنین بازخوردهای خود را نیز به تیم برنامه نویسی آن ابزار ORM ارائه می دهند و این مجموعه مرتبا در حال بهبود و به روز شدن است.

 

دیدگاه‌تان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *