وظیفه لایه های مختلف یک اپلیکیشن

پرسیده شده
فعالیت 1580 روز پیش
دیده شده 986 بار
0

سلام خدمت جناب آقای علیمحمدی و سایر اساتید سون لرن

 

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

 

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

1 - سوال اولم دقیقا مربوط به اون تفاوت ریپازیتوری و مدل میشه ، ما تا وقتی ریپازیتوری نبود همه درخواست های ما با دیتابیس توسط مدل ها هندل میشد و این قسمت بود که عملیات کار با دیتابیس رو انجام میداد ، اما وقتی بحث ریپازیتوری میاد وسط و یک لایه ای بین persistense و logic کد های ما قرار میگیره وظیفه مدل این جا چیه ؟ ... من کد های شما رو که توی گیت لب بررسی میکنم توی وردپرس برای پروژه های همین دوره های متخصص اصلا مدل تعریف نکرده بودید وصرفا از همون ریپازیتوری برای دیتابیس استفاده کرده بودید ، ما برای پروژه های لاراول کمی تفاوت وجود داشت و یه جورایی ریپازیتوری از مدل استفاده میکرد تا داده بگیره از دیتابیس ، و همه مدل های موجود از کلاسی ارث بری کرده بودند که خود اون هم از طریق Eloquent laravel داده از دیتابیس میگرفت ... لطف کنید تفاوت این دو مورد رو توضیح بدید

 

2 - مورد دوم در مورد service layer است ، چیزی که میدونم کلا همه login اپلیکیشن ما باید توسط این لایه انجام بشه و هر عملیاتی که بخوایم انجام بدیم باید توی این لایه انجام بشه و کنترلر و قسمت های دیگه هم از این لایه استفاده میکنند ، حالا سوال اصلی اینجاست که با این حساب ما اصلا نباید از قسمت های دیگه مستقیما استفاده کنیم توی جاهای مختلف ؟ و هر کاری که میخوایم انجام بدیم باید توسط این سرویس ها انجام بشه ؟ .... یه مثال عرض میکنیم ، فرض کنید ما اومدیم توی یکی از کنترلر ها و از یکی از ریپازیتوری های موجود یه ابجکتی ساختیم و استفاده کردیم ازش ، الان این کار اشتباهه ؟ و منطق درستش به این شکله که این بره داخل یک سرویس و اون سرویس بیاد این کار رو انجام بده ؟ و ما صرفا از سرویس استفاده کنیم

3 - یه سوال دیگه ای هم توی نحوه پیاده سازی ریپازیتوری ها دارم ، ما معمولا یه کلاس  base داریم که اون کار های اصلی ( CRUD ) مارو انجام میده ، حالا میایم توی ریپو های مربوط به هر Entity مثلا productRepository کلیه درخواست های که مربوط به product میشه رو اینجا قرار مدیدیم . حالا این چیزی که من گفتم درسته ؟ یعنیی هررر درخواستی که قرار به دیتابیس زده بشه باید بیاد این قسمت ؟ یا نه باز توی همین productRepository صرفا عملیات اصلی تعریف میشه و درخواست های دیگه که کلی نیستن میره توی بخش سرویس ؟

 

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

برای مثال ما توی productRepository یک متد داریم به اسم getLatestProducts حالا میخوایم از این استفاده کنیم باید توی productService یک متدی به همین نام داشته باشیم که خروجی getLatestProducts رو برای ما بده ؟

و در آخر اول تشکر میکنم از شما و بعدش هم معذرت میخوام که طولانی شد ، واقعا خودتون هم در جریانید من 4 5 ماهی میشه درگیر این مباحث هستم و هنوز جواب دقیقی رو براش نگرفتم ، ممنون میشم اگر کامل پاسخ بدید 

فایل پیوست

Deleted
Deleted

17 دی 98

جلسه آشنایی با abstraction