![](/img/trans.png)
[英]Best practice for interface to allow adding, deleting etc. child objects w/ broadcasting events (similar to ObservableCollection)
[英]RESTful Interface - Adding child objects
我公开了一个RESTful接口,该接口允许添加Category
和SubCategory
类型。
类别
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; }
}
我的问题是,我应该通过带有关联子项SubCategories
的Category
对象,然后找出哪些子项是新的:
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.