10 دلیل برای استفاده از ORM در دات نت فریم ورک

ORM یک تکنیک برنامه نویسی برای تبدیل مدل رابطه ای یک دیتابیس به مدل شیء گرا و بالعکس می باشد که در حال حاضر مورد توجه بسیاری از توسعه دهندگان نرم افزاری قرار دارد. استفاده از ORMها مزایای بسیاری دارد و در بسیاری موارد کار توسعه را آسان تر و لذت بخش تر خواهد کرد. برای دات نت فریم ورک ORMهای کدباز و تجاری زیادی وجود دارد که از این جمله می توان به ADO.NET Entity Framework و NHibernate اشاره نمود. من به شخصه از Entity Framework در یک پروژه واقعی استفاده کردم و تمام مزایایی که قبلاً در مورد یک ORM خوانده بودم را در واقعیت دیدم. در این مطلب به 10 دلیل برای استفاده از یک ORM در یک پروژه مبتنی بر دات نت فریم ورک اشاره خواهم کرد که به شخصه آن ها را تجربه کرده ام.

1- افزایش سرعت توسعه : طراحی لایه دسترسی به داده ها در یک برنامه تجاری معولاً زمان قابل توجهی را به خود اختصاص می دهد و کارهای تکراری مثل درج، به روز رسانی، حذف و خواندن رکوردهای دیتابیس به وفور در آن یافت می شود. استفاده از یک ORM می تواند زمان طراحی لایه دسترسی به داده ها را کاهش دهد یا حتی در مواردی نیاز شما به این لایه را از بین ببرد و شما را از نوشتن کدهای تکراری برای انجام اعمال بر روی دیتابیس راحت کند. اگر وقت زیادی صرف نوشتن کوئری های SQL به صورت رشته ای برای خواندن رکوردها و استفاده از آبجکت های ADO.NET برای درج، به روز رسانی یا حذف داده های یک دیتابیس می کنید، بهتر است در رویه برنامه نویسی خود تجدید نظر کنید و بقیه مزایای استفاده از یک ORM را تا انتها بخوانید!

2- رعایت الگوی طراحی شیء گرا : تفاوت ماهیت دیتابیس های رابطه ای با الگوی شیء گرا همیشه برای برنامه نویسان معضل بزرگی بوده و هست. کار اصلی ORM این است که جدوال رابطه ای یک دیتابیس را به کلاس های شیء گرا و بالعکس تبدیل کند و مدل سازی های مورد نیاز را به صورت استاندارد انجام دهد. هرچند در این روش نمی توان از برخی مفاهیم مهم طراحی شیء گرا مثل ارث بری یا چند ریختی استفاده کرد اما برنامه نویس را مجبور خواهد کرد تا حداقل قوانین های طراحی شیء گرایی را در پروژه خود لحاظ کند. استفاده از الگوی طراحی OOP باعث کاهش پیچیدگی پروژه و آسان تر شدن نگهداری کد و اعمال تغییرات بر روی آن خواهد شد.

3- کاهش پیچیدگی پروژه : شاید در ابتدا استفاده از یک ORM برای طراحی یک پروژه بزرگ ترسناک به نظر برسد! اما در واقع ORM برای کاهش پیچیدگی توسعه یک پروژه بوجود آمده است. استفاده از کلاس های شیء گرا برای کار با ساختار پایگاه داده برای یک برنامه نویس دات نت بسیار راحت تر از سر و کله زدن با کوئری های SQL برای رسیدن به نتایج مورد نظر یا انجام عملیات بر روی دیتابیس خواهد بود. در واقع کدهای مورد استفاده در پروژه ای که با یک ORM توسعه داده شده است به مراتب خواناتر از پروژه های دیگر است و حتی یک فرد غیر برنامه نویس نیز منظور کد را خواهد فهمید.

4- راحت شدن از دست SQL : برای کار کردن با جداول یک پایگاه داده زبان SQL زبان بی نقصی است، اما زمانی که قرار باشد از آن در یک زبان برنامه نویسی شیء گرا مثل سی شارپ استفاده شود، واقعاً عذاب آور خواهد بود. فرض کنید در تمام پروژه خود از دستورات SQL در متغیرهای string استفاده کرده اید، حال با تغییر نام یک فیلد بایستی به دنبال رشته نام فیلد مورد نظر، کل پروژه را بگردید و رشته جدید را جایگزین آن کنید و این کار به صورت خودکار انجام نخواهد شد. کامپایلر هیچ نوع کنترلی بر روی رشته های  SQL ندارد و یک اشتباه تایپی می تواند باعث ایجاد خطای در حال اجرا شود. استفاده از ORM می تواند شما را شر SQL راحت کند!

5- طراحی استاندارد لایه دسترسی به داده ها : در پیاده سازی ORMهای موجود تمام تجربه های موفق لحاظ شده اند و در نتیجه کدهای تولید شده توسط آن ها کاملاً بهینه و استاندارد هستند. ORM باعث می شود تا شما و بقیه اعضای تیم از یک استاندارد خاص برای طراحی لایه دسترسی به داده های خود پیروی کنید و در نتیجه بازدهی بهتری را شاهد باشید. این مزیت در آخر باعث بوجود آمدن یک ساختار مناسب در لایه دسترسی به داده های پروژه شما خواهد شد.

6- امکان استفاده از LINQ : در دات نت فریم ورک می توانید از زبان LINQ برای اجرای کوئری های مختلف در هنگام استفاده از یک ORM بهره ببرید. با این کار کامپایلر کنترل کاملی بر روی کوئری های نوشته شده دارد و تمام خطاها را شناسایی و گزارش خواهد کرد. به علاوه کوئری های نوشته شده در این حالت از خوانایی بسیار بالاتری برخوردار خواهند بود و می توانید از قابلیت های IntelliSense ویژاول استادیو برای بالا بردن سرعت کدنویسی و کاهش خطاهای انسانی بهره ببرید.

7- ORMها آزمایش خود را پس داده اند : در حال حاضر تعداد بسیار زیادی از پروژه های اوپن سورس پلت فرم دات نت بر پایه یک ORM توسعه یافته اند. با یک جستجوی کوچک می توانید لیست بلند بالایی از این پروژه ها را مشاهده کنید. تجربه های خوب بسیار زیادی هم از پروژه های تجاری که از ORM برای دسترسی به داده ها استفاده کرده اند در اینترنت وجود دارد. این نشان می دهد که ORMها آزمایش خود را پس داده اند و برای استفاده در پروژه های واقعی به اندازه کافی قابل اعتمادند.

8- نگهداری از کد و تغییر آن در دراز مدت آسان تر می شود : به علت پشتیبانی ORMها از الگوی طراحی شیء گرا و دیگر الگوهای طراحی در توسعه نرم افزار و تولید کدهای استاندارد، نگهداری از کدهای نوشته شده و تغییر آن ها در طولانی مدت بسیار آسان تر خواهد شد. کدهای نوشته شده بر مبنای یک ORM معمولاً بسیار واضح هستند و تغییر آن ها اگر به صورت استاندارد نوشته شده باشند، اصلاً سخت نخواهد بود.

9- استفاده از قابلیت Refactoring : فرض کنید نیاز دارید تا نام چند فیلد یا جدول را در دیتابیس خود تغییر دهید. اگر از ADO.NET و کدهای SQL برای طراحی لایه داده های خود استفاده کرده باشید، برای انجام این تغییرات در کدهای خود نمی توانید از قابلیت Refactoring ویژوال استادیو استفاده کنید تا به صورت اتوماتیک این کارها انجام شود. اما با استفاده از یک ORM، تغییر دادن یک موجودیت باعث به روز رسانی تمامی ارجاع های آن موجودیت در کل پروژه توسط قابلیت Refactoring ویژوال استادیو خواهد شد. این قابلیت می تواند خطاهای انسانی را فوق العاده کاهش و سرعت توسعه را افزایش دهد.

10 – عدم وابستگی به یک دیتابیس خاص : هر چند این نکته در مورد تمام ORMهای مخصوص دات نت فریم ورک درست نیست، اما در حال حاضر ORMهای خوبی مثل NHibernate و Entity Framework از چندین دیتابیس پر استفاده پشتیبانی می کنند. البته EF در حال حاضر به صورت رسمی فقط از SQL Server پشتیبانی می کند!

farasun.wordpress.com

توصیه می شود مطالبی که قبلاً دوستان در این مورد نوشته بودند را مطالعه کنید :

farasun.wordpress.com

عناوین دیگر برای این نوشته : چرا باید از یک ORM در دات نت فریم ورک استفاده کرد؟ | مزیت های استفاده از ORM در دات نت فریم ورک

PHP برای برنامه نویسان ASP.NET – قسمت هشتم

قسمت اولقسمت دوم قسمت سوم قسمت چهارم قسمت پنجمقسمت ششم قسمت هفتم

شیء گرایی در PHP

کلاس در PHP مجموعه ای از متغیرها و توابع است که سینتاکس نوشتن آن برای شما برنامه نویسان دات نت بسیار آشناست. در PHP برخلاف زبان های تحت دات نت شما نمی توانید یک کلاس را در چند فایل جداگانه تعریف کنید، شما باید کلاس خود را در یک فایل و در یک بلاک PHP تعریف کنید. با شروع نسخه 5، مدل شیء گرایی PHP به کلی تغییر کرد و کارایی آن در زمینه شیء گرایی بالاتر رفت و ویژگی های جدید به آن اضافه شد. به هر حال در این مطلب کوتاه که مخصوص برنامه نویسان ASP.NET نوشته شده، ما قصد داریم بدون توضیح اصطلاحات شیء گرایی یا توضیح مفاهیم آن، شما را با نحوه نوشتن یک کلاس در PHP آشنا کنیم. بهتر است با یک مثال از سی شارپ که برای شما قابل لمس باشد شروع کنیم :

class Human
{
private string _name;
public string Name;
public string Family;
public int Height;
public int Weight;
public int Age;

public Human()
{
Console.WriteLine("a Human Created.");
}
}

class Student: Human
{
public long ID { get; set; }
public string Grade;

public Student()
{
Console.WriteLine("a Student Created.");
}

public void DisplayInformations()
{
Console.WriteLine(this.ID.ToString());
Console.WriteLine(this.Name);
Console.WriteLine(this.Family);
Console.WriteLine(this.Age);
Console.WriteLine(this.Grade);
}

~Student()
{
Console.WriteLine("a Student Destroyed.");
}
}

اگر برنامه نویس سی شارپ باشید به راحتی منظور کدهای بالا را می فهمید. یک کلاس پایه به نام Human با چند فیلد و یک متد سازنده ساختیم، سپس یک کلاس به نام Student را از آن مشتق کردیم. کلاس فرزند نیز دارای چند فیلد، یک سازنده و یک متد برای چاپ مقادیر فیلدهایش است. حالا می خواهیم این دو کلاس را در PHP پیاده سازی کنیم.

<?php
class Human {
private $_name;
public $Name;
public $Family;
public $Height;
public $Weight;
public $Age;

function __construct() {
print "a Human Created.";
}
}

class Student extends Human {
public $ID;
public $Grade;

function __construct() {
parent::__construct();
print "a Student Created.";
}

function DisplayInformations() {
print $this->ID;
print $this->Name;
print $this->Family;
print $this->Age;
print $this->Grade;
}

function __destruct() {
print "a Student Destroyed.";
}
}
?>

همانطور که می بینید سینتاکس PHP برای تعریف یک کلاس شبیه به سی شارپ است. خب به هر حال هر دو از خانواده زبان C هستند! در PHP نیز شما می توانید از private, public و protected برای تعیین چگونگی دسترسی به متغیرها (فیلدها) و توابع استفاده کنید. هنگامی که هیچکدام از این ها را در خط تعریف متغیر یا تابع ذکر نکنید به صورت پیش فرض آن عضو به عنوان public در نظر گرفته خواهد شد. در PHP هر کلاس تشکیل شده از تعدادی متغیر و تابع و در صورت نیاز سازنده و مخرب. سازنده یا Constructor کلاس در سی شارپ متد همنام با خود کلاس است. همانطور که در مثال بالا مشاهده می کنید، هر دو کلاس متدی همنام با خودشان دارند که هنگام ساخته شدن در زمان اجرا صدا زده می شوند. در PHP نسخه های قبل از 5، تعریف سازنده کلاس به همین صورتی که در سی شارپ است، بود. در نسخه 5 شما باید تابعی به نام __construct() برای پیاده سازی سازنده کلاس تعریف کنید.

برای ارث بری از یک کلاس در PHP ازکلمه کلیدی extends به همان صورتی که در مثال مشاهده می کنید، استفاده می کنیم. این یعنی کلاس Student تمام خاصیت ها (در اینجا متغیرها) و توابع کلاس پدر خود یعنی کلاس Human را به علاوه متغیرها و توابعی که در بلاک خودش تعریف شده را دارد. برای اینکه هنگام ساخته شدن کلاس Student تابع سازنده کلاس پدرش Human نیز اجرا شود باید آن را به صورت parent::__construct() صدا بزنید. تابع مخرب در PHP نیز بوسیله نوشتن تابع __destruct() امکان پذیر است.

استفاده از کلاس

برای استفاده از یک کلاس به راحتی همانند سی شارپ ابتدا از آن بوسیله کلمه new نمونه سازی کنید و از توابع مورد نیاز خود استفاده کنید.

<?php
$objStudent = new Student();
$objStudent->Name = "Iman";
$objStudent->Family = "Nemati";
$objStudent->Age = "22";
$objStudent->DisplayInformations();
?>

هنگام new کردن یک کلاس، تابع __construct() آن کلاس اجرا می شود. برای دسترسی به اعضای public یک کلاس در PHP باید از عملگر <- بلافاصله پس از نام متغیر کلاس استفاده کنید.

اعضای Static

همانند سی شارپ، در PHP هم با نوشتن کلمه کلیدی static می توانید یک تابع یا یک متغیر را به عنوان عوض استاتیک معرفی کنید. تعریف یک متد یا یک خصوصیت به صورت استاتیک آن ها را بدون نیاز به ساخت یک نمونه از کلاس در خارج از کلاس، قابل دستیابی می کند. فقط برای استفاده از اعضای استاتیک یک کلاس به جای عملگر -> باید از عملگر :: استفاده کنید.

<?php
class Sample {
public static function StaticMethod() {
//Some Function
}
}

//
Sample::StaticMethod();
?>

در کدنویسی های معمولی PHP شاید نیازی به استفاده از کلاس ها پیدا نکنید اما برای حرفه ای تر شدن و بعدها برای استفاده از فریم ورک های PHP نیاز به داشتن دید شیء گرایی و نحوه تعریف و استفاده از کلاس ها خواهید داشت. خوشبختانه برنامه نویسان ASP.NET از نظر شیء گرایی دید نسبتاً مناسب و خوبی دارند، زیرا به صورت پیش فرض تمام برنامه های آن ها بر اساس کلاس ها و مفاهیم شیء گرایی توسعه داده می شوند. احتمالاً آموزش PHP برای برنامه نویسان ASP.NET را ادامه نخواهیم داد. از اول هم قرار نبود جلوتر از این برویم. نسخه PDF کامل تر این سری نوشته ها به زودی بر روی وبلاگ قرار خواهد گرفت. امیدوارم این نوشته ها برای شما مفید بوده باشند.

farasun.wordpress.com

مشترک فید فراسان شوید!