局部函数和 SOLID 原则 C#

Local functions and SOLID principles C#

我知道从 C# 7.0 开始我们可以创建本地函数,但这与实现良好设计模型的 SOLID 原则有何关联?

我的意思是,这不是打破了单一职责原则,在另一个函数中添加一个函数吗?

我们可以将这个简单的任务委托给另一个方法或另一个新的 class 来计算吗?而对于允许我从 SomeClass 继承来修改它的 Open-Closed 原则现在更复杂,我现在需要重写整个基函数而不是只重写我的代码的一部分?

可能我们只需要重新编写方法的某些部分而不是更改其上的整个功能。

有时你不需要用另一种方法污染你的基础上下文,它只会在一个方法中使用,但你需要它作为一种匿名方法在你的代码中做一些事情,我建议你看一下this

we are able to create local functions, but how is this related with the SOLID principles to achieve a good design model?

本地函数通过提高代码的可读性和可维护性来帮助您创建好的代码。不过,这与 SOLID 并没有真正的关系。

does not the Single Responsibility is broken adding a function inside another function?

怎么会这样? The Single Responsibility Principle 表示 "every module or class should have responsibility over a single part of the functionality provided by the software, and that responsibility should be entirely encapsulated by the class"。您在 class 中组织代码的方式不会改变责任级别或实现的封装。

我在一定程度上同意你的看法。这里的答案是否支持所谓的上帝(小 g)方法,我个人认为,就像你一样,方法应该在它们所做的事情上是精确的。

也就是说,局部函数实际上可以支持 SOLID。一个例子是能够轻松地连接来自事件的回调,从而赋予方法单一职责、关闭范围并最大限度地减少错误。这可以通过本地代表来完成,但它不是那么干净或直接。

递归局部函数也符合SOLID。在很多情况下,您必须编写两种方法来完成一个操作,因为它是一种递归方法,现在您可以将所有逻辑放在一个地方。有时,根据传递的数据和类型,局部函数实际上会执行得更好,因为它们借用了作用域变量。

这只是两个简单示例,可能不需要争论或大量代码来说明局部函数如何更好地与 SOLID 内联,但还有更多。

局部函数也很容易污染您的代码并使方法难以管理/阅读并背离 SOLID 原则。就像任何其他 C# 组件一样,我们有责任选择何时以及为何使用本地函数和 SOLID,以及我们在这样做时应考虑的其他开发实践/指南。我不同意让方法变得更长、更复杂,或者仅仅为了确定方法的范围而做不止一项工作。