論理的結束とは何ですか?なぜそれが悪いまたは望ましくないのですか?


10

結合と凝集に関するc2wikiページから:

凝集度(モジュール内の相互依存性)強度/レベル名:(悪いものから良いものへ、高い凝集性が良い)

  • 偶然の凝集度:(最悪)モジュール要素は無関係
  • 論理的凝集度:要素は、外部モジュールから選択されたものと同様のアクティビティを実行します。つまり、実行する操作を選択するフラグによって実行されます(CommandObjectも参照)。つまり、関数の本体は1つの巨大なif-else / switch on operationフラグです
  • 一時的な結束:実行される一般的な時間のみに関連する操作(すなわち、initialization()またはFatalErrorShutdown?())
  • 手続き的結束:それぞれが異なるデータにある、異なるが順次のアクティビティに関与する要素(通常、線形シーケンス境界に沿って複数のモジュールに簡単に分割できます)
  • コミュニケーションの結束:同じデータまたは入力を必要とする以外は無関係な操作
  • シーケンシャル凝集:重要な順序での同じデータの操作。1つの関数の出力が次の関数に入力される(パイプライン)
  • 情報のまとまり:モジュールはいくつかのアクションを実行します。各アクションには独自のエントリポイントがあり、アクションごとに独立したコードがあり、すべて同じデータ構造で実行されます。基本的に、抽象データ型の実装。つまり、sales_region_tableとその演算子の構造を定義します。init_table()、update_table()、print_table()
  • 機能的結束:すべての要素が1つの明確に定義されたタスク、つまり1つの操作を実行する関数get_engine_temperature()、add_sales_tax()に貢献します

(強調鉱山)。

私は論理的な結束の定義を完全に理解していません。私の質問は:

  • 論理的な結束とは何ですか?
  • なぜそんなにひどいラップ(2番目に悪い凝集力)になるのですか?

回答:


7

機能的特性ではなく技術的特性によって機能をグループ化することになるため、論理的なまとまりが悪くなる可能性があります。たとえば、複数のモジュールで構成されるアプリケーションを考えます。各モジュールはビジネスドメインを表し、対応するデータアクセスコードがあります。すべてのモジュールにわたってすべてのデータアクセスコードをグループ化すると、論理的なまとまりが生まれます。結局のところ、これはすべてデータアクセスであり、アプリケーションのデータアクセスパターンを評価できると便利な場合があります。ただし、技術ドメインではなくビジネスドメインがモジュール境界を提供するため、これには問題があります。論理的な結束を達成することで、機能的な結束を失うことになります。通常、ビジネスドメインは、明確に定義された展開の単位を定義し、ビジネスドメインをサポートするための技術的な側面があります。


これは良い答えですが、混乱を避けるために、オブジェクト指向プログラミング(およびWikipediaとc2wikiの例)のコンテキストでは、モジュールは本質的にクラスであると述べました。これは、「巨大なif / else」に関するコメントもより意味があることを意味します。
ダニエルB

2

それがどのように記述されているかから、私は、ある程度の凝集性を持っているが、オブジェクト指向を壊すコードを一緒に結合することについてであると私は言うでしょう。

例:ポリゴンの面積の計算。正方形の計算と三角形の計算を組み合わせて、input-paramのみで選択すると、実際の性質を考慮せずに、2つの要素が結果によって論理的にグループ化されます。


0

私の個人的な見解では、logical用語が正しく選択されておらず、混乱を招いています。それlogicalは良いと思う傾向があります。多くのシナリオでfunctionalは、と交換できますlogical

私が代わるlogicalとのtechnical 技術的な部分ではなく、上のあなたの焦点があるため長期(と私は言葉を使いたいlogical、ここが、それはこの議論の文脈の中で誤解を招くことになります)このコンポーネントは、システム全体のために何をしますか。

典型的な例は、いくつかのAPIにエンドポイントを提供するクラスのグループ化です。
それらがエンドポイントを提供するため、それらをいくつかのフォルダーにグループ化する場合、それはtechnical cohesionです。それらがいくつかの機能(たとえば、管理ユーザーリストなど)を提供するためにグループ化した場合、それはfunctional cohesion


また、functional期間が広すぎるので、ここでも用語に挑戦します。これは、機能を構文構造および機能として参照できます。上記の例では、エンドポイントクラスには、エンドポイントとビジネスロジックの2つの機能があります。

私は交換するでしょうfunctionallogical。それは、4 + 1ソフトウェアビューモデルをbusiness logic指しlogical view、一般に、物事が正しい場合は「論理的」と呼ぶ傾向があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.