每个派生类的 Web API 方法还是只能为所有类提供服务的一种方法?

苏曼·帕利赫

我有几个派生类BC从同一个基类继承A

public class A {}
public class B : A {}
public class C : A {}

我需要创建一个 HTTP POST API 方法来使用每个具体类。有一个方法接受基类还是为每个派生类创建单独的方法更好?

[Route("send/Base")]
[HttpPost]
public IHttpActionResult SendPricingLetter(A model)
{
    // do some type checking and perform logic    
}

我正在使用工厂进行类型检查并为每个类设置适当的字段,看起来它很快就会变得无法管理。

或者

[Route("send/ConcreteB")]
[HttpPost]
public IHttpActionResult SendSomeOther(B model)
{
    // No type checking required and perform logic     
}

[Route("send/ConcreteC")]
[HttpPost]
public IHttpActionResult SendStuff(C model)
{
    // No type checking required and perform logic    
}
品质催化剂

您的方法SendPricingLetter将始终收到一个实例,A即使您可能会发布BC这与反序列化的工作方式有关。您“进行某种类型检查”的方法将不起作用,因为您将始终必须处理 type 对象A不会有任何迹象表明它们来自A,BC

我不确定您的要求是什么;但是,在 Web API 方法中,您考虑的是数据模型,而不是面向对象的继承原则。我个人是遵循 REST 原则的粉丝,这些原则让你以面向领域的方式思考更多。

检查您的类建模是否正确。如果是这样,并且如果您确实需要将这些不同的对象传输到您的 API,那么您要么提供三种单独的方法,一种是 for A,一种是 for B,一种是 for C,-或者-您只需调用并处理A, B,并C相应地例如像这样:

public class MyRequestModel
{
    public DomainModelType Type { get; set; }
    public A ToDomainObject()
    {
        switch (Type)
        {
            case DomainModelType.A:
                return new A();
            case DomainModelType.B:
                return new B();
            case DomainModelType.C:
                return new C();
            default:
                throw new InvalidOperationException();
        }
    }
}

[Route("Stuff")]
[HttpPost]
public IHttpActionResult Stuff(MyRequestModel requestModel)
{
    var myOriginalObject = requestModel.ToDomainObject();
    // do some type checking and perform logic
}

我个人总是会使用显式 API 调用(在您的情况下为三个),除非我有将它们放在一起的有效要求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以使所有派生类彼此成为朋友?

来自分类Dev

在调用具有基本类型参数的 .NET Core Web API 控制器时,无法将派生类作为参数从角度代码发布

来自分类Dev

vftable是否按派生类的每个对象进行编译?

来自分类Dev

派生类模板

来自分类Dev

处理派生类

来自分类Dev

C ++派生类

来自分类Dev

隐藏派生类

来自分类Dev

派生类C ++

来自分类Dev

有没有一种方法可以声明成员,使其在所有派生类中都是静态的?

来自分类Dev

解决通过Simple Injector注册的ASP.NET Web窗体图像控件派生类

来自分类Dev

有没有一种方法可以强制派生类实现抽象类或嵌套在基类中的接口?

来自分类Dev

从基类方法克隆派生类

来自分类Dev

从基类方法克隆派生类

来自分类Dev

从派生类实现基类构造函数特化的另一种方法是什么?

来自分类Dev

从派生类实现基类构造函数专业化的另一种方法是什么?

来自分类Dev

在每个循环中使用基类类型或派生类类型

来自分类Dev

使父类成员对于每个派生类均不可修改

来自分类Dev

Django模型派生类

来自分类Dev

防止派生类被破坏

来自分类Dev

C ++ Qt派生类

来自分类Dev

C ++派生类数组

来自分类Dev

从基础创建派生类

来自分类Dev

缺少QObject的派生类

来自分类Dev

Django模型派生类

来自分类Dev

派生类的成员函数

来自分类Dev

重置派生类对象

来自分类Dev

MongoDB 和派生类

来自分类Dev

有没有一种方法可以防止在派生类的实例上调用基类方法?

来自分类Dev

c#有没有一种方法可以让我的基类和派生类分别实现Interface方法?