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

نام تاپیک: اهمیت لایه Services در طراحی بر پایه onion architecture

  1. #1

    Question اهمیت لایه Services در طراحی بر پایه onion architecture

    سلام دوستان


    من خواستم بدونم که اهمیت لایه Services در معماری onion architecture چی هستش ؟ من بیشتر کاربردی که ازش داشتم فقط صدا زدن متد های Repository بوده . خواستم بدونم وظیفه اصلی این لایه چی هستش ؟

    یک سوال دیگه هم دارم خواستم بدونم کلاس هایی مثل : تبدیل تاریخ به شمسی ، پیامک ، ایمیل و آپلود تصاویر در کدام لایه قرار می گیرن ؟

    ممنون می شم توضیحات کاملی بدید

    با تشکر

  2. #2

    نقل قول: اهمیت لایه Services در طراحی بر پایه onion architecture

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

    بسته به اینکه ابعاد پروژه ی شما چقدر باشد ممکن است لایه ی سرویس هم چند شاخه شود. در خیلی از پروژه ها نیاز به لایه ی Repository نداریم. اما همیشه لایه ی سرویس داریم.

  3. #3

    نقل قول: اهمیت لایه Services در طراحی بر پایه onion architecture

    سلام

    تشکر بابت پاسخ خوبتون .

    لایه Infrastructure در چه سطحی از این تقسیم بندی قرار می گیره ؟ در حقیقت به چه لایه هایی باید رفرنس داشته باشه و چه لایه هایی باید بهش رفرنس داشته باشند ؟

    و اینکه آیا یکی بحث مثلا ذخیره id کاربر از Iedntity باید در کنترلر انجام شود و یا Services ؟ همین سوال رو در مورد بررسی دسترسی ها و همینطور پیاده سازی جستجو های ترکیبی دارم . به طور مثال یک جستجو پیشرفته داشته باشیم باید عملیات فیلتر کردن بر اساس جستجو درخواستی در Repository اتفاق بیفته یا در Services ؟

    با تشکر از شما

  4. #4

    نقل قول: اهمیت لایه Services در طراحی بر پایه onion architecture

    در معماری پیازی با به عبارت دیگه معماری Clean لایه ی Infrastructure شامل کلاسهایی میشه که با خارج از سایت در ارتباط هستن. مثلا تعریف مربوط به سرویس پیامک و درگاه بانک در این قسمت قرار میگیرن.
    همچنین اصولا دیتابیس هم از اونجایی که با یک منبع خارجی در ارتباط هست باید کدهاش درون این لایه تعریف بشه. یعنی کلاسهای مربوط به EF Core باید اینجا باشه.

    ولی معمولا از اونجایی که ما خیلی با EF کار داریم اون رو به یک پروژه ی مجزا منتقل می کنیم.

    درمورد بحث جستجو و فیلتر کردن همیشه بستگی به نوع داده داره. دقت کنید که Repository مستقیم با EF در ارتباط هست و وقتی شما با LINQ کوئری به EF میفرستید به صورت یک T-SQL در سرور اجرا میشه.
    اما وقتی در سرویس از ریپوزیتوری استفاده می کنید معمولا IList دارید. بعنی داده ها درون کد شما فیلتر و جستجو میشه و نه درون دیتابیس.

    مثلا شما می خواهید لیست کاربرهایی که اسمشون "حسن" هست از دیتابیس استخراج کنید. یک راه اینه که درون ریپوزیتوری متدی بسازید که بر اساس نام کاربرهارو فیلتر کنه و بعد اون رو به سرویس بدید
    راه دیگه اینه که از متد کلی که لیست کاربرهارو بر میگردونه استفاده کنید و فیلتر رو در لایه ی سرویس روی اسم کاربرها اعمال کنید.

    ممکنه دیتابیس شما 10 هزارتار کاربر داشته باشه ولی فقط 10 تا حسن داشته باشه . در روش اول همون 10 تا برمیگرده اما در روش دوم 10 هزارتا بر میگرده و میره به سرویس در سرویس دوباره فیلتر میشه.

    به طور کلی ریپوزیتوری بهینه تره ولی پیاده کردن متدهای مجزا برای هر قسمت هم دردسر داره. بسته به محل و نوع استفاده باید ببنیدی که در کدوم لایه کار رو انجام بدید.

    به طور کلی ما به لایه ریپوزیتوری در بسیاری از پروژه ها نیاز نداریم. مخصوصا در EF Core با توجه به بعضی امکانات می تونیم از پیاده سازی ریپوزیتوری صرف نظر کنیم.

    در این مقاله به معرفی ساختاری لایه بندی معماری Clean مفصل پرداخته شده.

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

    نقل قول: اهمیت لایه Services در طراحی بر پایه onion architecture

    میخواستم حذف کنم ولی نشد
    آخرین ویرایش به وسیله hamzehsh : دوشنبه 05 آذر 1397 در 00:27 صبح دلیل: حذف

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

    نقل قول: اهمیت لایه Services در طراحی بر پایه onion architecture

    سلام
    من دقیق متوجه نشدم. میخوام یک پروژه شروع کنم برای تمرین و تا حالا از معماری استفاده نکرده ام
    میخوام چند تا کار انجام بدم:
    اطلاعات یک شرکت رو ثبت کنم و گزارش بگیرم
    یک اطلاعات و نتایج هم ثبت کنم و گزارش گیری متفاوت داشته باشم
    بعد یک قسمت برای اخبار داخلی داشته باشم
    یک قسمت هم برای ارسال فایل
    خب قبلا یک پروژه میساختیم و ادامه کار
    الان به عبارتی باید
    1- دیتابیس داشته باشم که خودش میشه یک لایه جدا
    2- یک قسمت برای ثبت یکسری نتایج و گزارشگیری
    3- یک قسمت برای ثبت اطلاعات محیط شرکت و گزارشگیری
    4- یک قسمت برای نمایش اخبار داخلی
    قسمت 2 و 3 کجای این معماری قرار میگیره؟ آیا باید لایه های مجزا براشون تعریف کرد؟
    لایه اخبار چطور؟ آیا این هم لایه مجزا داره؟

  7. #7

    نقل قول: اهمیت لایه Services در طراحی بر پایه onion architecture

    هر کدام از این بخشها در واقع یک دامنه (Domain) هستند.
    برای بسیاری از پروژه ها لازم نیست از لایه های و معماری پیچیده ای استفاده کنید.
    همیشه می توانید با ساختن یک پروژه کار رو شروع کنید و بر همون مبنا کار کنید. لازم نیست پروژه از روز اول چند لایه و باز طراحی بشه.

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

  1. سوال: معماری مدل محور moder driven architecture)
    نوشته شده توسط majidam20 در بخش تحلیل و طراحی نرم افزار
    پاسخ: 0
    آخرین پست: پنج شنبه 03 اردیبهشت 1388, 12:36 عصر
  2. Sun ONE Architecture Guide
    نوشته شده توسط zehs_sha در بخش بحث و گفتگو در مورد فناوری های مرتبط با جاوا
    پاسخ: 1
    آخرین پست: دوشنبه 12 فروردین 1387, 02:59 صبح
  3. Three Tire Architecture
    نوشته شده توسط h_rezaei در بخش VB.NET
    پاسخ: 22
    آخرین پست: شنبه 20 دی 1382, 11:18 صبح

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

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