問題タブ [coupling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
separation-of-concerns - 「結合」はコードのみに関連するものですか? それとも、この用語はソフトウェア コンポーネントとアーキテクチャに適用できますか?
たとえば、ビルドまたはデプロイ プロセスについて議論し、それが IDE から独立していることを確認する場合などです。これは「カップリング」ですか、それとも懸念の分離と見なされますか、それともまったく異なるものですか? 一般的な概念は、プロセスまたはアーキテクチャに導入する変数の数を最小限に抑えることです。これにより、障害が発生した場合に、障害の可能性のあるポイントを特定する難しさが大幅に軽減されます。そのための別の定義はありますか?
c++ - モジュール クラスの管理に最適なオプション
私のゲーム ベースは、クラスとして編成された一連のモジュールで構成されており、これらは必要に応じて作成、更新、および対話します。
CWindowManager
、、、CGraphicsManager
などの例がいくつかありCPhysicsManager
ます。
私は現在、それらにグローバル ポインターを使用していると言わざるを得ないことを恥じています ( extern CWindowManager* g_WindowManager;
)。これはおそらく悪いことだとわかっています。
いずれにせよ、これらのモジュールは動的に作成および削除する必要があり、もちろん正しい順序で行う必要があります。また、モジュールライクCPhysicsManager
はシーンに依存するため、シーンが切り替わると削除され、再度作成されるという問題もあります。
ここで、ゲーム内でモジュールを操作するためにグローバルを使用するのをやめたいと思います。
私はリファクタリングを恐れていませんが、グローバルに代わる最良の方法は何かを本当に考えることはできません.
CModuleManager クラスを作成し、そこにモジュールのインスタンスをメンバーとして格納し、CModule 基本クラスから派生させることを考えました。これがどのように機能するかについては、詳細には考えられませんが。
これは、ソフトウェア開発、特にゲーム開発における一般的な問題のようです。
- 単純にグローバル ポインターを使用する場合と比較して、モジュールを管理するための最良のオプションは何ですか?
coupling - 凝集対。カップリング
この質問は、ソフトウェアをツリーのように扱います。
- ツリー内の各ノードは、コード単位を表します (例: クラス \ メソッド \ 行など)。
- ソース コードで X が Y に設定されている場合、ノード X はノード Y の息子です。
T という用語の定義は次のとおりです。
ノード X に対する T は、X の変更が X のサブツリー内にあるノードの変更をもたらす確率です。
T という用語は何ですか? 凝集またはカップリング ?
database - データとロジックの間の抽象化をあいまいにできるのはいつですか?
特定のデータベース行を ID で参照するか、コードから参照するか、データベース内のクラス名を指定することを意味します。例:
というデータベース テーブルがありますSocialNetwork
。ルックアップテーブルです。アプリケーションは、書き込み、書き込み、または削除を行いません。主にデータベースの整合性のために存在します。シバン全体が次のようになっているとしましょう。
コードには、Facebook ユーザーに対して実行する必要がある特別なロジックがいくつかあります。私が通常行うことは、コード内で列挙型またはいくつかのクラス定数を作成して、次のように簡単に参照できるようにすることです。
これは、ハードコードされたデータベース ID です。ルックアップテーブルを参照しているだけなので大した犯罪ではありませんが、データとロジックが明確に分かれていないのが気になります。
私が考えることができる他のオプションは、データベース内のクラスまたはデリゲートの名前を指定することですが、データとロジックの間の分割を壊しただけでなく、データとロジックの分割を壊したため、IMO はさらに悪いことです。今の言語。
私は何もないことを大騒ぎしていますか?
oop - パブリック関数間の結合
do3() という関数があるとします。その関数を機能させるには、関数 do1() および do2() を実行する必要があります。
ただし、 do1() と do2() は他のものにも必要になる可能性があります (おそらく do4() の場合)。
これらの関数はすべてパブリックです (そしてパブリックである必要があります)。
質問、コードをどのように実装すればよいですか?
オプション1 :
したがって、do3() を呼び出すと、カップリングが表示されますが、すべてが行われると確信しています。
オプション 2
したがって、do3() を呼び出したいときは、
カップリングが少ないため、2 番目のオプションの方が優れていると思いますが、その理由を説明することはできません。オプション 1 を使用し、ある日 do2() を変更すると、問題が発生する可能性があると思います。
ただし、オプション 2 では、do3 を使用するたびに必ず do1 と do2 を呼び出す必要があります。
誰かがより良いアイデア(オプション3?)を持っているなら、それは素晴らしいことです。
ありがとう
asp.net-mvc - ビューにエンティティを渡さないことの利点
通常、ビューにエンティティを渡してはいけないと言っている人を見かけます。エンティティを使用すると結合が増加するため、代わりに DTO/VO/ViewModel/AnyOtherThingYouWant を使用する必要があると彼らは言います。追加のロジックが必要な場合 (または、すべてのプロパティが必要ない場合) を無視すると、これを行う利点がわかりません。たとえば、次のクラスを考えてみます。
次のように、別のクラスを作成するコードがたくさんあります。
ビューで使用してから、次のようにします。
ビューはエンティティのクラスに結合されたクラスに結合されるため、単純に Contact クラスを使用するよりもこれがどれほど優れているかわかりません。したがって、一方のすべての変更を他方に複製する必要があります。私の見解では、「中間」オブジェクトは複雑さを追加するためだけに存在し、実際の価値はありません。「フリーサイズ」の解決策がないことは知っていますが (中間オブジェクトを使用することが理にかなっている場合もあります)、このようなコードを追加する必要は本当にあるのでしょうか? 本当のメリットとは?
oop - プログラム全体で使用される公開静的データ
コード例は C# ですが、これは一般的な OO の質問です。
オブジェクト指向のルールに従って、クラスの結合を最小限に抑え、可能な限りメンバーを非公開にする必要があることなどを知っています。
次の例を検討してください。
プログラムの文字通りすべての面で使用されるある種のデータセット(System.Data.DataSetについては話していません)を持つ難解なプログラムを作成しています。実際、このプログラムは基本的に、データ セットをロード、表示、操作、および保存するためだけに存在します。さらに、一度にロードできるデータセットは 1 つだけであり、プログラムが開いたときにロードされます。
オブジェクト指向のルールに厳密に従えば、
ただし、たとえば にpublic static Data
メンバーを格納する可能性があります。Program
一方で、大幅に増加したクラス結合のために、わずかに短い関数シグネチャを交換しました。一方、実質的にすべての関数にDataパラメーターを渡すことはなくなりました。
正しい答えはおそらく次のとおりです。可能な限りクラスの結合を避けます。ローカル データ変数は単なるポインターであるため、メモリ オーバーヘッドは無視できます。また、クラスが分離されているため、後で別の場所で使用できます。
現実的に言えば、Data クラスの構造は別のアプリケーションでは驚くほど異なる可能性が高いため、このプログラムからクラスを取り出して、微調整なしで別の場所にドロップできるわけではありません。ドロップインできるような方法でクラスを作成するために必要な余分な時間と労力は、利害関係者に正当化するのが難しい場合があります。
私は現在、この種のプログラムに取り組んでおり、OO-canon アプローチを使用しました。データ パラメーターは必要な場所に渡されます。将来のコードの再利用のためにデータ セットを一般化するために、IData インターフェイスとのクラス結合を最小限に抑えました。アプリケーションを考えると、このコードが再利用されることはないとほぼ確信しています。これらの追加のインターフェイスと抽象化がなければ、プログラムはエンド ユーザーに関する限りまったく同じように機能していたでしょうが、私にとっては頭痛の種と開発時間が大幅に削減されていたでしょう。
これについてあなたはどう思いますか?クラスが後で別の場所で使用されているのを確認できない場合は特に、できる限りクラスが分離されるように、インターフェイスと一般化を作成するために余分な時間を費やすことは正当だと思いますか?
coupling - カップリングと凝集力を測定するためのツール
システム内の結合と結束を測定するのに役立つツールを知っていますか?
symfony - バンドル (関連する Doctrine 2 エンティティ) を Symfony 2 とカップリングに統合する
私が理解しているように、バンドルは機能を分離することです。UserBundle
&があるとしBlogBundle
ます。次に、を参照BlogBundle:Post
するauthor
フィールドが作成されますUserBundle:User
。それはバンドルの目的に反していませんか? 別のものを交換することはできUserBundle
ませんか?どうすれば適切な方法で行うことができますか?それとも、これが最善ですか?
oop - MATLABとグローバル変数の使用?
私はdicom画像と分光法のツールを書いていますが、作成している関数間で使用したい共有データがたくさんあります。私は自分で作成したGUIを持っており、さまざまなスライダーとボタンがdicomファイルからのこの共有データの多くを使用しています。
私はこれらすべての関数が共有する情報を格納するためにグローバル変数を使用してきました。現在、グローバルがたくさんあります。結合が増えるため、可能であればグローバル変数を避けるように教えられてきました。各関数のdicomファイルからデータを読み込む方が良いでしょうか?これは冗長なようです。オブジェクト指向のヘルプとしてMATLABを使用しますか?