繁体   English   中英

RESTful接口-添加子对象

[英]RESTful Interface - Adding child objects

我公开了一个RESTful接口,该接口允许添加CategorySubCategory类型。

类别

public class Category : EntityBase<Category>
{
    public string Name { get; set; }
    public bool Enabled { get; set; }

    public virtual ICollection<SubCategory> SubCategories { get; set; }
}

子类别

public class SubCategory : EntityBase<SubCategory>
{
    public int CategoryId { get; set; }

    public string Name { get; set; }
    public bool Enabled { get; set; }

    public virtual ICollection<Product> Products { get; set; }
}

我的问题是,我应该通过带有关联子项SubCategoriesCategory对象,然后找出哪些子项是新的:

public void AddSubCategory(Category category)
{
    // Figure out what object on the SubCategories collection are new (no PK value?)?
}

还是这样的方法会更好?

public void AddSubCategory(int categoryId, SubCategory subCategory);

第二种方法是更清洁的方法,但是可能需要花费更长的时间在前端进行设置。 您可以直接将子类别推入数据库/存储中(尽管我建议您对存储过程或实体存储库进行检查,以防止两个同名子类别)。

使用第一种方法,您将需要遍历整个子类别列表,并可能对每个子类别进行数据库调用,或者做一些麻烦的事情,例如将整个列表提交给存储过程并在其中进行搅动。

第二种方法也可以更好地扩展。 考虑将多少数据发送到服务器,然后随着子类别列表的增加而被重新处理。

除了传输冗余数据并可能需要引起大量额外的数据库调用之外,您可能还会担心将要实现API的人的样式选择,我认为开发人员会期望使用单独的方法来添加,更新,删除并找到提交的方法。整个列表令人困惑。

干杯

好吧,我认为这个问题没有明显的答案,这取决于口味。

就个人而言,如果您希望一次只添加一个对象,那么我会采用第二种方法,因为它可以节省您遍历子类别列表的时间,这将有益于应用程序的性能。 您永远都不知道您的应用程序将如何扩展,并且最终可能要处理许多类别。

我要做的是采用第二种方法,但是由于您在第二种方法中已经具有CategoryId,因此我只需将签名更改为:

public void AddSubCategory(SubCategory subCategory);

并从subCategory中提取类别ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM