使用REST api创建反映多对多关系的DTO的最佳方法?

时间:2018-03-01 17:00:10

标签: c# asp.net-web-api

我有这个伪模型来说明这个想法

> est("grp")
[1] 0
       counts       Group1           LL           UL          V5
counts    315 2.364636e-12 2.002372e-12 2.792441e-12 No warnings
Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: algorithm did not converge 
3: glm.fit: algorithm did not converge 

当您需要在调用BookBook for CreatBookForAuthor后创建的WebApi页面上返回时,哪种方法最好?

你应该在某种程度上接收IsRequired字段,将它作为额外值保存在中间表上,现在,在建立关系之后,这是让用户知道特定布尔值已分配给该用户的最佳方法。具有IsRequired值的作者是真的吗?

应该如何看待BookDto返回以维护RESTFUL方法?请使用相同的场景来说明答案

1 个答案:

答案 0 :(得分:0)

数据模型不需要与数据库架构完全匹配。

通常,您需要通过让书籍DTO包含AuthorInfoNameID)而不是整个Author对象来破坏层次结构,反之亦然,作者DTO应该有BookInfo个对象(ISBNtitlepublicationDate,也许还有一组AuthorInfo

即。区分Author(您对作者了解的所有内容)和AuthorInfo(引用作者时要包含的信息)。

/// <summary>
/// The information about a book which is included with an Author
/// </summary>
class AuthorBookInfo
{
    // to get the full Book object if needed
    public string Id; 
    // Extra information about the relation (join table)
    public AuthorRole Role; // Editor, Author, Contributor, etc.
    // Now extra information from book to reduce the need to retrieve the book object
    public string Title;
    public string ISBN;
    public DateTime PublicationDate;
}


class Author {
    public string Id;
    public string Name;
    public List<AuthorBookInfo> Books;
    public DateTime DateOfBirth;
    public string ShortBiography;

}

class AuthorInfo
{
    public string Id;
    public string Name;
}

class Book {
    public string Id; // to get the full Book object if needed
    public string Title;
    public string ISBN;
    public DateTime PublicationDate;
    public List<AuthorInfo> Authors;
    public PublisherInfo Publisher;
    public string PublicationLanguage;
    public List<BookInfo> Translations;
}

主要要求是包含Id,因此可以在单独的调用中检索相关对象的完整详细信息。

次要目标是包含足够的最常用的额外信息,以便大多数时间不需要第二次呼叫。