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