• OneOf<T1,…,Tn>清新


    OneOf——其中之一,这是一个泛型类,意思就是这里泛型中的任何一个类都可以,还是看代码吧。

    引入包

    install-package OneOf

    实现一个产品查询,有三种情况,查询到返回;查询不到;查询出错。

        [ApiController]
        [Route("[controller]")]
        public class HomeController : ControllerBase
        {
            private readonly ILogger<HomeController> _logger;
    
            public HomeController(ILogger<HomeController> logger)
            {
                _logger = logger;
            }
    
            [HttpGet("/product/{id}")]
            public IActionResult Get(int id)
            {
                OneOf<Product, NotFound, SystemError> result = GetProject(id);
                return result.Match<IActionResult>(
                    product =>
                    {
                        _logger.LogInformation("查询成功");
                        return new JsonResult(product);
                    },
                    notfound =>
                    {
                        _logger.LogInformation("没有查到");
                        return new NotFoundResult();
                    },
                    systemerror =>
                    {
                        _logger.LogError("查询成败");
                        return new StatusCodeResult(500);
                    });
            }
            /// <summary>
            /// 按ID查询产品,有三种返回类型,找到产品返回;按ID查询不到;查询过程发生错误
            /// </summary>
            /// <param name="id"></param>
            public OneOf<Product, NotFound, SystemError> GetProject(int id)
            {
                try
                {
                    //这里实现真实查库
                    var num = RandomNumberGenerator.GetInt32(1, 10);
                    if (num % 3 == 0)
                    {
                        return new NotFound();
                    }
                    else
                    {
                        return new Product() { ID = id, Name = "手机" };
                    }
                }
                catch (Exception exc)
                {
                    _logger.LogCritical(exc, exc.Message);
                    return new SystemError();
                }
            }
        }
    
        public class NotFound
        {
        }
        public class SystemError
        {
        }
        public class Product
        {
            public int ID { get; set; }
            public string Name { get; set; }
        }

      可以看到,NotFound,SystemError,Product三个类是没有任何关系的,是独立的类,这里通过OneOf<>,来实现返回任何类型都可以,按照OOP的思路,需要三个类继承一个父类来实现,现在用OneOf<>,把这种继承“解耦”了。

     
      想要更快更方便的了解相关知识,可以关注微信公众号 

     

  • 相关阅读:
    图解插入排序--直接插入排序
    在项目中代替DevExpress(一)
    java web servlet
    一元夺宝项目设计(上)
    一元夺宝项目设计(中)
    一元夺宝项目设计(下)
    ORM之四:调用入口与调用示例
    ORM之三:DbProvider与DbFactory
    ORM之二:核心接口与扩展操作
    ORM之一:适合我的ORM
  • 原文地址:https://www.cnblogs.com/axzxs2001/p/15862468.html
Copyright © 2020-2023  润新知