C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

クラス結合度を落としたい

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■87830 / inTopicNo.1)  クラス結合度を落としたい
  
□投稿者/ 結合 (1回)-(2018/07/03(Tue) 22:27:40)

分類:[C#] 

.netの「ツールでコードメトリクスを計算」をしようすると
メソッドの「クラス結合度」の数値が高い値になっている箇所があります。(25以上)

フィールドに定義したオブジェクト変数のインスタンス生成とオブジェクト変数のプロパティに初期値を入れる処理が多数あるメソッドです。
そのような処理をしているメソッドのクラス結合度を落とすにはどうすればよいでしょうか。


引用返信 編集キー/
■87831 / inTopicNo.2)  Re[1]: クラス結合度を落としたい
□投稿者/ にゃるら (29回)-(2018/07/04(Wed) 10:03:05)
No87830 (結合 さん) に返信
> .netの「ツールでコードメトリクスを計算」をしようすると
> メソッドの「クラス結合度」の数値が高い値になっている箇所があります。(25以上)
>
> フィールドに定義したオブジェクト変数のインスタンス生成とオブジェクト変数のプロパティに初期値を入れる処理が多数あるメソッドです。
> そのような処理をしているメソッドのクラス結合度を落とすにはどうすればよいでしょうか。

# 使ったことがない機能ですので具体的な数値の計算方法を知りませんが、機能の意味から考えての思いつきです。
# ちゃんとした回答があれば無視してください。

関係するクラスの数を減らすことになるので、1つのメソッド内で現れるクラス数を減らせばよいのではないでしょうか。
初期化を行うメソッドの処理を複数のメソッドに分け、分けたメソッドを呼び出すような形にすれば解決したりしませんかね。
また保持している変数の見た目上の数を減らすため、ブリッジパターンなどを使ってクラスを分けてみるのも手かもしれないですね。

もしそういった対応となるとプログラム設計での修正となるので、状況次第によっては対応することが適切なのか微妙ですけどね。
引用返信 編集キー/
■87844 / inTopicNo.3)  Re[2]: クラス結合度を落としたい
□投稿者/ 結合 (2回)-(2018/07/04(Wed) 21:35:18)
>関係するクラスの数を減らすことになるので、1つのメソッド内で現れるクラス数を減らせばよいのではないでしょうか。
>初期化を行うメソッドの処理を複数のメソッドに分け、分けたメソッドを呼び出すような形にすれば解決したりしませんかね。

確かにメソッドを分割すると値は下がりますね。

>もしそういった対応となるとプログラム設計での修正となるので、状況次第によっては対応することが適切なのか微妙ですけどね。

ただ、ご指摘の通り設計でフォームのロードイベントでフィールド変数の初期化をすることを決めていたので他のプログラムも見直さないといけなくなりますね。
こちらで対応を考えてみます。

ところで、この「コードメトリクスを計算」機能を使っているのは珍しいのでしょうか。
コードメトリックスでプログラムの保守のしやすさがわかるという噂を見て使い始めたのですが
あまり使っている人がいなければこだわる必要もないのかなと思い始めてます。
どなたか使ってらっしゃる方はいないでしょうか。

引用返信 編集キー/
■87845 / inTopicNo.4)  Re[1]: クラス結合度を落としたい
□投稿者/ Jitta (385回)-(2018/07/04(Wed) 22:30:20)
No87830 (結合 さん) に返信
> .netの「ツールでコードメトリクスを計算」をしようすると
> メソッドの「クラス結合度」の数値が高い値になっている箇所があります。(25以上)
>
> フィールドに定義したオブジェクト変数のインスタンス生成とオブジェクト変数のプロパティに初期値を入れる処理が多数あるメソッドです。
> そのような処理をしているメソッドのクラス結合度を落とすにはどうすればよいでしょうか。
>
>

計算させてみましたが、int や string といった使わなければプログラムになり得ないような型もカウントしているので、どうかな、と。
また、メソッド単位で出ますが、1メソッドが使う型の数を減らしても、クラスが使う型の数が変わらなければ、「結合度が下がった」と言って良いのでしょうか?

目安として計算しても良いけど、あくまで目安で、「**以上になったから対策すべし」ではないと思いました。
引用返信 編集キー/
■87846 / inTopicNo.5)  Re[2]: クラス結合度を落としたい
□投稿者/ 774RR (614回)-(2018/07/05(Thu) 09:02:07)
> 「**以上になったから対策すべし」ではないと思いました。
オイラも「ツールに踊らされる」のは却下。

WinForms App において Form1 と Control の結合度が高いと言われてもそりゃそのとおりで、
じゃあ Form1.Designer.cs を修正するかといわれればそんなの無理。

> オブジェクト変数のプロパティに初期値を入れる処理が多数ある
外部から値を注入する設計であるクラスに対して結合度が高いといわれてもそりゃ設計どおりなので、
あとは「修正すべきか」あたりからの検討となるわけだ。
オイラなら「修正しない」(その理由を明記)んだろうな。
引用返信 編集キー/
■87856 / inTopicNo.6)  Re[3]: クラス結合度を落としたい
□投稿者/ 結合 (3回)-(2018/07/07(Sat) 21:21:15)

>目安として計算しても良いけど、あくまで目安で、「**以上になったから対策すべし」ではないと思いました。

>オイラも「ツールに踊らされる」のは却下。
>外部から値を注入する設計であるクラスに対して結合度が高いといわれてもそりゃ設計どおり

いろいろ考えてみましたが、外部から値を注入する設計のクラスがかなりの量になっているので、
クラス結合度をツールで測って落とそうとするのはあきらめようと決めました。

皆様ご意見ありがとうございます。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ