اهمیت لایه Services در طراحی بر پایه onion architecture
سلام دوستان
من خواستم بدونم که اهمیت لایه Services در معماری onion architecture چی هستش ؟ من بیشتر کاربردی که ازش داشتم فقط صدا زدن متد های Repository بوده . خواستم بدونم وظیفه اصلی این لایه چی هستش ؟
یک سوال دیگه هم دارم خواستم بدونم کلاس هایی مثل : تبدیل تاریخ به شمسی ، پیامک ، ایمیل و آپلود تصاویر در کدام لایه قرار می گیرن ؟
ممنون می شم توضیحات کاملی بدید
با تشکر
نقل قول: اهمیت لایه Services در طراحی بر پایه onion architecture
در یک پروژه ی ASP.NET MVC وظیفه ی کنترل فقط محدود به عملیات های وب میشود. کنترلر با درخواست و پاسخ در ارتباط است و داده های از شبکه دریافت یا به آن ارسال میکند.
بهتر است هر کدی که مربوط به وب نیست از کنترلر خارج کنیم و درون لایه ی های درونی تر مانند Service قرار دهیم.
در سرویس عملیات اعتبار سنجی انجام میشود. شرط ها چک میشود و محاسبات انجام میشود. مثلا اگر در فروشگاه نیاز به محاسبه ی مالیات بر ارزش افزوده دارید این عملیات درون سرویس انجام میشود.
کلاسهایی مثل ارسال پیامک و ایمیل معمولا در یک پروژه ی مجزا به عنوان Infrastructure نگه داری میشود. اینها مواردی است که به سازو کار اصلی پروژه مربوط نیست اما برای اجرا به آنها نیاز دارید.
بسته به اینکه ابعاد پروژه ی شما چقدر باشد ممکن است لایه ی سرویس هم چند شاخه شود. در خیلی از پروژه ها نیاز به لایه ی Repository نداریم. اما همیشه لایه ی سرویس داریم.
نقل قول: اهمیت لایه Services در طراحی بر پایه onion architecture
سلام
تشکر بابت پاسخ خوبتون .
لایه Infrastructure در چه سطحی از این تقسیم بندی قرار می گیره ؟ در حقیقت به چه لایه هایی باید رفرنس داشته باشه و چه لایه هایی باید بهش رفرنس داشته باشند ؟
و اینکه آیا یکی بحث مثلا ذخیره id کاربر از Iedntity باید در کنترلر انجام شود و یا Services ؟ همین سوال رو در مورد بررسی دسترسی ها و همینطور پیاده سازی جستجو های ترکیبی دارم . به طور مثال یک جستجو پیشرفته داشته باشیم باید عملیات فیلتر کردن بر اساس جستجو درخواستی در Repository اتفاق بیفته یا در Services ؟
با تشکر از شما
نقل قول: اهمیت لایه Services در طراحی بر پایه onion architecture
در معماری پیازی با به عبارت دیگه معماری Clean لایه ی Infrastructure شامل کلاسهایی میشه که با خارج از سایت در ارتباط هستن. مثلا تعریف مربوط به سرویس پیامک و درگاه بانک در این قسمت قرار میگیرن.
همچنین اصولا دیتابیس هم از اونجایی که با یک منبع خارجی در ارتباط هست باید کدهاش درون این لایه تعریف بشه. یعنی کلاسهای مربوط به EF Core باید اینجا باشه.
ولی معمولا از اونجایی که ما خیلی با EF کار داریم اون رو به یک پروژه ی مجزا منتقل می کنیم.
درمورد بحث جستجو و فیلتر کردن همیشه بستگی به نوع داده داره. دقت کنید که Repository مستقیم با EF در ارتباط هست و وقتی شما با LINQ کوئری به EF میفرستید به صورت یک T-SQL در سرور اجرا میشه.
اما وقتی در سرویس از ریپوزیتوری استفاده می کنید معمولا IList دارید. بعنی داده ها درون کد شما فیلتر و جستجو میشه و نه درون دیتابیس.
مثلا شما می خواهید لیست کاربرهایی که اسمشون "حسن" هست از دیتابیس استخراج کنید. یک راه اینه که درون ریپوزیتوری متدی بسازید که بر اساس نام کاربرهارو فیلتر کنه و بعد اون رو به سرویس بدید
راه دیگه اینه که از متد کلی که لیست کاربرهارو بر میگردونه استفاده کنید و فیلتر رو در لایه ی سرویس روی اسم کاربرها اعمال کنید.
ممکنه دیتابیس شما 10 هزارتار کاربر داشته باشه ولی فقط 10 تا حسن داشته باشه . در روش اول همون 10 تا برمیگرده اما در روش دوم 10 هزارتا بر میگرده و میره به سرویس در سرویس دوباره فیلتر میشه.
به طور کلی ریپوزیتوری بهینه تره ولی پیاده کردن متدهای مجزا برای هر قسمت هم دردسر داره. بسته به محل و نوع استفاده باید ببنیدی که در کدوم لایه کار رو انجام بدید.
به طور کلی ما به لایه ریپوزیتوری در بسیاری از پروژه ها نیاز نداریم. مخصوصا در EF Core با توجه به بعضی امکانات می تونیم از پیاده سازی ریپوزیتوری صرف نظر کنیم.
در این مقاله به معرفی ساختاری لایه بندی معماری Clean مفصل پرداخته شده.
نقل قول: اهمیت لایه Services در طراحی بر پایه onion architecture
نقل قول: اهمیت لایه Services در طراحی بر پایه onion architecture
سلام
من دقیق متوجه نشدم. میخوام یک پروژه شروع کنم برای تمرین و تا حالا از معماری استفاده نکرده ام
میخوام چند تا کار انجام بدم:
اطلاعات یک شرکت رو ثبت کنم و گزارش بگیرم
یک اطلاعات و نتایج هم ثبت کنم و گزارش گیری متفاوت داشته باشم
بعد یک قسمت برای اخبار داخلی داشته باشم
یک قسمت هم برای ارسال فایل
خب قبلا یک پروژه میساختیم و ادامه کار
الان به عبارتی باید
1- دیتابیس داشته باشم که خودش میشه یک لایه جدا
2- یک قسمت برای ثبت یکسری نتایج و گزارشگیری
3- یک قسمت برای ثبت اطلاعات محیط شرکت و گزارشگیری
4- یک قسمت برای نمایش اخبار داخلی
قسمت 2 و 3 کجای این معماری قرار میگیره؟ آیا باید لایه های مجزا براشون تعریف کرد؟
لایه اخبار چطور؟ آیا این هم لایه مجزا داره؟
نقل قول: اهمیت لایه Services در طراحی بر پایه onion architecture
هر کدام از این بخشها در واقع یک دامنه (Domain) هستند.
برای بسیاری از پروژه ها لازم نیست از لایه های و معماری پیچیده ای استفاده کنید.
همیشه می توانید با ساختن یک پروژه کار رو شروع کنید و بر همون مبنا کار کنید. لازم نیست پروژه از روز اول چند لایه و باز طراحی بشه.