• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
dal و dao چیست؟
#1
سلام

میخواستم بدونم dal و dao چیست؟
کاربردشون در کجاست؟
میشه از هر کدوم یک نمونه معرفی کنید؟

ممنون Smile
  پاسخ
تشکر شده توسط :
#2
سلام

در برنامه نویسی NTier لایه DAL به Data Access Layer شناخته میشه که در اصل Data Abstraction Layer هست. در این لایه شما برنامه نویس رو از درگیری با دیتابیس رهاش میکنی. یعنی یک مفهوم سطح بالا از دیتابیس به برنامه نویس میدی و برنامه نویس از این به بعد با این مفاهیم سروکار خواهد داشت. دقیقا همون کاری که یه ORM برای شما انجام میده. برای مثال شما اگه بخوای یک رکوردی رو توی دیتابیس درج کنی مجوری از دستور INSERT استفاده کنی. پارامترها رو ست کنی. کانکشن رو تنظیم کنی و کارهایی از این قبیل که در برنامه نویسی های سطح پایین انجام میشه. شما در DAL هم این کارهارو انجام خواهی داد با این تفاوت که لایه ها از همدیگه جدا خواهند شد.

ORM ها این تکنیک رو به نحو کاملا مطلوبی پیاده سازی میکنن. یه سری به تاپیک های اونها بزنید....

اما DAO که گفتید. نمیدونم قبل از اینکه این مفهوم به گوشتون بخوره مفهوم DTO یا Data Transfer Object به گوشتون خورده یا نه. یه مختصر توضیح در این مورد بدم که بحث براتون باز بشه. فرض کنید شما یه Table به نام Person دارید شامل سه فیلد ID, FirstName و LastName. شما برای درج و واکشی یه رکورد در/از این جدول چیکار میکنید؟
کد:
class PersonContext
{
    public function Add($first_name, $last_name)
    {
          $query = ....
          mysql_query($query, $link);
     }

     public function Select($id)
     {
           $query = "select * from person where id=$id";
           return mysql_fetch_array($query, $link);
     }
}

البته در اینجا از اصول دیگر برنامه نویسی همچون Exception Handling‌ صرف نظر کردم. در مورد درج که خوب همه چیز برای یه برنامه نویس واضح هست و مشکلی به وجود نمیاره. اما در مورد تابع Select. برای استفاده از این تابع باید به برنامه نویس به این صورت عمل کنه:
کد:
$context = new PersonContext();
$result = $context->Select(10);
echo $result["first_name"];

وجود اندیس در اینجا لازمه دانش برنامه نویس از ساختار دیتابیس هست. یعنی برنامه نویس باید بدونه که فیلد first_name توی جدول هست تا بتونه اون رو به عنوان اندیس به کار ببره. ولی ما در برنامه نویسی چندلایه(یا به کار گیری ORM ها یا هر ابزار و Pattern دیگه) برنامه نویس رو از دغدغه کار با دیتابیس رها میکنیم. در ضمن وقتی از یک Join استفاده میکنید دیگه کار خرابتر از این میشه.
مفهوم DTO به ما میگه که شما تمام فیلدهایی که در یک table هست و برنامه نویس به اون احتیاج داره داخل یه کلاس Wrap کن و به عنوان خروجی برگردون. به چه صورت:
کد:
class Person
{
    public $id;
    public $first_name;
    public $last_name;
}

class PersonContext
{
    public function Select($id)
    {
        $query = "...";
        $result = mysql_fetch_assioc($query, $link);
        $person = new Person();
        $person->id = $result['id'];
        $person->first_name = $result['first_name'];
        $person->last_name = $result['last_name'];
        return $person;
    }
}

کار برنامه نویس در اینجا به این صورت خواهد بود:
کد:
$context = new PersonContext();
$person = $context->Select(10);
echo $person->first_name;

پ.ن: در این مورد میشه توضیحات کاملتری رو ارائه کرد. میتونید با جستجو به موارد بیشتری از کاربردها دست پیدا کنید. موفق باشید/
The difference between stupidity and genius is that genius has its limits. - Albert Einstein

"SUCCESS IS NOT A DESTINATION , IT'S A JOURNEY"
غایب
  پاسخ
تشکر شده توسط : Reza ali786 mohsenkw terma farhadfery


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان