编程语言
首页 > 编程语言> > c# – 这违反了SOLID原则吗?

c# – 这违反了SOLID原则吗?

作者:互联网

我的项目中有这样的东西,项目已经完成了(它正在工作)
我只想知道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等).
>违反接口分离原则(如Ruben所述) – 如果我只关心产品,为什么我需要接触获取用户的方法?

我确信还有其他一些,但这些都是明显的.

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

例如,我不认为数据访问应该降级为扩展方法,或者更糟糕的是,名为“工具”的类.

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

其余的辅助方法确实属于扩展,因此它们很好.

标签:c,oop,solid-principles
来源: https://codeday.me/bug/20190722/1498956.html