gpt4 book ai didi

c# - 服务层只返回模型

转载 作者:行者123 更新时间:2023-11-30 12:45:48 24 4
gpt4 key购买 nike

服务层应该返回模型对象吗?网上有一些关于它的帖子(herehere 是一些 SO 帖子)但没有一个很好的例子。

我看到的是这样的:

Services should care only about the problem domain, not the view that renders results. Return values should be expressed in terms of domain objects, not views.

我觉得我在这里遗漏了一些东西。

看下面的例子……假设我想返回所有电影的列表,但是,我需要一个boolean 标志——类似于hasLike——来显示如果我之前已经喜欢它。怎么可能只从服务层返回模型?

简而言之...如何按照这种方法从服务层返回元信息?这可能吗?

型号

public class Person
{
public int PersonID { get; set; }
public string Name { get; set; }
public ICollection<Movie> FavoriteMovies { get; set; }
public ICollection<MovieLikes> Likes { get; set; }
}

public class Movie
{
public int MovieID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}

public class MovieLike
{
public int MovieLikeID { get; set; }
public int PersonID { get; set; }
public int MovieID { get; set; }
public DateTimeOffset Date { get; set; }
}

服务

public class MovieService : IMovieService
{
public Movie Get(int id)
{

}

public Movie GetByName(string name)
{

}

public IEnumerable<Movie> GetAll()
{
return unit.DbSet<Movie>();
}
}

最佳答案

您可以将服务拆分为查询和命令。

查询操作返回数据的扁平化非规范化 View ,方便您的客户使用。命令操作接受仅包含执行命令所需信息的命令。

这意味着您从服务返回的查询模型与数据库中的不同。您可以根据需要添加属性,例如,由在您的服务(或最好是业务层)中执行的某些业务逻辑设置的 HasLike 属性。因此,如果对客户没有附加值,则不必返回喜欢的列表;但根据是否有喜欢将 HasLikes 设置为 true 或 false。

所以基本上,您在示例中提供的模型类(Person、Movie、MovieLike)代表了它们在您的域和/或数据库中的样子;但不是那些从您的服务中返回的人。相反,您可以:

 public IEnumerable<MovieSummary> GetAll()
{
return unit.DbSet<Movie>();
}

// All properties needed in summarized representation
public class MovieSummary
{
public int MovieID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool HasLike { get; set; }
// Other calculated properties
}

还有……

 public MovieDetails Get(int id)
{

}

// All properties needed in detailled representation
public class MovieDetails
{
public int MovieID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public ICollection<MovieLikes> Likes { get; set; }
// more
}

以最佳方式设计您的服务契约(Contract)以供您的客户使用,让您的生活变得更加轻松。

关于c# - 服务层只返回模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22794479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com