2

堡首先讓我更好地解釋背景和問題。是否可以使用NDepend在OOP語言中查找類分區?

語境

我們有方法十幾個大類;它違反了許多軟件工程原理,並且這通過代碼度量衡工具清晰可見。 看到內聚力差,方法太多等等。

enter image description here

問題 當我們試圖將類分成更小的類與實例方法出現的問題。他們需要從類中訪問一個或多個字段/屬性,將所有訪問特定字段/屬性的方法放在一起可能會很有用。嘗試使用Resharper→Refactor→Extract Class將一堆方法移動到新類時,問題清晰可見。 enter image description here

是否可以劃分連接在一起的方法和字段(使用代碼度量標準術語具有很高的內聚性)?

回答

2

當然,我們可以在這裏做一些有趣的事情,但這需要一個分區算法,我不確定選擇哪一個。

查詢可能看起來像:

// Replace "NHibernate.Cfg.Configuration" with your "Namespace.TypeName" 
let type = Application.Types.WithFullName("NHibernate.Cfg.Configuration").Single() 
let dicoFields = type.Fields 
    .ToDictionary(f => f, f => f.MethodsUsingMe.Where(m => m.ParentType == f.ParentType)) 
let dicoMethods = type.Methods 
    .ToDictionary(m => m, m => m.FieldsUsed.Where(f => f.ParentType == m.ParentType)) 

// The partition algorithm on both dicos here 

from pair in dicoFields 
orderby pair.Value.Count() descending 
select new { pair.Key, pair.Value } 

//from pair in dicoMethods 
//orderby pair.Value.Count() descending 
//select new { pair.Key, pair.Value} 

這是否幫助前進?

NDepend field method partition algorithm

+0

是的,謝謝,我現在將從這一點着手,並請求數據科學部門進一步研究。 – Revious

+1

好極了,如果你想出很酷的公式,請更新回覆 –

+0

當然,我在這裏打開了這個問題(如果你看到不喜歡的東西,請隨時糾正它):https://datascience.stackexchange。 COM /問題/ 22818 /這此結果的格式要求的換一個分區算法 – Revious

0

起價@Patrick從NDepend的團隊答案我做了到達的一些理論和一些部分解決例如,某些進一步的調查。

這裏可以看到其中alghoritm效果很好 http://sqlfiddle.com/#!17/51b0d/2

在這裏,一個問題一個例子(應該有沒有相同的元素): http://sqlfiddle.com/#!17/51b0d/7

要理解這部分的解決方案,您可以看herehere

Here你可以找到它的問題是整體的複雜性以及採取了哪些建議start fromhere另一個答案。

相關問題