شی دسترسی به داده

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

اگر چه این الگوی طراحی برای بسیاری از زبان‌های برنامه‌نویسی قابل استفاده است، اما اکثراً انواع نرم‌افزار با نیازهای پایداری و بسیاری از انواع پایگاه‌های داده، به‌طور سنتی با برنامه‌های java ee هستند.

## مزایا
مزیت استفاده از اشیاء دسترسی به داده‌ها، جداسازی نسبتاً ساده بین دو بخش مهم از یک برنامه می‌باشد، اما می‌بایست هر چیزی را از هر جزء دیگر بداند و انتظار می‌رود که به‌طور مرتب و مستقل تکامل یابد. تغییر منطق کسب و کار می‌تواند بر روی رابط DAO تکیه کند، در حالی که تغییرات به منطق پایداری بر مشتریان DAO تأثیر نمی‌گذارد تا زمانی که رابط به درستی اجرا شود. تمام جزئیات ذخیره‌سازی از بقیه برنامه پنهان است (مشاهده اطلاعات پنهان). بنابراین، تغییرات احتمالی مکانیزم پایداری می‌تواند تنها با اصلاح یک پیاده‌سازی DAO باشد در حالی که بقیه برنامه تحت تأثیر قرار نمی‌گیرد. DAOها به عنوان واسطه بین برنامه و پایگاه داده عمل می‌کنند. آن‌ها اطلاعات را بین اشیاء و پرونده‌های پایگاه داده به عقب و جلو حرکت می‌دهند. تست واحد کد را با جایگزینی DAO با آزمون دو برابر در آزمون تسهیل می‌شود.
در زمینه غیر متناهی زبان برنامه‌نویسی جاوا، Data Object Access به عنوان یک مفهوم طراحی می‌تواند به روش‌های مختلفی اجرا شود. این می‌تواند یک رابط کاربری نسبتاً ساده باشد که بخش‌های دسترسی داده را از منطق برنامه، به چارچوب‌ها و محصولات تجاری متمایز می‌کند. پارادایم‌های کدگذاری DAO می‌تواند مهارت خاصی را به وجود آورد. فناوری‌هایی مانند Java Persistence API و Enterprise JavaBeans در سرورهای نرم‌افزاری ساخته شده‌اند و می‌توانند در برنامه‌های کاربردی که از یک سرور کاربردی JavaEE استفاده می‌کنند استفاده شود. محصولات تجاری مانند TopLink بر مبنای نقشه‌برداری شیء-ارتباطی (ORM) در دسترس هستند. نرم‌افزار منبع باز محبوب ORM شامل Doctrine, Hibernate, iBATIS و پیاده‌سازی JPA مانند Apache OpenJPA می‌باشد.

## معایب
معایب بالقوه استفاده از DAO عبارتند از انتزاع نشتی، تکثیر کد و انتزاع معکوس و به‌طور خاص، انتزاع DAO به عنوان یک جسم معمولی جاوا می‌تواند هزینه‌های بالا برای هر دسترسی به پایگاه داده را پنهان کند و همچنین می‌تواند توسعه دهندگان را مجبور کند تا چندین درخواست پایگاه داده را برای بازیابی اطلاعات که در غیر اینصورت در یک عملیات واحد با عملیات set SQL معمولی حاصل می‌شود. اگر یک برنامه نیاز به چندین DAO داشته باشد، ممکن است خود را تکرار کند که اساساً ایجاد، خواندن، به روز رسانی و حذف کد برای هر DAO باشد. با این وجود، از این کد دیجیتالی ممکن است اجتناب شود، با اجرای یک DAO عمومی که این عملیات معمول را مدیریت می‌کند.

## مثال از دنیای واقعی
موقعیتی را تصور کنید که شرکت موفق شما قرارداد را برای ایجاد یک برنامه برای دو مشتری مختلف به دست‌آورد. خصوصیات تقریباً مشابه با وجود برخی تفاوت‌های جزئی وجود دارد. این طرح هر چند پیچیده‌است اما هر دو از مشتریان از پایگاه‌های داده SQL استفاده می‌کنند، اما یکی تصمیم گرفت که یک اختصاصی برای آن انتخاب کند و دیگری یک جایگزین منبع باز را انتخاب کرد. این بدان معنی است که درخواست شما باید حداقل دو روش متفاوت داشته باشد. به‌طور طبیعی بسیاری از پیاده‌سازی‌های بیشتر ممکن است به عنوان مشتریان جدید ایجاد شود. بهترین انتخاب شما برای حل این مشکل حمل و نقل در jave ee خواهد بود با استفاده از یکی از الگوهای اصلی J2EE , سپس انتزاع درست و انسجام تمام دسترسی به هر منبع داده را تضمین می‌کند.

## ابزار و چارچوب
* ODB compiler-based object-relational mapping (ORM) system for C++
* ORMLite: Lightweight object-relational mapping (ORM) framework in Java for JDBC and Android
* Microsoft Entity Framework
* DBIx::Class object-relational mapping (ORM) module for Perl

## منابع

## پیوندهای بیشتر
* ''Java Persistence'' - ''The DAO Design Pattern''
* PHP best practices (Use Data Access Objects (DAO))
* [Data Access Object (English)](https://kore.fi.muni.cz/wiki/index.php?title=Data_Access_Object_(English))

رده:الگوی معماری (علم رایانه)