gpt4 book ai didi

c# - 基于类的环境中的关注点分离/代码结构(以 C# 为例)

转载 作者:行者123 更新时间:2023-11-30 23:21:12 26 4
gpt4 key购买 nike

我一直想知道在基于类的语言中分离代码的最佳实践是什么。例如,我创建了一个项目来处理与我的 web api 的 api 交互。我想知道正确的选择是什么,或者其他建议。

示例 1

项目文件

  • API.cs
  • 数据类型
    • 动漫.cs
    • Episode.cs

API.cs

public class Api
{
public static async Task<List<Anime>> GetAnimesByKeyword(string keyword)
{
// Execute api request to server
return result;
}

public static async Task<List<Episode>> GetEpisodesByAnime(Anime anime)
{
// Execute api request to server
return result;
}

}

数据类型 -> Anime.cs

public class Anime
{
public string Name { get; set; }
public string Summary { get; set; }
// Other properties
}

数据类型 -> Episode.cs

public class Episode
{
public string Name { get; set; }
public Date ReleaseDate { get; set; }
// Other properties
}

或者例子2

项目文件

  • API.cs
  • 数据类型
    • 动漫.cs
    • Episode.cs

API.cs

public class Api
{
// Nothing for now
}

数据类型 -> Anime.cs

public class Anime
{
public static async Task<Anime> GetById(int id)
{
return result;
}

public string Name { get; set; }
public string Summary { get; set; }
// Other properties
}

数据类型 -> Episode.cs

public class Episode
{
public static async Task<List<Episode>> GetEpisodesByAnime(Anime anime)
{
return result;
}

public string Name { get; set; }
public Date ReleaseDate { get; set; }
// Other properties
}

这 2 种中哪一种是构建代码的首选方式,或者是否有更好的方式来执行此操作。这可能看起来微不足道,但对我来说确实很重要。

谢谢你帮助我!

最佳答案

一般来说,遵循Single Responsibility Principle .实际上,这意味着您拥有纯数据的简单对象和更复杂的服务类,它们的工作方式类似于从外部服务或数据库加载。

你的第二个例子混合了关注点并且它将这两个类紧密地绑定(bind)在一起(Episode 现在依赖于 Anime)。您还可以看到很难决定将加载方法放在哪个类上:应该是 anime.GetEpisodes() 还是 Episode.GetEpisodesByAnime()?随着对象图变得越来越复杂,这种情况也会升级。

稍后您可能需要一个不同的实体数据传输对象。拥有简单的纯数据对象可以轻松添加这些对象并使用 Automapper 进行转换。

但是(在您的第一个示例中)不要使用 static 方法,因为这会使您的服务类更难测试。一项服务可能依赖于另一项服务(使用依赖注入(inject)),并且要单独测试每项服务,您不希望使用静态方法。

关于c# - 基于类的环境中的关注点分离/代码结构(以 C# 为例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39322650/

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