C# Get方法的大小
就代码行而言,对于“Get”的大小是否有任何指导原则或普遍共识?我在一个成员上有一个Get方法,它可以很容易地扩展到30行代码。我不确定在什么情况下应该将其引入到方法中。但是我只会调用它,比如GetMyString,并将值赋给另一个成员,然后在构造函数中调用它 这样做值得吗C# Get方法的大小,c#,properties,access-modifiers,members,C#,Properties,Access Modifiers,Members,就代码行而言,对于“Get”的大小是否有任何指导原则或普遍共识?我在一个成员上有一个Get方法,它可以很容易地扩展到30行代码。我不确定在什么情况下应该将其引入到方法中。但是我只会调用它,比如GetMyString,并将值赋给另一个成员,然后在构造函数中调用它 这样做值得吗 这太主观了吗?在Get方法中塞进一大堆行是一种常见的错误做法。 我在VisualStudio中安装了一个叫做CodeMaid的东西。它有一种叫做CodeMaid Spade的东西,它对每种方法进行评分并给你打分。分数越高,你
这太主观了吗?在Get方法中塞进一大堆行是一种常见的错误做法。
我在VisualStudio中安装了一个叫做CodeMaid的东西。它有一种叫做CodeMaid Spade的东西,它对每种方法进行评分并给你打分。分数越高,你的方法就越差。它也可以用于属性。我建议您尝试一下,它有助于格式化、缩进和一系列其他良好实践实际上大小并不重要(没有双关语)。 你的逻辑在一个getter中是可以的,只要
- 没多久就回来了
- 它不连接到外部资源(数据库、服务等)
- 它没有任何副作用
Alberto的奖励:作为一般准则,一个方法的行数不应超过一个屏幕上的行数。如果你必须滚动,它太大了。把它分成更小的方法。不一定不好,但如果是我,它会让我紧张,我会想办法把它打破。getter是一种方法,因此在我看来,简单地将整个过程拉到一个30+行的方法中是浪费时间的。我想把它切碎。例如,如果是包含一些检查的循环,则将检查提取为方法或类似方法。dcastro的回答很好,但可以使用一些扩展:
- 没多久就回来了
- 它不连接到外部资源(数据库、服务等)
- 它没有任何副作用
让一个属性产生可观察到的副作用不仅在哲学上是不好的,而且还会扰乱您的调试体验。请记住,在调试器中查看对象时,默认情况下调试器会自动调用其属性getter并显示结果。如果这样做很慢,则会减慢调试。如果这样做可能会失败,那么您的调试体验将充满失败消息。如果这样做有副作用,那么调试程序会改变程序的工作方式,这可能会使查找错误变得非常困难。当然,您可以关闭自动属性评估,但最好首先设计好属性。我不知道属性的具体指南,但许多最佳编码实践在一种方法中使用7-10行作为首选行数。getter在做什么?好问题。getter用于包含类似于以下文章的功能的类中:您会注意到其中有许多stings(例如baseString),可以从类上的其他成员(例如所有OAuth标记)构造这些stings。在相关的注释中,方法的动词选择通常是关于其复杂性的一个很好的提示。看,这正是我要写的。如果你问我,“副作用”部分是最重要的。任意的线限制就是这样-任意的。我们应该尽可能地小,但是仅仅因为一个任意的限制而将方法拆分会妨碍可读性。我想补充一篇关于在属性和方法之间进行选择的好文章:我想补充一条简单的规则:当你想明确声明它做的事情不仅仅是“返回值”我认为方法应该尽可能小,不能更小。仅仅因为一些任意的限制(一个屏幕-什么分辨率?)-会妨碍可读性。常识高于任意限制。谁的屏幕?:)有时有一个长的方法是好的。只有逻辑才能决定方法的大小。感谢Eric的提醒!我不太喜欢量化;我认为“它不应该比常规数据访问花费太多时间”是一个很好的处方。