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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.87830 の関連記事表示

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

    分類:[C#] 

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

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

親記事 /過去ログ151より / 関連記事表示
削除チェック/

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

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

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

    もしそういった対応となるとプログラム設計での修正となるので、状況次第によっては対応することが適切なのか微妙ですけどね。
記事No.87830 のレス /過去ログ151より / 関連記事表示
削除チェック/

■87844  Re[2]: クラス結合度を落としたい
□投稿者/ 結合 -(2018/07/04(Wed) 21:35:18)
    >関係するクラスの数を減らすことになるので、1つのメソッド内で現れるクラス数を減らせばよいのではないでしょうか。
    >初期化を行うメソッドの処理を複数のメソッドに分け、分けたメソッドを呼び出すような形にすれば解決したりしませんかね。

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

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

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

    ところで、この「コードメトリクスを計算」機能を使っているのは珍しいのでしょうか。
    コードメトリックスでプログラムの保守のしやすさがわかるという噂を見て使い始めたのですが
    あまり使っている人がいなければこだわる必要もないのかなと思い始めてます。
    どなたか使ってらっしゃる方はいないでしょうか。
記事No.87830 のレス /過去ログ151より / 関連記事表示
削除チェック/

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

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

    目安として計算しても良いけど、あくまで目安で、「**以上になったから対策すべし」ではないと思いました。
記事No.87830 のレス /過去ログ151より / 関連記事表示
削除チェック/

■87846  Re[2]: クラス結合度を落としたい
□投稿者/ 774RR -(2018/07/05(Thu) 09:02:07)
    > 「**以上になったから対策すべし」ではないと思いました。
    オイラも「ツールに踊らされる」のは却下。

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

    > オブジェクト変数のプロパティに初期値を入れる処理が多数ある
    外部から値を注入する設計であるクラスに対して結合度が高いといわれてもそりゃ設計どおりなので、
    あとは「修正すべきか」あたりからの検討となるわけだ。
    オイラなら「修正しない」(その理由を明記)んだろうな。
記事No.87830 のレス /過去ログ151より / 関連記事表示
削除チェック/

■87856  Re[3]: クラス結合度を落としたい
□投稿者/ 結合 -(2018/07/07(Sat) 21:21:15)

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

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

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

    皆様ご意見ありがとうございます。
記事No.87830 のレス / END /過去ログ151より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -