نمایش نتایج 1 تا 11 از 11

نام تاپیک: الگوی واحد کار ، کدفرست و ریپوزیتوری

  1. #1
    کاربر جدید آواتار Dream8
    تاریخ عضویت
    آبان 1393
    محل زندگی
    مازندران
    پست
    20

    Question الگوی واحد کار ، کدفرست و ریپوزیتوری

    الگوی واحد کار، کدفرست و ریپوزیتوری کدام روش بهتر است؟مفاهیم و توضیح هرکدام را ذکر کنید.

  2. #2

    نقل قول: الگوی واحد کار ، کدفرست و ریپوزیتوری

    توضیحات درباره Unit Of Work و Repository و مثال های اون : http://bit.do/designPatterns

    Code First :
    در روش Code First شما کار را با ساختن کلاسهای مورد نظر شروع می کنید. سپس با ایجاد یک کنترلر برای این کلاس و انتخاب New Context یک کلاس Context جدید برای شما ایجاد می شود. سپس در web.config میبایست Connection String مربوطه (هم نام Context) را ویرایش کنید تا مشخصات اتصال به دیتابیس معین باشد. با اولین اجرای برنامه و رفتن به کنترلر مورد نظر دیتابیس و جداول مربوطه ایجاد خواهند شد!
    آخرین ویرایش به وسیله Moien Tajik : سه شنبه 16 شهریور 1395 در 19:58 عصر

  3. #3
    کاربر جدید آواتار Dream8
    تاریخ عضویت
    آبان 1393
    محل زندگی
    مازندران
    پست
    20

    نقل قول: الگوی واحد کار ، کدفرست و ریپوزیتوری

    ابتدا از پاسختون تشکر میکنم.
    من در ابتدا با DBFirst کار میکردم اخیرا از کدفرست، میخوام بدونم کدوم روش بهتره،آیا کدفرست هم از الگوی کار پیروی میکنه؟ الگوی کار بهتره یا ریپوزیتوری؟
    مطالعه کردم اما اونطور که باید متوجه نشدم

  4. #4

    نقل قول: الگوی واحد کار ، کدفرست و ریپوزیتوری

    میخوام بدونم کدوم روش بهتره
    جایی دیده نشده که بگن Code First بهتره یا Database First ، اما اخیرا بیشتر افراد به سمت Code first میرن و با اون کار میکنن.

    آیا کدفرست هم از الگوی کار پیروی میکنه؟
    در Code First هم از Repository و هم از Unit Of Work میتونید استفاده کنید .

    الگوی کار بهتره یا ریپوزیتوری؟
    بین این 2 الگو هم همینطور هست که بهتر وجود نداره . هرکدوم در بخش خودشون استفاده میشن . Unit Of Work برای عملیات Save و Repository برای Update , Add , ... استفاده میشن.
    آخرین ویرایش به وسیله Moien Tajik : سه شنبه 20 فروردین 1398 در 00:23 صبح

  5. #5
    کاربر جدید آواتار Dream8
    تاریخ عضویت
    آبان 1393
    محل زندگی
    مازندران
    پست
    20

    نقل قول: الگوی واحد کار ، کدفرست و ریپوزیتوری

    از پاسختون متشکرم.میشه بگید فرق
    Unit Of Work و Repository چیه؟ با اینکه با هردو میشه عملیات افزودن،حذف،ذخیره و... انجام داد اما در مقاله ای خوندم که میگفت از Repository استفاده نکنید!


  6. #6
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: الگوی واحد کار ، کدفرست و ریپوزیتوری

    هر سه مورد فوق بهمراه یکدیگر معنا پیدا میکنند یعنی از Unitofwork و Repository در کنار کلاسهای poco یا همون code first یک مجموعه تشکیل داده و عملیات CRUD کار با بانک اطلاعاتی را انجام می دهیم
    مسلما Code First اجماع نظر و محبوب اکثر برنامه نویسا هست بخاطر انعطاف پذیری و مدیریت بیشتر و راحتی تغییرات برنامه هست
    ولی در dbfirst اگر از روی دیتابیس مهندسی معکوس بشه و تبدیل به code first هم عالیه
    وقتی ما چند عملیات متعدد مثلا درج حذف یا ویرایش داریم که ممکنه همزمان نیاز داشته باشیم در دیتابیس این عملیاتها رو ثبت کنیم
    مثلا یک فاکتور فروش در نظر بگیرید
    1- سربرگ فاکتور
    2- جزئیات و اقلام فاکتور
    3- جزئیات پرداخت وجه فاکتور
    4- پرسنل
    اگر 3 مورد اول 3 تا موجودیت و یا سه تا جدول بهم متصل در بانک برنامه باشند و چنانچه بخواهیم یک فاکتور فروش ثبت کنیم و همزمان ثبت رکورد جدید در جدول اشخاص هم داشته باشیم مسلما نیاز داریم برای همه این عملیات ها یک وهله سازی جدید بر روی دیتاکانتکست برنامه داشته باشیم

    var context= new ApplicationContext()
    {
    var person= new personnel{
    id=1000,
    name="ali",
    .
    .
    .
    }

    context.personnel.AddOrUpdate(person)
    //عملیات ویرایش پرسنل و ریختن در حافظه
    Context.SaveChange()//ثبت در دیتابیس
    }



    var context= new ApplicationContext()
    {
    //عملیات ثبت سند فاکتور و ریختن در حافظه
    Context.SaveChange() اعمال تغییرات در دیتابیس
    }

    اینجا 2 نمونه از دیتاکانتکست برنامه ساخته شده و بعد از عمل ذخیره سازی دو تراکنش بر روی بانک برنامه توسط متد savechange که از متدهای ذاتی entity framework هست انجام میشه
    برای ایتکه تبدیل به یک تراکنش واحد بشه و مراجعات به بانک برنامه کمتر شده و جامعیت بانک نیز باید در نظر داشته باشیم
    برای این کار از الگویی بنام Unit Of work بهره میبریم تا همه عملیات با یک دیتاکانتکس واحد و طی یک SaveChange درون دیتابیس ذخیره شود.
    نه اینکه به ازای هر عمل یک دیتاکانتکست جدا ساخته و استفاده کنیم
    معمولا از اینترفیسها interface برای الگوی واحد کار استفاده میشه
    به عنوان مثال یک interface میسازیم

    public interface IUnitOfWork
    {
    } int SaveAllChanges();


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

    public class ApplicationDbContext : DbContext,IUnitOfWork
    {

    }



    و در نهایت وهله سازی دیتاکانتکست در قسمت جنرال برنامه یا یک جای عمومی بدینصورت داشته باشیم

    IUnitOfWork uow= new ApplicationDbContext();



    فقط کافیه

    uow.SaveAllChanges();

    رو درون متدهامون صدا بزنیم و به این میگن UnitOfWork
    و اما Repository
    اگر درون کدهای بالا نگاه کنید نوشته شده عملیات ویرایش پرسنل یا ثبت سند فاکتور

    context.personnel.AddOrUpdate(person)

    متد AddOrUpdate یکی از توابع ef برای درج و ویرایش رکورد هست
    معمولا برنامه نویسها میان کلاسهای جدا به ازای هر کلاس ef میسازند و متدهایی درونش پیاده سازی میکنند و اسمش میزارن Repository
    در برخی موارد نیازی هم نیست برای ساختن Repository
    مثلل نوشتن برنامه ساده یا کوچک
    البته هدف از Repository یکی کاهش کدنویسی و تکرار کدهای شبیه به هم هست و دیگری برای اعمال تزریق وابستگی و لایه بندی نرم افزار هست

    public class PersonRepository
    {
    public void AddPerson(personnel p)
    {
    DbSet<personnel> i;
    i.AddOrUpdate(p)
    }
    }

    personnel همون کلاس code first هست
    DbSet یک کلاس جنریک درون Ef هست و کوئری های ef که معادل کوئری sql هست توسط اون ساخته شده و روی بانک برنامه اعمال میشه

    و در نهایت متد Addperson توی کلاسها یا جاههای دیگه صدا میزنند
    البته این رو بصورت ساده و خلاصه گفتم
    Repository خوب و کارامدتر با interface ها پیاده سازی میشن و مباحثی همچون تزریق وابستگی یا dependency injection هم به میون میاد که بحث طولانی تری داره ولی خیلی کاربرد مفید و جذابی داره
    آخرین ویرایش به وسیله ali_md110 : پنج شنبه 25 شهریور 1395 در 08:39 صبح

  7. #7
    کاربر جدید آواتار Dream8
    تاریخ عضویت
    آبان 1393
    محل زندگی
    مازندران
    پست
    20

    نقل قول: الگوی واحد کار ، کدفرست و ریپوزیتوری

    نقل قول نوشته شده توسط ali_md110 مشاهده تاپیک
    هر سه مورد فوق بهمراه یکدیگر معنا پیدا میکنند یعنی از Unitofwork و Repository در کنار کلاسهای poco یا همون code first یک مجموعه تشکیل داده و عملیات CRUD کار با بانک اطلاعاتی را انجام می دهیم
    مسلما Code First اجماع نظر و محبوب اکثر برنامه نویسا هست بخاطر انعطاف پذیری و مدیریت بیشتر و راحتی تغییرات برنامه هست
    ولی در dbfirst اگر از روی دیتابیس مهندسی معکوس بشه و تبدیل به code first هم عالیه
    وقتی ما چند عملیات متعدد مثلا درج حذف یا ویرایش داریم که ممکنه همزمان نیاز داشته باشیم در دیتابیس این عملیاتها رو ثبت کنیم
    مثلا یک فاکتور فروش در نظر بگیرید
    1- سربرگ فاکتور
    2- جزئیات و اقلام فاکتور
    3- جزئیات پرداخت وجه فاکتور
    4- پرسنل
    اگر 3 مورد اول 3 تا موجودیت و یا سه تا جدول بهم متصل در بانک برنامه باشند و چنانچه بخواهیم یک فاکتور فروش ثبت کنیم و همزمان ثبت رکورد جدید در جدول اشخاص هم داشته باشیم مسلما نیاز داریم برای همه این عملیات ها یک وهله سازی جدید بر روی دیتاکانتکست برنامه داشته باشیم

    var context= new ApplicationContext()
    {
    var person= new personnel{
    id=1000,
    name="ali",
    .
    .
    .
    }

    context.personnel.AddOrUpdate(person)
    //عملیات ویرایش پرسنل و ریختن در حافظه
    Context.SaveChange()//ثبت در دیتابیس
    }



    var context= new ApplicationContext()
    {
    //عملیات ثبت سند فاکتور و ریختن در حافظه
    Context.SaveChange() اعمال تغییرات در دیتابیس
    }

    اینجا 2 نمونه از دیتاکانتکست برنامه ساخته شده و بعد از عمل ذخیره سازی دو تراکنش بر روی بانک برنامه توسط متد savechange که از متدهای ذاتی entity framework هست انجام میشه
    برای ایتکه تبدیل به یک تراکنش واحد بشه و مراجعات به بانک برنامه کمتر شده و جامعیت بانک نیز باید در نظر داشته باشیم
    برای این کار از الگویی بنام Unit Of work بهره میبریم تا همه عملیات با یک دیتاکانتکس واحد و طی یک SaveChange درون دیتابیس ذخیره شود.
    نه اینکه به ازای هر عمل یک دیتاکانتکست جدا ساخته و استفاده کنیم
    معمولا از اینترفیسها interface برای الگوی واحد کار استفاده میشه
    به عنوان مثال یک interface میسازیم

    public interface IUnitOfWork
    {
    } int SaveAllChanges();


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

    public class ApplicationDbContext : DbContext,IUnitOfWork
    {

    }



    و در نهایت وهله سازی دیتاکانتکست در قسمت جنرال برنامه یا یک جای عمومی بدینصورت داشته باشیم

    IUnitOfWork uow= new ApplicationDbContext();



    فقط کافیه

    uow.SaveAllChanges();

    رو درون متدهامون صدا بزنیم و به این میگن UnitOfWork
    و اما Repository
    اگر درون کدهای بالا نگاه کنید نوشته شده عملیات ویرایش پرسنل یا ثبت سند فاکتور

    context.personnel.AddOrUpdate(person)

    متد AddOrUpdate یکی از توابع ef برای درج و ویرایش رکورد هست
    معمولا برنامه نویسها میان کلاسهای جدا به ازای هر کلاس ef میسازند و متدهایی درونش پیاده سازی میکنند و اسمش میزارن Repository
    در برخی موارد نیازی هم نیست برای ساختن Repository
    مثلل نوشتن برنامه ساده یا کوچک
    البته هدف از Repository یکی کاهش کدنویسی و تکرار کدهای شبیه به هم هست و دیگری برای اعمال تزریق وابستگی و لایه بندی نرم افزار هست

    public class PersonRepository
    {
    public void AddPerson(personnel p)
    {
    DbSet<personnel> i;
    i.AddOrUpdate(p)
    }
    }

    personnel همون کلاس code first هست
    DbSet یک کلاس جنریک درون Ef هست و کوئری های ef که معادل کوئری sql هست توسط اون ساخته شده و روی بانک برنامه اعمال میشه

    و در نهایت متد Addperson توی کلاسها یا جاههای دیگه صدا میزنند
    البته این رو بصورت ساده و خلاصه گفتم
    Repository خوب و کارامدتر با interface ها پیاده سازی میشن و مباحثی همچون تزریق وابستگی یا dependency injection هم به میون میاد که بحث طولانی تری داره ولی خیلی کاربرد مفید و جذابی داره

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

  8. #8
    کاربر دائمی آواتار hamzehsh
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    https://samanhis.ir
    سن
    42
    پست
    166

    نقل قول: الگوی واحد کار ، کدفرست و ریپوزیتوری

    سلام
    من در مورد Unit of work و Repository خیلی مطلب خوندم این موضوعی هم که شما مطرح فرمودید رو مطالعه کردم و جالب بود برام
    موضوعات آموزشی رو هم مطالعه کردم
    همه اول Repostitory ها رو میسازند و سپس UOW رو آموزش میدهند
    یک موضوع رو متوجه نشدم

    من یک دیتابیس دارم یک کلاس Ado.Net entity رو به پروزه اضافه کردم
    حالا با توجه به الگوی Unit Of Work
    این قطعه کد رو مینویسم

    private CrudGenericRepository<Person> _Person;
    public CrudGenericRepository<Person> Person
    {
    get
    {
    if (_Person== null)
    {
    _Person= new CrudGenericRepository<Person>(_db);
    }
    return _Person;
    }
    }


    وقتی که اینجا دارم مستقیم به خود جدول person اشاره میکنم پس نقش repository چیه؟
    و کجای این قضه به Repository ها مربوط میشه؟
    اصلا چرا باید بسازمشون؟

  9. #9
    کاربر دائمی آواتار hamzehsh
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    https://samanhis.ir
    سن
    42
    پست
    166

    نقل قول: الگوی واحد کار ، کدفرست و ریپوزیتوری

    سلام
    من در مورد Unit of work و Repository خیلی مطلب خوندم این موضوعی هم که شما مطرح فرمودید رو مطالعه کردم و جالب بود برام
    موضوعات آموزشی رو هم مطالعه کردم
    همه اول Repostitory ها رو میسازند و سپس UOW رو آموزش میدهند
    یک موضوع رو متوجه نشدم

    من یک دیتابیس دارم یک کلاس Ado.Net entity رو به پروزه اضافه کردم
    حالا با توجه به الگوی Unit Of Work
    این قطعه کد رو مینویسم

    private CrudGenericRepository<Person> _Person;
    public CrudGenericRepository<Person> Person
    {
    get
    {
    if (_Person== null)
    {
    _Person= new CrudGenericRepository<Person>(_db);
    }
    return _Person;
    }
    }


    وقتی که اینجا دارم مستقیم به خود جدول person اشاره میکنم پس نقش repository چیه؟
    و کجای این قضه به Repository ها مربوط میشه؟
    اصلا چرا باید بسازمشون؟

  10. #10
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1394
    پست
    38

    نقل قول: الگوی واحد کار ، کدفرست و ریپوزیتوری

    این قسمت زمانی مفید که توی یه اکشن با چندتا جدول سر و کار داری

  11. #11
    کاربر دائمی آواتار rahmatipoor
    تاریخ عضویت
    شهریور 1392
    محل زندگی
    ---
    پست
    418

    نقل قول: الگوی واحد کار ، کدفرست و ریپوزیتوری

    مطلب زیر توی سایت مایکروسافت درج شده (لینک صفحه)
    گفته که برای ef همیشه بهترین انتخاب نیست که از repozitory و unit of work استفاده بشه و دلایلش رو هم آورده

    Create an abstraction layer

    Many developers write code to implement the repository and unit of work patterns as a wrapper around code that works with the Entity Framework. These patterns are intended to create an abstraction layer between the data access layer and the business logic layer of an application. Implementing these patterns can help insulate your application from changes in the data store and can facilitate automated unit testing or test-driven development (TDD). However, writing additional code to implement these patterns isn't always the best choice for applications that use EF, for several reasons:


    • The EF context class itself insulates your code from data-store-specific code.
    • The EF context class can act as a unit-of-work class for database updates that you do using EF.
    • EF includes features for implementing TDD without writing repository code.
    آخرین ویرایش به وسیله rahmatipoor : شنبه 17 فروردین 1398 در 09:01 صبح

تاپیک های مشابه

  1. مشکل الگوی واحد کار
    نوشته شده توسط micro_bhk در بخش ASP.NET MVC
    پاسخ: 10
    آخرین پست: پنج شنبه 08 بهمن 1394, 20:06 عصر
  2. چگونه دانش دلفی را برای یادگیری ویژوال بیسیک به کار بگیریم..
    نوشته شده توسط RezaBS در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 2
    آخرین پست: سه شنبه 21 شهریور 1391, 22:42 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •