SlideShare uma empresa Scribd logo
1 de 9
Baixar para ler offline
Repository Pattern 
Farsi Edition 
Implementing the Repository Patterns in an ASP.NET MVC 4 Application with Entity Frame Work code First 5 
Day Telecom Developer Group 
Developer@day.ir | Http://DAY.ir
آنوزش فارسی یادگیری الگوی ریپوزیتوری 
تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام 
Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 
Day Telecom Developer Group 
Developer@day.ir | http://DAY.ir 
Page | 
2 
ت اًم خذا ذًٍ جاى خشد 
مقذم :ٍ 
ت ط سَ کلی تعذ اص ػپشی ؿذى ػالیاى هتوادی تش اًه یًَؼاى یادگشفت ا ذً تشای کا ؾّ کذ اّی صائذ خ دَ تذاتیش خاكی تی ا ذًیـ ذٌ توام تلاؽ خ دَ 
سا كشف ایي وًای ذٌ ک تا ؿًَتي کوتش کذ دس تش اًه خ دَ تیـتشیي تاصد سا اص تش اًه اّ طلة وًای ذٌ. تعذ اص ت جٍ دَ آهذى تش اًه یًَؼی ؿی گشا تش اًه یًَؼی اٍسد هشحل تاص ای ؿذ ت خل فَ تعذ اص هعشفی ؼًل جذیذ هعواسی تش اًه یًَؼی ػوت بٍ MVC دیگش کوتش ؿشکت آی ذٌ گًشی سا یافت 
خ اَ یّذ کشد ک اص هعواسی MVC اػتفاد کً ذٌ. 
ایي هقال ت ت ضَیح آه صَؽ هثحثی هذسى دس تش اًه یًَؼی ASP.net MVC4 ت اًم Repository Pattern خ اَ ذّ پشداخت ک ا لٍیي ت اٌْ 
تشیي هقال ت صتاى فاسػی دس د یًای هجاصی اػت پغ تشای دسک آى هی تایؼت اؿشاف کاهلی تش ایي ػثک تش اًه یًَؼی داؿت تاؿیذ دس گش هثاحج یٍظ جای خ اَ ذّ گشفت یادگیشی آى سا ت تش اًه یًَؼاى تا تجشت حشف ای ت كَی هی وًایین. 
الگ یً ریپ زًیت رًی چیست؟ ) What’s The Repository Pattern? :) 
هع یٌ لغ یَ سیپ صَیت سَی ت هع اٌی هخشى یا دخیش کشدى اطلاعات هی تاؿذ ؿگشدی جذیذ دس تش اًه یًَؼی هحؼ بَ هی ؿ دَ 
الگ یً ریپ زًیت رًی ي ی وًیت تست ) The Repository and Unit of Work Patterns :) 
الگ یَ سیپ صَیت سَی ی یًَت تؼت دس حقیقت لایی تیي Data Access Layer Business Logic Layer هی تاؿذ ، پیاد ػاصی ایي الگ ؿوا سا 
قادس خ اَ ذّ کشد ک تش اًه اّی خ دَ سا دس هقاتل رخیش داد اّ ػاخت اهکا اًت خ دَکاس ی یًَت تؼت اّ ایوي ایض لٍ ا عًطاف پزیش وًاییذ کذ 
کوتشی ؿًَت ت شْ تیـتشی اص آى تثشیذ. 
دس ایي هقال ػعی ؿذ اػت تا یک کلاع Repository تؼاصین ک تت اَ ذً تا تواهی ا اًَع داد اّ کاس ک ذٌ تشای ػاخت یک الگ یَ Repository ها 
یًاص ت ؿًَتي یک Interface داسین ػپغ کلاع Repository خ دَ سا ؿًَت اص کلاع Interface اسث تشی هی وًایین ت ع اٌَى هثال کلاع 
User سا تل سَ ک یٌذ ک یک داد اص عًَ Entity هی تاؿذ تشای اػتفاد اص Repository ؿوا هی تایؼت خًؼت یک Interface تشای کلاع User 
ت یٌَؼیذ کلاع User Repository خ دَ سا اص آى اسث تشی وًاییذ تؼاصیذ اها کجا ایي کلاع اّ سا ایجاد وًایین؟ وّاى ط سَ ک هی دا یًذ تعذ اص 
ػاختي یک پش طٍ MVC دس یٍظ اٍل اػتذیَ پ ؿَ اّی Model Controller View کاهلا ؿ اٌخت ؿذ ا ذً کاسایی آى اّ سا تش اًه یًَؼاى 
MVC هی دا ذًٌ اها تشای ایجاد کلاع اّی Repository هی تایؼت اص الگ یَ هایکش ػٍافت تثعیت ک یٌن تا یک تش اًه یًَغ حشف ای ت ظًش آیین پغ 
دس ک اٌس پ ؿَ اّی Model Controller View دس Root تش اًه پ ؿَ DAL یا ) Data Access Layer ( سا ایجاد هی وًایین ت اٌتش ایي کلاع 
اّی Repository خ دَ سا دس ىٍ پ ؿَ DAL تؼاصیذ.
آنوزش فارسی یادگیری الگوی ریپوزیتوری 
تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام 
Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 
Day Telecom Developer Group 
Developer@day.ir | http://DAY.ir 
Page | 
3 
وح کار چگ وً است؟ 
قٍتی یک ک تٌشلش صیش ظًش یک ػش یٍغ د ذٌّ بٍ ها ذًٌ ) IIS ( فشاخایً هی ؿ دَ Repository ت ػٍیل Entity Frame Work دسیافت هی ؿ دَ تعذ اص اجشای ک تٌشلش دس ك سَتی ک تش اًه ها اص ی یًَت تؼت ت شْ تشد تاؿذ تواهی اعوال ك سَت گشفت ت کلاع ی یًَت تؼت یًض اسجاع خ اَ ذّ ؿذ ت اٌتش 
ایي ؿوا هی ت اَ یًذ ت ساحتی چ یٌي اعوالی سا ها ذًٌ یک هجو عَ ای اص حافظ هذیشیت ک یٌذ. 
ی وًیت تست چیست؟ 
ی یًَت تؼت ت هثحثی گفت هی ؿ دَ ک هی ت اَ یًذ ت ػٍیل آى خش جٍی هتذ اّ اعوالی سا ک کلاع اّ ا جًام هی د ذٌّ سا تؼت دسػتی آ اًْ سا 
تشسػی وً دَ. 
ت جً :ٍ در ایه مقال ب ی وًیت تست اشار ای وخ اً ذَ شذ. 
دس اداه تل یَشی تشای دسک ت تْش ػاد تش ایي ه ضَ عَ ک حً اجشا تش اًه دس ك سَتی ک اص Repository اػتفاد ک یٌن یا اص آى اػتفاد کً یٌن ـًاى 
داد خ اَ ذّ ؿذ.
آنوزش فارسی یادگیری الگوی ریپوزیتوری 
تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام 
Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 
Day Telecom Developer Group 
Developer@day.ir | http://DAY.ir 
Page | 
4 
ت جً :ٍ 
تشای پیاد ػاصی Repository سا اّی تؼیاس صیادی جٍ دَ داسد ت ك سَتی ک ؿوا نّ هی ت اَ یًذ اص کلاع ی یًَت تؼت دس آى اػتفاد ک یٌذ یا تذ ىٍ 
ی یًَت تؼت Repository سا ت ا جًام سػا یًذ ت اٌتش ایي هـخق هی ؿ دَ ک اػتفاد اص ی یًَت تؼت اهشی ضش سٍی یًؼت. 
وکت :ٍ 
ؿوا هی ت اَ یًذ ت ػٍیل Repository یک لای ک چَک هجضا اص Database Context خ دَ ت ػٍیل کلاع IDbset<> دس Repository ایجاد 
وًاییذ. 
اک ىٌَ هذلی ک هعشفی کشدین تذیي ؿکل خ اَ ذّ ت دَ دیگش هذل ػ لای اتتذایی خً اَ ذّ ت دَ:
آنوزش فارسی یادگیری الگوی ریپوزیتوری 
تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام 
Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 
Day Telecom Developer Group 
Developer@day.ir | http://DAY.ir 
Page | 
5 
وح ساخت: 
ت جً :ٍ 
ای گٌ فشم ؿذ اػت ک هذلی ت اًم User ت وّشا Database Context داخل پ ؿَ Models ػاخت ؿذ اػت. 
یک کلاع جذیذ ایجاد ک یٌذ اًم آى سا IUserRepository.cs ا تًخاب ک یٌذ ، دس ا لٍیي قذم اًم class سا ت interface تغییش د یّذ: 
وکت :ٍ 
دس ك سَتی ک ت جای interface اص class اػتفاد ک یٌن تش اًه دچاس هـکل خ اَ ذّ ؿذ 
اًم interface سا ها ذًٌ اًم ػ ذٌ IuserRepository ا تًخاب ک یٌذ آى سا اص کلاع IDisposable اسث تشی ک یٌذ 
دس interface کاستش ػ هتذ تعشیف ؿذ هی تی یٌذ
آنوزش فارسی یادگیری الگوی ریپوزیتوری 
تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام 
Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 
Day Telecom Developer Group 
Developer@day.ir | http://DAY.ir 
Page | 
6 
- هتذ GetUsers() ک اص ج غٌ entity type کاستش اػت تواهی اطلاعات کاستش سا دس ك سَت فشاخایً ، ـًاى خ اَ ذّ داد چ ىَ اطلاعات سا 
ت ك سَت یک هجو عَ یا Collection تش هی گشدا ذً تایذ داخل هتذ IEnumerable تاؿذ. 
- هتذ insertUser() ک کاس ػاخت یک کاستش جذیذ سا تش ع ذْ داسد پاساهتش سٍ دٍی اص ج غٌ entity کاستش هی گیشد 
- هتذ Save() اطلاعات اضاف ؿذ ت هجو عَ entity کاستش سا داخل تاکً اطلاعاتی رخیش هی وًایذ. 
اک ىٌَ تًَت ػاخت کلاع Repository کاستش اػت تا تت اَ یًن هتذ اّیی سا ک دس کلاع قثلی ایجاد کشد این هعشفی وًایین. 
پغ یک کلاع جذیذ ت اًم UserRepository.cs ایجاد ک یٌذ آى سا اص کلاع قثلی اسث تشی ک یٌذ
آنوزش فارسی یادگیری الگوی ریپوزیتوری 
تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام 
Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 
Day Telecom Developer Group 
Developer@day.ir | http://DAY.ir 
Page | 
7 
اتتذا تایذ یک آتجکت اص عًَ کلاع Database Context ایجاد ک یٌن: 
private Models.DatabaseContex databasecontex; 
دس قذم تعذ تایذ یک کا ؼًتشاکت سَ تشای کلاع Repository ت ؿکل صیش تعشیف ک یٌن: 
public UserRepository(Models.DatabaseContex databasecontex) { this.databasecontex = databasecontex; } 
حالا ت اَتعی سا ک دس کلاع پیـیي تعشیف کشد این دس کلاع جذیذ تعشیف هی وًایین: 
/// <summary> /// متدی برای گرفته تمامی اسامی کاربران 
/// </summary> /// <returns>آبجکت از ووع تو لیست </returns> public IEnumerable<Models.User> GetUsers() { return databasecontex.Users.ToList(); } /// <summary> /// متدی برای اضافً کردن 
/// </summary> /// <param name="user"></param> public void InsertUser(Models.User user) { databasecontex.Users.Add(user); } /// <summary> /// متدی برای ذخیري آبجکت اٌی اضافً شدي 
/// </summary> public void Save() { databasecontex.SaveChanges(); }
آنوزش فارسی یادگیری الگوی ریپوزیتوری 
تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام 
Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 
Day Telecom Developer Group 
Developer@day.ir | http://DAY.ir 
Page | 
8 
تغییر کلاس کىترلر برای استفاد از Repository در کلاس کىترلر: 
کلاع ک تٌشلش سا ک پیؾ تش ػاخت ایذ تاص ک یٌذ: 
اتتذا تایذ یک آتجکت اص عًَ کلاع IUserRepository تؼاصین: 
// یک متغیر از ووع ریپوزیتوری کاربر ایجاد می وماییم 
public DAL.IUserRepository userRepository; 
ت جً :ٍ 
کلاع ک تٌشلش دس ظًش گشفت ؿذ ت اًم HomeController هی تاؿذ 
اک ىٌَ ک آتجکتی اص عًَ Repository ػاختین اک ىٌَ تایذ د کا ؼًتشاکت سَ ها ذًٌ کذ صیش تشای ک تٌشلش خ دَ ت یٌَؼین ک تؼیاس ضشس سٍی ؼّت ذٌ 
//دو کاوستراکتور برای کلاس کىترلر ایجاد می کىیم 
public HomeController() { this.userRepository = new DAL.UserRepository(new Models.DatabaseContex()); } public HomeController(DAL.IUserRepository userRepository) { this.userRepository = userRepository; } 
حالا ک کا ؼًتش کٍتش اّ سا ایجاد کشدین فقط کافی اػت اص Repository داخل ک تٌشلش اّ اػتفاد ک یٌن: 
[HttpPost] public ActionResult CreateUser(Models.User Input) { if (ModelState.IsValid) { userRepository.InsertUser(Input); userRepository.Save(); return RedirectToAction("index"); } return View("~/Views/Home/Index.cshtml"); }
آنوزش فارسی یادگیری الگوی ریپوزیتوری 
تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام 
Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 
Day Telecom Developer Group 
Developer@day.ir | http://DAY.ir 
Page | 
9 
کلاس ومایش اطلاعات: 
public ActionResult ShowUser() { var oUser = userRepository.GetUsers(); return (View(oUser)); } 
ت جً :ٍ 
ایي هقال تشای دسک ت تْش ت وّشا ػ سَع کاهل تش اًه ت اؿتشاک گزاؿت ؿذ اػت 
ویاز مىذی اَ برای باز کردن س رًس بروام :ٍ 
- Visual Studio 2012 
- .net 4 
اخطار: 
استفاد از مطالب ي س رًس اَی ایه مقال تى اُ با رکر وام و یًسىذ ي گري شرکت اَی دی تلکام ) شبک دی ( محف ظً می باشذ 
م فًق ي شاد ي پیريز باشیذ 
و یًسىذ :ٌ حمیذرضا پ لُ اًن 
مرجع: 
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit- of-work-patterns-in-an-asp-net-mvc-application

Mais conteúdo relacionado

Semelhante a Repository pattern

Oracle Data Integrator (persian)
Oracle Data Integrator (persian)Oracle Data Integrator (persian)
Oracle Data Integrator (persian)Ehsan Hamzei
 
Design Patterns چیست و به چه دردی می خورد؟ (persian)
Design Patterns  چیست و به چه دردی می خورد؟ (persian)Design Patterns  چیست و به چه دردی می خورد؟ (persian)
Design Patterns چیست و به چه دردی می خورد؟ (persian)Mahmoud Masih Tehrani
 
ارائه ابزار.pptx
ارائه ابزار.pptxارائه ابزار.pptx
ارائه ابزار.pptxaminnezarat
 
چارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاریچارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاریعباس بني اسدي مقدم
 
(ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...
 (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ... (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...
(ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...Muhibullah Aman
 
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیرازIntroduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیرازMobin Ranjbar
 
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهرانFarafekr Technology
 
Introduction to oracle
Introduction to oracleIntroduction to oracle
Introduction to oracleEhsan Hamzei
 
oCCc_24_Cloud_Design_Patterns
oCCc_24_Cloud_Design_PatternsoCCc_24_Cloud_Design_Patterns
oCCc_24_Cloud_Design_PatternsMorteza Javan
 
Bi and data mining with Oracle
Bi and data mining with OracleBi and data mining with Oracle
Bi and data mining with Oracleghanadbashi
 
Scalable javascript application - طراحی نرم افزارهای مقیاس پذیر با جاوا اسکریپت
Scalable javascript application -  طراحی نرم افزارهای مقیاس پذیر با جاوا اسکریپتScalable javascript application -  طراحی نرم افزارهای مقیاس پذیر با جاوا اسکریپت
Scalable javascript application - طراحی نرم افزارهای مقیاس پذیر با جاوا اسکریپتefazati
 

Semelhante a Repository pattern (20)

Oracle Data Integrator (persian)
Oracle Data Integrator (persian)Oracle Data Integrator (persian)
Oracle Data Integrator (persian)
 
IranOUG_Oracle_Multitenant
IranOUG_Oracle_MultitenantIranOUG_Oracle_Multitenant
IranOUG_Oracle_Multitenant
 
How Create Waf With Naxsi
How Create Waf With NaxsiHow Create Waf With Naxsi
How Create Waf With Naxsi
 
Design Patterns چیست و به چه دردی می خورد؟ (persian)
Design Patterns  چیست و به چه دردی می خورد؟ (persian)Design Patterns  چیست و به چه دردی می خورد؟ (persian)
Design Patterns چیست و به چه دردی می خورد؟ (persian)
 
ارائه ابزار.pptx
ارائه ابزار.pptxارائه ابزار.pptx
ارائه ابزار.pptx
 
Verilog
VerilogVerilog
Verilog
 
چارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاریچارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاری
 
(ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...
 (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ... (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...
(ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...
 
lunch box plugin
 lunch box plugin  lunch box plugin
lunch box plugin
 
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیرازIntroduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
 
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
 
Introduction to oracle
Introduction to oracleIntroduction to oracle
Introduction to oracle
 
Network management 2_sample
Network management 2_sampleNetwork management 2_sample
Network management 2_sample
 
Kotlin
KotlinKotlin
Kotlin
 
Sql tuning
Sql tuningSql tuning
Sql tuning
 
oCCc_24_Cloud_Design_Patterns
oCCc_24_Cloud_Design_PatternsoCCc_24_Cloud_Design_Patterns
oCCc_24_Cloud_Design_Patterns
 
MongoDB
MongoDBMongoDB
MongoDB
 
Bi and data mining with Oracle
Bi and data mining with OracleBi and data mining with Oracle
Bi and data mining with Oracle
 
Scalable javascript application - طراحی نرم افزارهای مقیاس پذیر با جاوا اسکریپت
Scalable javascript application -  طراحی نرم افزارهای مقیاس پذیر با جاوا اسکریپتScalable javascript application -  طراحی نرم افزارهای مقیاس پذیر با جاوا اسکریپت
Scalable javascript application - طراحی نرم افزارهای مقیاس پذیر با جاوا اسکریپت
 
Faraz help
Faraz helpFaraz help
Faraz help
 

Repository pattern

  • 1. Repository Pattern Farsi Edition Implementing the Repository Patterns in an ASP.NET MVC 4 Application with Entity Frame Work code First 5 Day Telecom Developer Group Developer@day.ir | Http://DAY.ir
  • 2. آنوزش فارسی یادگیری الگوی ریپوزیتوری تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 Day Telecom Developer Group Developer@day.ir | http://DAY.ir Page | 2 ت اًم خذا ذًٍ جاى خشد مقذم :ٍ ت ط سَ کلی تعذ اص ػپشی ؿذى ػالیاى هتوادی تش اًه یًَؼاى یادگشفت ا ذً تشای کا ؾّ کذ اّی صائذ خ دَ تذاتیش خاكی تی ا ذًیـ ذٌ توام تلاؽ خ دَ سا كشف ایي وًای ذٌ ک تا ؿًَتي کوتش کذ دس تش اًه خ دَ تیـتشیي تاصد سا اص تش اًه اّ طلة وًای ذٌ. تعذ اص ت جٍ دَ آهذى تش اًه یًَؼی ؿی گشا تش اًه یًَؼی اٍسد هشحل تاص ای ؿذ ت خل فَ تعذ اص هعشفی ؼًل جذیذ هعواسی تش اًه یًَؼی ػوت بٍ MVC دیگش کوتش ؿشکت آی ذٌ گًشی سا یافت خ اَ یّذ کشد ک اص هعواسی MVC اػتفاد کً ذٌ. ایي هقال ت ت ضَیح آه صَؽ هثحثی هذسى دس تش اًه یًَؼی ASP.net MVC4 ت اًم Repository Pattern خ اَ ذّ پشداخت ک ا لٍیي ت اٌْ تشیي هقال ت صتاى فاسػی دس د یًای هجاصی اػت پغ تشای دسک آى هی تایؼت اؿشاف کاهلی تش ایي ػثک تش اًه یًَؼی داؿت تاؿیذ دس گش هثاحج یٍظ جای خ اَ ذّ گشفت یادگیشی آى سا ت تش اًه یًَؼاى تا تجشت حشف ای ت كَی هی وًایین. الگ یً ریپ زًیت رًی چیست؟ ) What’s The Repository Pattern? :) هع یٌ لغ یَ سیپ صَیت سَی ت هع اٌی هخشى یا دخیش کشدى اطلاعات هی تاؿذ ؿگشدی جذیذ دس تش اًه یًَؼی هحؼ بَ هی ؿ دَ الگ یً ریپ زًیت رًی ي ی وًیت تست ) The Repository and Unit of Work Patterns :) الگ یَ سیپ صَیت سَی ی یًَت تؼت دس حقیقت لایی تیي Data Access Layer Business Logic Layer هی تاؿذ ، پیاد ػاصی ایي الگ ؿوا سا قادس خ اَ ذّ کشد ک تش اًه اّی خ دَ سا دس هقاتل رخیش داد اّ ػاخت اهکا اًت خ دَکاس ی یًَت تؼت اّ ایوي ایض لٍ ا عًطاف پزیش وًاییذ کذ کوتشی ؿًَت ت شْ تیـتشی اص آى تثشیذ. دس ایي هقال ػعی ؿذ اػت تا یک کلاع Repository تؼاصین ک تت اَ ذً تا تواهی ا اًَع داد اّ کاس ک ذٌ تشای ػاخت یک الگ یَ Repository ها یًاص ت ؿًَتي یک Interface داسین ػپغ کلاع Repository خ دَ سا ؿًَت اص کلاع Interface اسث تشی هی وًایین ت ع اٌَى هثال کلاع User سا تل سَ ک یٌذ ک یک داد اص عًَ Entity هی تاؿذ تشای اػتفاد اص Repository ؿوا هی تایؼت خًؼت یک Interface تشای کلاع User ت یٌَؼیذ کلاع User Repository خ دَ سا اص آى اسث تشی وًاییذ تؼاصیذ اها کجا ایي کلاع اّ سا ایجاد وًایین؟ وّاى ط سَ ک هی دا یًذ تعذ اص ػاختي یک پش طٍ MVC دس یٍظ اٍل اػتذیَ پ ؿَ اّی Model Controller View کاهلا ؿ اٌخت ؿذ ا ذً کاسایی آى اّ سا تش اًه یًَؼاى MVC هی دا ذًٌ اها تشای ایجاد کلاع اّی Repository هی تایؼت اص الگ یَ هایکش ػٍافت تثعیت ک یٌن تا یک تش اًه یًَغ حشف ای ت ظًش آیین پغ دس ک اٌس پ ؿَ اّی Model Controller View دس Root تش اًه پ ؿَ DAL یا ) Data Access Layer ( سا ایجاد هی وًایین ت اٌتش ایي کلاع اّی Repository خ دَ سا دس ىٍ پ ؿَ DAL تؼاصیذ.
  • 3. آنوزش فارسی یادگیری الگوی ریپوزیتوری تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 Day Telecom Developer Group Developer@day.ir | http://DAY.ir Page | 3 وح کار چگ وً است؟ قٍتی یک ک تٌشلش صیش ظًش یک ػش یٍغ د ذٌّ بٍ ها ذًٌ ) IIS ( فشاخایً هی ؿ دَ Repository ت ػٍیل Entity Frame Work دسیافت هی ؿ دَ تعذ اص اجشای ک تٌشلش دس ك سَتی ک تش اًه ها اص ی یًَت تؼت ت شْ تشد تاؿذ تواهی اعوال ك سَت گشفت ت کلاع ی یًَت تؼت یًض اسجاع خ اَ ذّ ؿذ ت اٌتش ایي ؿوا هی ت اَ یًذ ت ساحتی چ یٌي اعوالی سا ها ذًٌ یک هجو عَ ای اص حافظ هذیشیت ک یٌذ. ی وًیت تست چیست؟ ی یًَت تؼت ت هثحثی گفت هی ؿ دَ ک هی ت اَ یًذ ت ػٍیل آى خش جٍی هتذ اّ اعوالی سا ک کلاع اّ ا جًام هی د ذٌّ سا تؼت دسػتی آ اًْ سا تشسػی وً دَ. ت جً :ٍ در ایه مقال ب ی وًیت تست اشار ای وخ اً ذَ شذ. دس اداه تل یَشی تشای دسک ت تْش ػاد تش ایي ه ضَ عَ ک حً اجشا تش اًه دس ك سَتی ک اص Repository اػتفاد ک یٌن یا اص آى اػتفاد کً یٌن ـًاى داد خ اَ ذّ ؿذ.
  • 4. آنوزش فارسی یادگیری الگوی ریپوزیتوری تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 Day Telecom Developer Group Developer@day.ir | http://DAY.ir Page | 4 ت جً :ٍ تشای پیاد ػاصی Repository سا اّی تؼیاس صیادی جٍ دَ داسد ت ك سَتی ک ؿوا نّ هی ت اَ یًذ اص کلاع ی یًَت تؼت دس آى اػتفاد ک یٌذ یا تذ ىٍ ی یًَت تؼت Repository سا ت ا جًام سػا یًذ ت اٌتش ایي هـخق هی ؿ دَ ک اػتفاد اص ی یًَت تؼت اهشی ضش سٍی یًؼت. وکت :ٍ ؿوا هی ت اَ یًذ ت ػٍیل Repository یک لای ک چَک هجضا اص Database Context خ دَ ت ػٍیل کلاع IDbset<> دس Repository ایجاد وًاییذ. اک ىٌَ هذلی ک هعشفی کشدین تذیي ؿکل خ اَ ذّ ت دَ دیگش هذل ػ لای اتتذایی خً اَ ذّ ت دَ:
  • 5. آنوزش فارسی یادگیری الگوی ریپوزیتوری تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 Day Telecom Developer Group Developer@day.ir | http://DAY.ir Page | 5 وح ساخت: ت جً :ٍ ای گٌ فشم ؿذ اػت ک هذلی ت اًم User ت وّشا Database Context داخل پ ؿَ Models ػاخت ؿذ اػت. یک کلاع جذیذ ایجاد ک یٌذ اًم آى سا IUserRepository.cs ا تًخاب ک یٌذ ، دس ا لٍیي قذم اًم class سا ت interface تغییش د یّذ: وکت :ٍ دس ك سَتی ک ت جای interface اص class اػتفاد ک یٌن تش اًه دچاس هـکل خ اَ ذّ ؿذ اًم interface سا ها ذًٌ اًم ػ ذٌ IuserRepository ا تًخاب ک یٌذ آى سا اص کلاع IDisposable اسث تشی ک یٌذ دس interface کاستش ػ هتذ تعشیف ؿذ هی تی یٌذ
  • 6. آنوزش فارسی یادگیری الگوی ریپوزیتوری تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 Day Telecom Developer Group Developer@day.ir | http://DAY.ir Page | 6 - هتذ GetUsers() ک اص ج غٌ entity type کاستش اػت تواهی اطلاعات کاستش سا دس ك سَت فشاخایً ، ـًاى خ اَ ذّ داد چ ىَ اطلاعات سا ت ك سَت یک هجو عَ یا Collection تش هی گشدا ذً تایذ داخل هتذ IEnumerable تاؿذ. - هتذ insertUser() ک کاس ػاخت یک کاستش جذیذ سا تش ع ذْ داسد پاساهتش سٍ دٍی اص ج غٌ entity کاستش هی گیشد - هتذ Save() اطلاعات اضاف ؿذ ت هجو عَ entity کاستش سا داخل تاکً اطلاعاتی رخیش هی وًایذ. اک ىٌَ تًَت ػاخت کلاع Repository کاستش اػت تا تت اَ یًن هتذ اّیی سا ک دس کلاع قثلی ایجاد کشد این هعشفی وًایین. پغ یک کلاع جذیذ ت اًم UserRepository.cs ایجاد ک یٌذ آى سا اص کلاع قثلی اسث تشی ک یٌذ
  • 7. آنوزش فارسی یادگیری الگوی ریپوزیتوری تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 Day Telecom Developer Group Developer@day.ir | http://DAY.ir Page | 7 اتتذا تایذ یک آتجکت اص عًَ کلاع Database Context ایجاد ک یٌن: private Models.DatabaseContex databasecontex; دس قذم تعذ تایذ یک کا ؼًتشاکت سَ تشای کلاع Repository ت ؿکل صیش تعشیف ک یٌن: public UserRepository(Models.DatabaseContex databasecontex) { this.databasecontex = databasecontex; } حالا ت اَتعی سا ک دس کلاع پیـیي تعشیف کشد این دس کلاع جذیذ تعشیف هی وًایین: /// <summary> /// متدی برای گرفته تمامی اسامی کاربران /// </summary> /// <returns>آبجکت از ووع تو لیست </returns> public IEnumerable<Models.User> GetUsers() { return databasecontex.Users.ToList(); } /// <summary> /// متدی برای اضافً کردن /// </summary> /// <param name="user"></param> public void InsertUser(Models.User user) { databasecontex.Users.Add(user); } /// <summary> /// متدی برای ذخیري آبجکت اٌی اضافً شدي /// </summary> public void Save() { databasecontex.SaveChanges(); }
  • 8. آنوزش فارسی یادگیری الگوی ریپوزیتوری تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 Day Telecom Developer Group Developer@day.ir | http://DAY.ir Page | 8 تغییر کلاس کىترلر برای استفاد از Repository در کلاس کىترلر: کلاع ک تٌشلش سا ک پیؾ تش ػاخت ایذ تاص ک یٌذ: اتتذا تایذ یک آتجکت اص عًَ کلاع IUserRepository تؼاصین: // یک متغیر از ووع ریپوزیتوری کاربر ایجاد می وماییم public DAL.IUserRepository userRepository; ت جً :ٍ کلاع ک تٌشلش دس ظًش گشفت ؿذ ت اًم HomeController هی تاؿذ اک ىٌَ ک آتجکتی اص عًَ Repository ػاختین اک ىٌَ تایذ د کا ؼًتشاکت سَ ها ذًٌ کذ صیش تشای ک تٌشلش خ دَ ت یٌَؼین ک تؼیاس ضشس سٍی ؼّت ذٌ //دو کاوستراکتور برای کلاس کىترلر ایجاد می کىیم public HomeController() { this.userRepository = new DAL.UserRepository(new Models.DatabaseContex()); } public HomeController(DAL.IUserRepository userRepository) { this.userRepository = userRepository; } حالا ک کا ؼًتش کٍتش اّ سا ایجاد کشدین فقط کافی اػت اص Repository داخل ک تٌشلش اّ اػتفاد ک یٌن: [HttpPost] public ActionResult CreateUser(Models.User Input) { if (ModelState.IsValid) { userRepository.InsertUser(Input); userRepository.Save(); return RedirectToAction("index"); } return View("~/Views/Home/Index.cshtml"); }
  • 9. آنوزش فارسی یادگیری الگوی ریپوزیتوری تهیه و تنظیم کننده: گروه برنانه نویسی دی تلکام Repository Pattern in ASP.net MVC4 with Entity Frame Work Code First 5 Day Telecom Developer Group Developer@day.ir | http://DAY.ir Page | 9 کلاس ومایش اطلاعات: public ActionResult ShowUser() { var oUser = userRepository.GetUsers(); return (View(oUser)); } ت جً :ٍ ایي هقال تشای دسک ت تْش ت وّشا ػ سَع کاهل تش اًه ت اؿتشاک گزاؿت ؿذ اػت ویاز مىذی اَ برای باز کردن س رًس بروام :ٍ - Visual Studio 2012 - .net 4 اخطار: استفاد از مطالب ي س رًس اَی ایه مقال تى اُ با رکر وام و یًسىذ ي گري شرکت اَی دی تلکام ) شبک دی ( محف ظً می باشذ م فًق ي شاد ي پیريز باشیذ و یًسىذ :ٌ حمیذرضا پ لُ اًن مرجع: http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit- of-work-patterns-in-an-asp-net-mvc-application