- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道盲目地遵循任何“最佳实践”仍然会导致一堆臭味,严格遵守最佳实践。 SOLID原则就是原则。它们并不适用于所有情况,但是对于在代码中寻找可能的改进,它们仍然是很好的启发式方法。
它们的不利之处在于它们有时需要对您的源代码进行深入的分析才能应用它们。与大多数程序员一样,我一直在寻找更有效的处事方式。因此,我很好奇是否有人听说过尝试测试SOLID原理(或缺乏SOLID原理)应用的分析工具。
SRP The Single Responsibility Principle
A class should have only one reason to change.
OCP The Open-Closed Principle
Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.
LSP The Liskov Substitution Principle
Subtypes must be substitutable for their base types.
ISP The Interface Segregation Principle
Clients should not be forced to depend upon methods that they do not use. Interfaces belong to clients, not to hierarchies.
DIP The Dependency Inversion Principle
Abstractions should not depend upon details. Details should depend upon abstractions.
最佳答案
我认为自动静态分析无法确定是否遵守这些原则。要编写这样的工具,您需要正式定义每个概念的含义,并有一种方法可以对照任何代码对其进行检查。您如何将责任的概念形式化?我个人不知道。
也就是说,您可以使用工具来检测违规的可能性。
例如,您可以使用代码度量标准(例如每个类的方法数量,每个类的成员数量)来确定一个类是否太大,因此有可能违反SRP。
Liskov替代原则可能是一个异常(exception)。
如果您在所有方法(前提条件,后置条件,不变量)上定义了契约,则可以检查重新定义父类(super class)方法的方法不会增强前提条件,不会削弱后置条件并尊重方法的不变性父类(super class)的方法。我认为工具ESC/Java会执行这些检查。
阅读wikipedia page about LSP时,必须执行更多检查。
关于static-analysis - 是否有任何静态分析工具将报告遵循SOLID原则的程度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1627024/
我是 F# 的菜鸟,目前正在阅读 F# 3.0 中的专家。 它是我学习的第一种编译语言(我只知道用 R 编程) 在第 6 章第 117 页,我们没有太多仪式性地介绍 静态让和静态成员。我真的不明白它是
我很迷茫。我已经花几个小时广泛地复习了我的两个类(class)。没有什么是静态的,没有什么是静态引用的,但我无法摆脱这个错误。 A 类文件 (ClassA.php) privateVariable =
关于类公共(public)类声明,请看这两段代码: public class Helper { public static void CallMeganFox(string phoneNumb
我如何使用“super”关键字从父类(super class)(类“aa”)引用“a1” class aa { protected static int a1 = 2; } public class
class Perkusja { boolean talerze = true; boolean beben = true; void zagrajNaBebnie() { Sys
我试图在编译 C++ 程序时静态链接库。 g++ (GCC) 4.8.5 20150623(红帽 4.8.5-4) $ g++ -std=c++11 -I/home/jerry/Desktop/tin
$ javac TestFilter.java TestFilter.java:19: non-static variable this cannot be referenced from a sta
这个问题在这里已经有了答案: How do I create a global, mutable singleton? (7 个答案) How can you make a safe static
“覆盖”静态数组时我遇到了一个棘手的问题。我有静态数组(为简单起见),它们在不同的派生类中具有固定长度,但在编译时仍然知道所有大小。我在基类中也有一个虚函数,但我不知道如何解决在派生类中覆盖这些数组和
我刚刚在遗留代码中发现了这一点。我知道使用宏,每当使用名称时,它都会被宏的内容替换。它们最常用于为数字常量提供符号名称。我所知道的是预处理没有类型安全、范围的概念。 这样做的真正好处是什么? #def
将 Singleton 实例声明为 static 还是声明为 static final 更好? 请看下面的例子: 静态版本 public class Singleton { private s
问题: 我观察到的行为是 TypeScript 的预期行为吗? 我观察到的行为是 ECMAScript 6 的预期行为吗? 是否有一种简单的方法可以返回继承层次结构以处理每个级别的“myStatic”
在php中,访问类的方法/变量有两种方法: 1. 创建对象$object = new Class(),然后使用”->”调用:$object->attribute/functi
我尝试向 ExpandoObject 添加一个动态方法,该方法会返回属性(动态添加)给它,但它总是给我错误。 我在这里做错了吗? using System; using System.Collecti
我试图获得一个静态链接到我的程序的音频库。我用 this灵活的包。为了让它运行,我必须按照描述构建 soloud 库 here .下载后不久,我在“build”文件夹中运行了“genie --with
这是我的webpack.prod.config.js代码 const path = require('path'); const { CleanWebpackPlugin } = require('c
我想知道什么时候应该对变量和(或)方法使用静态、最终、静态最终参数。据我了解: final:类似于c++中的const参数。它基本上意味着值(或在方法中 - 返回值)不会改变。 静态:这意味着值(或方
我一直在阅读有关使用静态对象作为锁的内容,最常见的示例如下: public class MyClass1 { private static final Object lock = new Obje
在 Visual Basic 2008 中,我知道有两种不同的方法可以完成同一件事: 成员(member)级别的 Dim: Dim counter1 as integer = 0 Dim counte
static public final int i = 0; public static final int i = 0; 两者都工作正常。 为什么同样的事情可以用两种不同的风格来完成? 最佳答案 因
我是一名优秀的程序员,十分优秀!