gpt4 book ai didi

c# - 这是否违反了 SOLID 原则?

转载 作者:行者123 更新时间:2023-11-30 13:42:57 25 4
gpt4 key购买 nike

我的项目中有类似的东西,这个项目已经完成了(它正在运行)我只想知道 SOLID 原则是否可以接受

static public class Tools
{
static public GetProduct(this id){...}

static public GetProductCategory(this id){...}

static public GetUser(this id){...}

// I also have here methods like IsStringNull ...
// IsNull IsFalse, lots of stuff, everything static
}

用法是这样的

var UserThatCreatedCategoryForThisProduct = 
prodId.GetProduct().CategoryId.GetProductCategory().Creator.GetUser();

我知道这很明显违反了 SRP,但是这个类是静态的,它包含彼此独立的静态方法,如果我为每个方法创建一个静态类,那也是一样的

最佳答案

据我所知,这里有很多 SOLID 违规行为!

  • 违反单一职责原则 - 首先,您有多个类的数据访问方法,其次,您有辅助方法(IsStringNull、IsNull 等)与它们交织在一起。
  • 违反接口(interface)分离原则(如 Ruben 所述)- 如果我只关心产品,为什么我需要接触获取用户的方法?

我敢肯定还有其他一些,但这些是最明显的。

更新 既然有人对此发表了评论,我认为他们是对的;上面的代码看起来像是某种形式的扩展方法滥用

例如,我不认为数据访问应该归属于扩展方法,或者更糟的是,归属于名为“工具”的类。

拥有一个抽象数据访问通用性的基类(在完全不同的命名空间和/或程序集中)可能更有意义,然后为每个唯一的域对象(例如,UserDAO、ProductDAO)继承一个数据访问类, ETC)。请理解我在这里的假设是 GetProduct 或 GetUser 实际上是指 GetFromDatabase。

其余的辅助方法确实属于扩展,所以它们没问题。

关于c# - 这是否违反了 SOLID 原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1437305/

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