我的项目中有这样的东西,项目已经完成了(它正在运行) 我只想知道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,但是这个类是静态的,并且它包含彼此独立的静态方法,如果我为每个方法创建一个静态类,它就是一样的
答案 0 :(得分:8)
我可以看到,这里有很多SOLID违规行为!
我确信还有其他一些,但这些都是明显的。
更新现在有人对此发表了评论,我认为他们是对的;上面的代码看起来像某种形式的扩展方法滥用。
例如,我不认为数据访问应该降级为扩展方法,或者更糟糕的是,名为“工具”的类。
有一个基类(在一个完全不同的命名空间和/或程序集上)抽象你的数据访问一般性,然后为每个唯一的域对象继承一个数据访问类(例如,UserDAO,ProductDAO)可能更有意义。等)。请理解我的假设是GetProduct或GetUser实际上是指GetFromDatabase。
其余的辅助方法确实属于扩展,所以它们没问题。
答案 1 :(得分:2)
根据你的例子,肯定有一个ISP和一个SRP,可能至少有一个Demeter法(不是SOLID但是......)违规行为。
IMNSHO你最好不要阅读关于SOLID的文章(或购买Agile Principles, Patterns, and Practices in C# by Robert C. Martin and Micah Martin,这是一本非常好的文章,也是我近几年阅读过的最有用的书之一),而不是要求关于互联网的零碎建议。这种事情。
如果你想要一个快捷方式(你没有 - 书籍和PDF都有可以解释事情的例子!),这些带有叔叔鲍勃的Hanselminutes播客非常好:
抓取SRP答案 2 :(得分:0)
它在很多方面违反了SOLID原则。