簡體   English   中英

如何使用設計模式實現不斷增長的對象?

[英]How to implement growing object with a design pattern?

我想設計一個響應並通過我的 asp.net 核心應用程序中的響應來設計它。 simlpe 響應如下所示。

public class Response {
    public string Status { get; set; } => "Ok";
    public BaseReport BaseReport { get;set;}
}

如果用戶向我的服務發送額外的參數,我想動態更改我的響應內容。

public class ReportsController : ControllerBase
{
    [HttpGet]
    public ActionResult<Response> GetReport(bool isEmployee, bool isFinanace, bool isInformatinTech)
    {
        // if all parameters fals, return base report.
        var report = baseReposrService.Get();
        var response = new Response() { BaseReport = report };
        
        if(isEmployee)
        {
            var ereport = employeeService.Get();
            var response = new Response() { 
                BaseReport = report,
                EmployeeReport = ereport
            };
        }
        if(isFinanace)
        {
            var freport = financeService.Get();
            var response = new Response() { 
                BaseReport = report,
                EmployeeReport = freport
            };
        }
        
        ...
        ...
    }
}

響應對象隨着查詢參數的增長而增長。

那么,是否以正確的方式為這個問題實施裝飾器模式? 這些類型的問題有什么最佳實踐嗎?

我嘗試如下:

public class Response
    {
        public Response()
        {
            BaseReport = new BaseReport();
        }
        public string Status { get; set; } ="Ok";
        public BaseReport BaseReport { get; set; }
    }
    public class BaseReport
    {
        public string report { get; set; }
        public string reportcontent { get; set; }
    }



    public interface IResponseFactory
    {
        IResponseFactory Add(string key);
        Response Create(string key);
    }
    public class ResponseFactory1 : IResponseFactory
    {
        
        private readonly Dictionary<string, Response> _responsedic = new Dictionary<string, Response>();
        public ResponseFactory1()
        {
            
            this.Add("Employee").Add("Finanace").Add("InformatinTech");
        }
        public IResponseFactory Add(string key)
        {
            
            var response = new Response();
            response.BaseReport.report = key;
            response.BaseReport.reportcontent = key + "content";
            _responsedic.Add(key, response);
            return this;
        }
        public Response Create(string responsename)
        {
            if (_responsedic.ContainsKey(responsename))
            {
                return _responsedic[responsename];
            }
            else
            {
                return new Response() { BaseReport = new BaseReport() { report = "basereport",reportcontent= "basereportcontent" } };
            }
        }

在啟動類中:

services.AddSingleton<IResponseFactory, ResponseFactory1>();

在控制器中:

[HttpGet]
            public ActionResult<Response> GetReport(string responsetype)
            {
                var response = _responseFactory.Create(responsetype);
                return response;
             }

暫無
暫無

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

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