پرسش های متداول

فهرست مطالب

در بخش “پرسش های متداول” شما عزیزان می توانید پرسش های متداول و سوالات اصلی خود در زمینه های مختلف حوزه های روانشناسی، جامعه شناسی، اقتصاد، علوم اعصاب، جراحی مغز و اعصاب، ورزش، فارکس، بورس، برنامه نویسی، طراحی سایت، SEO، دیجیتال مارکتینگ، هوش مصنوعی و ارزهای دیجیتال بپرسید و پاسخ های پرسش های متداول که دیگران پیشتر پرسیده اند را نیز ملاحظه بفرمایید.

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

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

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

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

موضوعات مورد بررسی در پرسش های متداول:

آگاه‌سازی‌ها
پاک‌کردن همه

در معماری تمیز clean architecture لازم است چه مولفه های بیرونی به ساختار اضافه شوند؟

1 ارسال ها
1 کاربران
0 Reactions
36 نمایش‌
دکتر امیر محمد شهسوارانی
(@amshahi)
Noble Member Admin
عضو شده: 4 سال قبل
ارسال‌: 533
شروع کننده موضوع  

در معماری تمیز (Clean Architecture) ، مولفه‌های بیرونی (External Components) به بخش‌هایی از سیستم اشاره دارند که خارج از هسته اصلی (لایه‌های داخلی مثل Domain و Application) قرار دارند و به عنوان جزئیات پیاده‌سازی (Implementation Details) محسوب می‌شوند. این مولفه‌ها در لایه‌های خارجی (Frameworks and Drivers) قرار می‌گیرند و باید به گونه‌ای به ساختار اضافه شوند که وابستگی‌ها به سمت داخل (به سمت هسته) جریان داشته باشند، نه برعکس. در ادامه، مولفه‌های بیرونی رایج که لازم است به ساختار اضافه شوند، همراه با توضیح و مثال، آورده شده است:

 

مولفه‌های بیرونی مورد نیاز در معماری تمیز

1. رابط کاربری (User Interface - UI)

   - توضیح:

رابطی که کاربر با آن تعامل می‌کند (مثل وب، موبایل، دسکتاپ).

   - نقش در معماری تمیز:

این مولفه داده‌ها را از لایه Application دریافت کرده و به کاربر نمایش می‌دهد یا ورودی کاربر را به کنترل‌کننده‌ها منتقل می‌کند.

   - مثال:

     - در ASP.NET Core: کنترل‌کننده‌های Web API یا صفحات Razor.

     - کد نمونه (کنترل‌کننده):

csharp

       [HttpGet("{id}")]

       public async Task<IActionResult> GetBook(int id)

       {

           var book = await _bookService.GetBookByIdAsync(id);

           return Ok(book);

       }

   - نحوه اتصال:

از طریق رابط‌های تعریف‌شده در لایه Application (مثل `IBookService`).

 

2. پایگاه داده (Database)

   - توضیح:

سیستم ذخیره‌سازی داده‌ها (مثل SQL Server، MongoDB).

   - نقش در معماری تمیز:

در لایه Infrastructure قرار می‌گیرد و از طریق مخازن (Repositories) با لایه Application ارتباط برقرار می‌کند.

   - مثال:

     استفاده از Entity Framework Core:

     

csharp

       public class BookRepository : IBookRepository

       {

           private readonly LibraryDbContext _context;

           public BookRepository(LibraryDbContext context)

           {

               _context = context;

           }

           public async Task<Book> GetByIdAsync(int id)

           {

               return await _context.Books.FindAsync(id);

           }

       }

   - نحوه اتصال:

رابط مخزن (مثل `IBookRepository`) در لایه Domain یا Application تعریف شده و در Infrastructure پیاده‌سازی می‌شود.

 

3. فریم‌ورک‌ها (Frameworks)

   - توضیح:

ابزارهایی مثل ASP.NET Core، Flask یا Spring که ساختار برنامه را پشتیبانی می‌کنند.

   - نقش در معماری تمیز:

این فریم‌ورک‌ها در لایه خارجی قرار می‌گیرند و نباید منطق اصلی کسب‌وکار را در خود جای دهند.

   - مثال:

     تنظیمات ASP.NET Core در `Program.cs`:

      

csharp

       builder.Services.AddControllers();

       builder.Services.AddScoped<IBookService, BookService>();

   - نحوه اتصال:

فریم‌ورک فقط برای میزبانی و مدیریت درخواست‌ها استفاده می‌شود و وابستگی‌ها از طریق DI (Dependency Injection) تزریق می‌شوند.

 

4. سرویس‌های خارجی (External Services)

   - توضیح:

APIهای خارجی، سیستم‌های پرداخت، یا سرویس‌های پیام‌رسان (مثل ایمیل یا SMS).

   - نقش در معماری تمیز:

این سرویس‌ها در لایه Infrastructure پیاده‌سازی می‌شوند و از طریق رابط‌ها با لایه Application تعامل می‌کنند.

   - مثال:

     - فراخوانی یک API خارجی برای ارسال ایمیل:

csharp

       public interface IEmailService

       {

           Task SendEmailAsync(string to, string subject, string body);

       }




       public class EmailService : IEmailService

       {

           private readonly HttpClient _httpClient;

           public EmailService(HttpClient httpClient)

           {

               _httpClient = httpClient;

           }

           public async Task SendEmailAsync(string to, string subject, string body)

           {

               await _httpClient.PostAsJsonAsync("api/email", new { To = to, Subject = subject, Body = body });

           }

       }

   

   - نحوه اتصال:

رابط (مثل `IEmailService`) در Application تعریف شده و پیاده‌سازی در Infrastructure انجام می‌شود.

 

5. سیستم فایل (File System)

   - توضیح:

برای ذخیره‌سازی یا خواندن فایل‌ها (مثل آپلود PDF یا تصاویر).

   - نقش در معماری تمیز:

در لایه Infrastructure قرار می‌گیرد و از طریق رابط‌ها مدیریت می‌شود.

   - مثال:

     - ذخیره فایل:

     

csharp

       public interface IFileStorage

       {

           Task SaveFileAsync(string fileName, Stream fileStream);

       }




       public class LocalFileStorage : IFileStorage

       {

           public async Task SaveFileAsync(string fileName, Stream fileStream)

           {

               using var file = File.Create(fileName);

               await fileStream.CopyToAsync(file);

           }

       }

 

   - نحوه اتصال:

رابط در Application و پیاده‌سازی در Infrastructure.

 

6. دستگاه‌ها (Devices)

   - توضیح:

سخت‌افزارهایی مثل پرینتر یا اسکنر (در صورت نیاز).

   - نقش در معماری تمیز:

به عنوان جزئیات خارجی در لایه Infrastructure مدیریت می‌شوند.

   - مثال:

فراخوانی پرینتر برای چاپ رسید.

   - نحوه اتصال:

از طریق رابط‌های تعریف‌شده.

 

7. سیستم‌های پیام‌رسانی (Messaging Systems)**

   - توضیح:

ابزارهایی مثل RabbitMQ یا Kafka برای ارتباطات ناهمگام.

   - نقش در معماری تمیز:

در Infrastructure قرار می‌گیرند و برای ارسال/دریافت پیام استفاده می‌شوند.

   - مثال:

    

csharp

     public interface IMessagePublisher

     {

         Task PublishAsync(string message);

     }




     public class RabbitMQPublisher : IMessagePublisher

     {

         // پیاده‌سازی با RabbitMQ

     }

  

   - نحوه اتصال:

رابط در Application و پیاده‌سازی در Infrastructure.

 

8. تنظیمات و پیکربندی (Configuration)

   - توضیح:

فایل‌ها یا سرویس‌هایی که تنظیمات برنامه را فراهم می‌کنند (مثل `appsettings.json`).

   - نقش در معماری تمیز:

در لایه خارجی قرار می‌گیرد و توسط فریم‌ورک مدیریت می‌شود.

   - مثال:

json

     // appsettings.json

     {

       "ConnectionStrings": {

         "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=LibraryDb;"

       }

     }

 

   - *نحوه اتصال:

از طریق فریم‌ورک (مثل ASP.NET Core) به لایه‌های داخلی تزریق می‌شود.

 

نحوه اضافه کردن مولفه‌های بیرونی

برای اطمینان از رعایت اصول معماری تمیز:

1. رابط‌ها (Interfaces):

   - رابط‌های مورد نیاز برای هر مولفه بیرونی را در لایه Application یا Domain تعریف کنید (مثل `IBookRepository` یا `IEmailService`).

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

 

2. تزریق وابستگی (Dependency Injection):

   - در فریم‌ورک (مثل ASP.NET Core) وابستگی‌ها را در فایل تنظیمات (مثل `Program.cs`) ثبت کنید:

csharp

     builder.Services.AddScoped<IBookRepository, BookRepository>();

     builder.Services.AddScoped<IEmailService, EmailService>();

 

3. لایه‌بندی مناسب:

   - مولفه‌های بیرونی را در لایه Infrastructure یا لایه خارجی (Presentation) قرار دهید.

   - از وابستگی مستقیم هسته (Domain و Application) به این مولفه‌ها جلوگیری کنید.

 

4. انعطاف‌پذیری:

   - طراحی به گونه‌ای باشد که تعویض یک مولفه (مثلاً تغییر دیتابیس از SQL به MongoDB) فقط نیازمند تغییر پیاده‌سازی در Infrastructure باشد.

 

مثال جامع

فرض کنید یک سیستم مدیریت کتابخانه دارید:

- UI: کنترل‌کننده ASP.NET Core برای نمایش لیست کتاب‌ها.

- Database: EF Core برای ذخیره کتاب‌ها.

- External Service: سرویس ایمیل برای اطلاع‌رسانی به کاربران.

- File System: ذخیره PDF کتاب‌ها.

 

ساختار:

 

Solution

├── Domain

│   └── Entities/Book.cs

├── Application

│   ├── Interfaces/IBookService.cs

│   ├── Interfaces/IEmailService.cs

│   ├── Interfaces/IFileStorage.cs

│   └── Services/BookService.cs

├── Infrastructure

│   ├── Data/BookRepository.cs

│   ├── Data/LibraryDbContext.cs

│   ├── ExternalServices/EmailService.cs

│   └── FileStorage/LocalFileStorage.cs

└── WebApi

    ├── Controllers/BooksController.cs

    └── Program.cs

تنظیمات:

csharp

// WebApi/Program.cs

builder.Services.AddDbContext<LibraryDbContext>(options =>

    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

builder.Services.AddScoped<IBookRepository, BookRepository>();

builder.Services.AddScoped<IBookService, BookService>();

builder.Services.AddScoped<IEmailService, EmailService>();

builder.Services.AddScoped<IFileStorage, LocalFileStorage>();

builder.Services.AddControllers();

جمع‌بندی

مولفه‌های بیرونی مثل UI، دیتابیس، سرویس‌های خارجی و فریم‌ورک‌ها باید به صورت جداگانه و از طریق رابط‌ها به معماری تمیز اضافه شوند. این کار تضمین می‌کند که هسته سیستم (Domain و Application) مستقل باقی بماند و تغییرات در لایه‌های خارجی تأثیری بر آن نداشته باشد. اگر نیاز به مثال خاص یا توضیح بیشتر دارید، بفرمایید!


   
نقل‌قول

ارسال یک پاسخ

نام نویسنده

ایمیل نویسنده

عنوان *

پیش‌نمایش 0 رونوشت ذخیره شد
اشتراک:

خوش آمدید!

وارد ناحیه کاربری خود شوید

ایجاد حساب جدید!

برای ثبت نام فرم های زیر را پر کنید

رمز عبور خود را بازیابی کنید

لطفا نام کاربری یا آدرس ایمیل خود را برای بازنشانی رمز عبور خود وارد کنید.