为啥这个 C# ctor 中的可维护性指数如此之低?

Posted

技术标签:

【中文标题】为啥这个 C# ctor 中的可维护性指数如此之低?【英文标题】:Why is the Maintainability Index so low in this C# ctor?为什么这个 C# ctor 中的可维护性指数如此之低? 【发布时间】:2018-12-30 11:22:04 【问题描述】:

我有一个简单的 C# ctor,它初始化了一些变量:

public RSSSourceData()

    RSSVersion = "";
    ChannelTitle = "";
    ChannelLink = "";
    ChannelDescription = "";
    Category = "";
    Copyright = "";
    Language = "";
    PubDate = "";
    ManagingEditor = "";
    FileToProcess = "";
    OnlineSource = "";

所有变量都是string变量。

当我为整个项目运行代码度量时,对于这个 ctor,我得到了 57 的可维护性指数。我预计它会更高,因为在将值归因于变量时没有什么如此复杂需要过多的维护工作.

我在这里做错了什么?

稍后编辑:类字段的声明是:

   class RSSSourceData
    
        public string RSSVersion;
        public string ChannelTitle;
        public string ChannelLink;
        public string ChannelDescription; 
        public string Category; 
        public string Copyright;
        public string Language; 
        public string PubDate; 
        public string ManagingEditor; 
        public List<string> NewsTitle = new List<string>(); 
        public List<string> NewsLink = new List<string>(); 
        public List<string> NewsDescription = new List<string>();     
        private string OnlineSource; 
        private string FileToProcess; 
        private List<string> FileContent = new List<string>(); 

(...方法来这里)

【问题讨论】:

或者只是在你声明它们的地方初始化你的字段和属性。 最重要的因素是代码行数,试着删掉一两行,看看会不会变高 @kennyzx 我把所有的东西都写在一行代码上,分数就升到了67。哈哈,奇怪。 为什么要在构造函数中赋值RSSVersion?为什么不改用public string RSSVersion = ""; 我真的不觉得这个“可维护性指数”有用,它很像天气频道中的Comfort Index。高可维护性指数并不意味着代码写得很好。 【参考方案1】:

字段已用常量初始化。在您的示例中,它们是空的。通常情况下,它们会有一些值。

因此,如果您需要更改初始值,则需要深入研究源代码。

这就是可维护性高的原因。

【讨论】:

是的,现在就是这样。【参考方案2】:

一个简单的答案是它受代码行的影响。

一个很长的答案是它真的很难维护。

    为什么这个类/ctor 应该同时维护这么多状态? 是否有任何属性/字段依赖于之前的属性/字段初始化? 当它变长时,如何确保没有丢失属性/字段或重复初始化? 这个类是否仍然遵循高凝聚力? 如果是数据契约类,可以自动生成吗?

【讨论】:

“状态”是指“属性”?

以上是关于为啥这个 C# ctor 中的可维护性指数如此之低?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 Faster RCNN 在 GPU 上进行自定义对象检测的预测率 25 - 40 [sec/1] 如此之低?

RSA进阶之低加密指数攻击

为啥这个非常简单的 C# 方法会产生如此不合逻辑的 CIL 代码?

为什么GnuPG解密速度如此之低

绝大多数人努力程度之低,根本轮不上拼天赋

为啥看似明确的类型提示构造函数调用存在“没有匹配的 ctor”?