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

نام تاپیک: تفکیک پروژه ها در معماری تمیز

  1. #1
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,179

    تفکیک پروژه ها در معماری تمیز

    سلام خدمت دوستان

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

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

    Solution.png

  2. #2
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,027

    نقل قول: تفکیک پروژه ها در معماری تمیز

    • یک نوع معماری صدا زدن و ولیدیشن هست CQRS و واسط بین ورودی و خروجی api قرار میگیره. نبودش هم باعث مشکل نمیشه و بصورت بیسیک رفتار میشه
    • در مورد معماری تمیز و پوشه بندی هم میشه گفت یک سری پوشه و منطق کاری ثابت هست.
    • بستگی به اندازه پروژه، هرچه ریزتر کنید پیچیدگی بیشتری دارید


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

    https://github.com/fakhravari/Clean-Architecture

  3. #3
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,179

    نقل قول: تفکیک پروژه ها در معماری تمیز

    سلام جناب fakhravari. ممنون بابت توضیحاتتان.

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

  4. #4
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,179

    نقل قول: تفکیک پروژه ها در معماری تمیز

    سلام

    جناب فخرآوری یک سوال. آنچه که متوجه شدم با پیاده سازی MediatR میشه منطق برنامه را در Handler پیاده سازی کرد. آیا در در چنین شرایطی پیاده سازی لایه Service ضروریه؟ اگر ضروری نباشه ایا پیشنهاد میشه که پیاده سازی بشه یا پیاده سازی Business برنامه در Handler کفایت میکنه؟ تشکر

  5. #5
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,027

    نقل قول: تفکیک پروژه ها در معماری تمیز

    نقل قول نوشته شده توسط mmbguide مشاهده تاپیک
    سلام

    جناب فخرآوری یک سوال. آنچه که متوجه شدم با پیاده سازی MediatR میشه منطق برنامه را در Handler پیاده سازی کرد. آیا در در چنین شرایطی پیاده سازی لایه Service ضروریه؟ اگر ضروری نباشه ایا پیشنهاد میشه که پیاده سازی بشه یا پیاده سازی Business برنامه در Handler کفایت میکنه؟ تشکر
    در این معماری MediatoR که واسطه بین request و response است میشه از FluentValidation برای منطق بیزینس استفاه کرد و به نظرم استفاده از این معماری کفایت میکنه.

  6. #6
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,179

    نقل قول: تفکیک پروژه ها در معماری تمیز

    سلام مجدد

    با توجه به مرور نمونه موجود در repo و نگاه به سایر نمونه ها آنچه که متوجه شدم نامگذاری پروژه ها با نام Entities, Models و Dtos بوده:
    1. مثلا در Domain یک Entities تعریف شده و یک Model. آیا در اینجا Model همان Dto هستش؟
    2. در برخی نمونه ها دیدم که عین Entities در Persistence جهت ایجاد DbContext استفاده شده. آیا نمیشه از همان Entities موجود در Domain برای DbContext استفاده کرد. در توضیحات آمده بود که کلاس های Domain بدون Attribute و کلاس های مشابه در Persistence دارای Attribute هستند.
    3. تا چقدر ضروریه که به غیر از Entities و Dtos در Domain در جاهای دیگه Model تعریف کنیم؟


    تشکر

  7. #7
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,179

    نقل قول: تفکیک پروژه ها در معماری تمیز

    سلام

    در ادامه پست شماره #6 یک سوال دیگه به ذهنم رسید که در طراحی DDD آیا همین تفکیک پذیری درسته؟

  8. #8
    کاربر دائمی آواتار fakhravari
    تاریخ عضویت
    دی 1388
    محل زندگی
    بوشهر
    سن
    34
    پست
    8,027

    نقل قول: تفکیک پروژه ها در معماری تمیز

    نقل قول نوشته شده توسط mmbguide مشاهده تاپیک
    سلام مجدد

    با توجه به مرور نمونه موجود در repo و نگاه به سایر نمونه ها آنچه که متوجه شدم نامگذاری پروژه ها با نام Entities, Models و Dtos بوده:
    1. مثلا در Domain یک Entities تعریف شده و یک Model. آیا در اینجا Model همان Dto هستش؟
    2. در برخی نمونه ها دیدم که عین Entities در Persistence جهت ایجاد DbContext استفاده شده. آیا نمیشه از همان Entities موجود در Domain برای DbContext استفاده کرد. در توضیحات آمده بود که کلاس های Domain بدون Attribute و کلاس های مشابه در Persistence دارای Attribute هستند.
    3. تا چقدر ضروریه که به غیر از Entities و Dtos در Domain در جاهای دیگه Model تعریف کنیم؟


    تشکر

    • ویو مدل های در سطح ریپازیتوری در لایه Application باشد و سایر در لایه Domain. حال فرقی نداره اسم گذاریش
    • من دیتابیس فرست میرم جلو با Note.txt که گزاشتم دیتابیس جنریت میکنم و مدل میسازم و هر لایه درون فولدر های خودش میزارم


    بحث DDD فرق داره و اصولی پیاده سازی کردنش خیلی لایه مختلف داره که در ساختار کلین نیست. کلین یک الگوی تمیز توی سلوشن های بیزینسی کوچک هست که ساختار کد منظم میکنه

    https://virgool.io/@farshid.azizi/im...e-tcixfzbtkqkz

  9. #9
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,179

    نقل قول: تفکیک پروژه ها در معماری تمیز

    سلام خدمت دوستان

    در پروژه از MediatR استفاده کردم. در پیاده سازی کلاس هایی که باید از IRequest ارث بری کنند و برای عملیات اصلی مانند Create برای ساده سازی نامگذاری کلاس بصورت CreateCommand و CreateCommandHandler هستش. تمام این کلاس ها در پوشه های مربوط به خود هستند و namespaceها کاملا جداگانه هستند. تا اینجای کار اگر 100 تا domain داشته باشم برای تمام آنها 100 تا CreateCommand و CreateCommandHandler دارم. اگر برنامه را بدون Swager اجرا کنم هیچ مشکلی نیست و تمام Apiها کار میکنه ولی اگر Swagger را برای مستندسازی فعال کنم با خطا مواجه میشم و در Console خطایی که نشون میده به این مفهوم هستش که از Schema تکراری استفاده شده و نام آن را هم CreateCommand اعلام میکنه.

    آنچه که متوجه شدم کدهای APi ایرادی ندارند ولیSwagger نمیتونه کلاس های همنام رو مدیریت کنه. سوالم اینه که اگر این موضوع صحیح باشه آیا راه حلی هم وجود داره؟

    تشکر

  10. #10
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,179

    نقل قول: تفکیک پروژه ها در معماری تمیز

    متن پیغام:
    Failed to generate schema for type:
    Ces.Caspian.Application.Commands.User.UserProfileD etails.CreateCommand


    The same schemaId is already used for type:
    Ces.Caspian.Application.Commands.User.UserProfiles .CreateCommand


  11. #11
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,179

    نقل قول: تفکیک پروژه ها در معماری تمیز

    جهت رفع مشکل باید تنظیم زیر را در Swagger فعال کنید:


    builder.Services.AddSwaggerGen(config =>
    {
    config.CustomSchemaIds(x => x.FullName);
    });


    در واقع بصورت پیشفرض Swagger فقط نام کلاس را بررسی خواهد کرد که با تنظیم فوق Swagger از نام کامل که همان namespace است استفاده خواهد کرد. در این شرایط نام کلاس ها در مستندات بصورت FullName نمایش داده خواهد شد.

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

  1. مقاله: اهمیت نوشتن تست های تمیز در کدنویسی تمیز (Clean Coding)
    نوشته شده توسط all_time_programmer در بخش C#‎‎
    پاسخ: 0
    آخرین پست: جمعه 01 بهمن 1400, 20:44 عصر
  2. پاسخ: 6
    آخرین پست: سه شنبه 06 تیر 1396, 21:52 عصر
  3. پاسخ: 4
    آخرین پست: شنبه 02 آبان 1394, 10:33 صبح
  4. پاسخ: 0
    آخرین پست: دوشنبه 22 تیر 1394, 00:30 صبح
  5. پاسخ: 0
    آخرین پست: جمعه 08 شهریور 1392, 16:24 عصر

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

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

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