簡體   English   中英

服務包裝器 => 服務模式最佳實踐

[英]Service Wrapper => Service Pattern best practices

我正在從頭開始構建企業級 web api,我有大約 12 個服務和一個實體框架回購包裝器。

基本上在重構我的 web api 之后,我意識到我正在通過 IOC 將 9 個服務傳遞到 controller。

所以我為我的所有服務創建了一個服務包裝器:

public class ServiceWrapper : IServiceWrapper
    {
        public ServiceWrapper(ILoggerManager loggerManager, IRepositoryWrapper repositoryWrapper, IAuditLog auditLog, IConfiguration config, ICsvImporter csvImporter, IEmailService emailService, IEmailTemplate emailTemplate, IEmailConfiguration emailConfig, IEncoreService encoreService, IUserService userService, ISQLClient sqlClient, IDocumentService documentService)
        {
            LoggerManager = loggerManager;
            RepositoryWrapper = repositoryWrapper;
            AuditLog = auditLog;
            Config = config;
            CsvImporter = csvImporter;
            EmailService = emailService;
            EmailTemplate = emailTemplate;
            EncoreService = encoreService;
            UserService = userService;
            EmailConfiguration = emailConfig;
            SqlClient = sqlClient;
            DocumentService = documentService;
        }

        public ILoggerManager LoggerManager { get; set; }       
        public IRepositoryWrapper RepositoryWrapper { get; set; }
        public IAuditLog AuditLog { get; set; }
        public IConfiguration Config { get; set; }
        public ICsvImporter CsvImporter { get; set; }
        public IEmailService EmailService { get; set; }
        public IEmailConfiguration EmailConfiguration { get; set; }
        public IEmailTemplate EmailTemplate { get; set; }
        public IEncoreService EncoreService { get; set; }
        public IUserService UserService { get; set; }
        public ISQLClient SqlClient { get; set; }
        public IDocumentService DocumentService { get; set; }
    }

我的問題是,這是最佳實踐,還是有更好的方法,我想繼續使用領域驅動架構、IOC 和服務模式。

謝謝

這在很大程度上取決於您如何在 controller 中使用這些服務。

  1. 如果您在每個 controller 方法中使用服務 - 通過構造函數傳遞它。 它將為您提供公共服務的單點。
  2. 您在單個方法中使用的服務應使用參數傳遞給該特定方法。 看看FromServices屬性。 它將允許成功。
  3. 看來您可能需要將服務拆分為更小的組件。 從我看到您的服務與文檔一起使用,導入 CSV,發送電子郵件等。將其拆分為較小的服務或使用MediatR切換到 CQRS 范式可能很有用。
  4. 您已將 IEmailService 和 IEmailConfiguration 傳遞給您的 controller。 您是否需要在 controller 中進行該配置,或者應該將 go 直接用於 IEmailService 實現?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM