問題タブ [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.
language-agnostic - コードで現在の合計を使用しないようにするにはどうすればよいですか?
私は今、学校でプログラミングとソフトウェア設計とJavaを学んでいます。私を混乱させているクラスはソフトウェアデザインです。Wordを使用して単純なVBコードを実行し、単純なプログラムを実行しています。私のインストラクターは、現在の合計を使用することによって私がまとまりを失っていると言います。私はそれらを回避する方法を考えるのに苦労しています。これが私が話しているいくつかの擬似コードの例です(モジュールは表示されていないドライバーモジュールから呼び出されます):
基本的DiscountPrice
に、最初の2つのモジュールを結合し、次に次DeliveryPrice
の2つのモジュールを結合するために使用されます。おそらく、最後のモジュールが存在する必要さえないかもしれませんが、私はこの問題を修正しました。初心者に何か助けはありますか?
.net - .Net Remotingは密結合に依存していると思いますか?
クライアントとサーバーの両方がリモート化されているオブジェクトについてすべてを知る必要があることを考えると、最初にこの密結合であり、次に.Net Remotingは他の方法で機能しますか?
c++ - クラスが結合したいとき
以前はうまく分離されていた 2 つのクラスに問題がありますが、今は結合したいと考えています。
問題の詳細についてはあまり詳しく説明しませんが、次のとおりです。
以前は、3 つの空間位置頂点を含むクラス Triangle がありました。
プログラムには多くの Triangle インスタンスがあったため、それぞれが頂点の独自のコピーを保持していました。getArea()
などのメンバー関数getCentroid()
はクラスTriangle
で記述され、各Triangle
インスタンスには頂点 a、b、および c のコピーがあったため、領域または重心を見つけることは他のクラスに依存しませんでした。あるべき姿!
次に、他の理由から、頂点配列/インデックス バッファー スタイルの表現に移行したいと考えました。Scene
これは、すべての頂点がオブジェクト内にある単一の配列に格納され、それぞれが頂点自体のコピーではなくTriangle
、頂点への参照のみを保持することを意味します。Scene
最初は、ポインターに切り替えてみました。
(利点について疑問がある場合は、主に頂点を共有する三角形に関係する理由でこれを行いました。*a が移動すると、その頂点を使用するすべての三角形が自動的に更新されます)。
これは本当に良い解決策だったでしょう!しかし、 std::vector はpointers を無効にし、 class のマスター頂点リストに std::vector を使用していたため、確実に機能しませんでしたScene
。
したがって、整数を使用する必要がありました。
しかし今、私はこの新しいカップリングの問題を抱えています.それ自身の領域または重心を見つけるために、クラスは以前はアクセスできなかった場所にTriangle
アクセスする必要があります. class Scene
何かを fsck`d したように見えますが、実際にはそうではありません。
WWYD?
ruby-on-rails - Railsアプリケーションでモジュールを使用するモデル
補助ソースから外部データをロードする必要があるモデルがあります。モデルがデータをフェッチできる(スワップ可能な)Webサービスは多数存在しますが、サービスの変更を困難にするコードを作成したくありません(コストは可変使用量と固定使用量によって大幅に異なり、変更される可能性があります)必要になります)。
インタラクションを実行するためのドライバーを作成したいと思います(サービスの切り替えが必要な場合は、さらにカスタムドライバーを作成します)。残念ながら、ドライバーとモデルは緊密に結合されているため、コードをプラグインまたはgemに抽出することは意味がありません。すべてのコードをモジュールに抽出し(例を参照)、現在、モデルの上でコードを宣言しています。
Rails(3.0.0)には、モデルと緊密に結合されたモジュールを格納するための規則がありますか?これを行うためにプラグインを使用する必要がありますか?これは「app/helpers」ディレクトリに関連付けられていますか?そうでない場合、コードを保存するのに最も適切な場所はどこですか?ありがとう!
c# - WCF とモッキング
私は WCF に関しては経験が浅く、WCF サービスを簡単にモックする方法を本当に理解できません。
状況: クライアントとサーバーの両方が、サービスを定義するインターフェイスにアクセスできます。たとえば、次のようになります。
さて、私の最初の質問は、共有ライブラリでサービスを定義する同じインターフェイス タイプをクライアントとサーバーで共有したくない理由があるかどうかです。もちろん、サービスのコンシューマが .NET でない場合や、ライブラリを持たないサード パーティにサービスを公開する場合は、その可能性はまったくありませんが、可能性がある場合にそれを共有しても、それらを傷つけることはありません。他のシナリオですよね?
次に、それが悪い考えではない場合、実際に Visual Studio にサービス インターフェイスを再利用させるにはどうすればよいでしょうか? 共有アセンブリでも定義されている をCustomer
チェックすることで、型を共有することができましたが、それでもインターフェイスが再生成されます。Re-use types
しかし、これらの問題に関係なく、クライアントをモック可能にするにはどうすればよいでしょうか? VS で生成されたサービス参照を調べると、具体的な型が得られますが、コードでその型を直接参照したくないので、インターフェイスと対話したいと考えています。生成されたクライアントを として公開するとICustomerService
、これClose
は機能しますが、インターフェイスでメソッドが定義されていないため、メソッドがありません。
私はまた、次のアプローチを考え、自動生成クライアントを完全に放棄し、クライアントを自分で書くだけです。
それは機能IServiceClient<ICustomerService>
し、IoC コンテナーとして公開することができますが、それが今であり、インターフェイスが変更さclient.Services.GetCustomer(1)
れたときにクライアントを簡単に再生成するという利点を失ったことに注意してください。ICustomerService
追加するのは簡単なコードですが、これを維持するのは面倒かもしれません。
別の可能性は、生成されたクラスが であるという事実を利用することですpartial
。これを行うときにも機能します。
しかし、それは偽のクラスとインターフェイスを作成しました。これは災害ではありませんが、あまりきれいではありません。
いずれかのルートに進む前に、見落としている明らかなものはありますか?
c++ - 自動インスタンス化されたスマートポインタ
私は、C ++プロジェクトでヘッダー結合を減らす簡単な方法を探しています。これは、もちろん完全な型を必要とする(使いすぎた)クラス構成が主な原因です。例えば:
インターフェイスとpimplも検討しましたが、どちらも手動で記述/サポートしたくない定型コードを暗示しています(またはこれを自動化する方法はありますか?)。
そこで、メンバーをポインタとのようなフォワードに置き換えることを考えましたclass B* pB;
が、これにはオブジェクトの作成と削除の処理が必要です。わかりました。削除にはスマートポインタを使用できますが(auto_ptr
作成時に完全な型が必要なため、次のように言いますshared_ptr<class B> pB;
)、オブジェクトの作成を今すぐ行うにはどうすればよいですか?
A
のコンストラクターでオブジェクトを作成できますpB = new B;
が、これも手動であり、さらに悪いことに、複数のコンストラクターが存在する可能性があります...したがって、これを自動的に行う方法を探しています。これは簡単に機能します。インスタンス化を気にすることなく、の定義に変更B b;
するように。autoobjptr<class B> pB;
A
pB
これは新しいアイデアではないと確信しているので、一般的な解決策やディスカッションへの参照を教えていただけますか?
更新:A
明確にするために、との間の依存関係を壊そうとはしていませんが、ヘッダーが含まれている場合はヘッダーがB
含まれないようにします。実際には、はの実装で使用されるため、一般的な解決策はのインターフェイスまたはpimplを作成することですが、今のところもっと簡単なものを探しています。B
A
B
A
A
UPDATE2:仮想デストラクタ(不完全なタイプを許可するため)と組み合わせると、ここで提案されているような怠惰なポインタがトリックを実行することに突然気付きました(ブーストなどでこれの標準実装はありません)。標準的な解決策がない理由がまだわからず、車輪の再発明をしたいと思っています...
UPDATE3:突然、Sergey Tachenovは非常に単純な解決策(受け入れられた答え)を提供しましたが、それが実際に機能する理由を理解するのに30分かかりました... A()コンストラクターを削除するか、ヘッダーファイルでインラインで定義すると、魔法はもう機能しません(コンパイルエラー)。明示的な非インラインコンストラクターを定義すると、メンバーの構築(暗黙的なものも含む)は、型B
が完全な同じコンパイル単位(A.cpp)内で行われると思います。一方、A
コンストラクターがインラインの場合、メンバーの作成は他のコンパイルユニット内で行われる必要があり、B
そこでは不完全であるため機能しません。まあ、これは論理的ですが、今私は興味があります-この動作はC ++標準によって定義されていますか?
UPDATE4:うまくいけば、最終的な更新。上記の質問に関する議論については、受け入れられた回答とコメントを参照してください。
oop - ファクトリ デザインでないときに、オブジェクトが別のオブジェクトを生成することは問題ありませんか?
クラス ZipFile とクラス Content があるとします。
ZipFile には、zip アーカイブ内のすべてのファイルの内容を読み取り、それを Content オブジェクトに入れるための load() メソッドがあります。
最も適切な OOP 設計は何ですか?
1) ZipFile.load() は Content オブジェクトを作成します
B) ZipFile コンストラクターに Content オブジェクトを指定して入力する
基本的にオブジェクトは分離(疎結合)した方が良いのでしょうか?昔ながらの手続き型プログラマーとして、私は OOP を設計するいくつかの方法に疑問を抱くのを止めることはできません。「これをOOPする最良の方法は何ですか。それを熟考するためのアドバイスはありますか?本ですか?ウェブサイトですか?
ご協力いただきありがとうございます
coupling - OO設計でのカップリング
私は2つのオブジェクトを持っています。Meeting オブジェクトと Action オブジェクト (会議で提起されたアクション)。アクションは、ミーティングから独立して存在することもできます。提起されたアクションをミーティングにリンクするには、次の 2 つの方法があります。
- "addToMeeting(Action action)" などの Action オブジェクトを渡す Meeting のメソッドがあります。ミーティングの内部で、アクションをミーティングにリンクします。ただし、このアプローチでは、Meeting オブジェクトが Action オブジェクトのメソッドを認識して使用する必要があるため、結合されます。
- 「addToMeeting(int actionID)」など、リンクするアクション番号を渡すだけの会議のメソッドがあります。これで、Meeting オブジェクトは Action について何も知る必要はありませんが...アクションをミーティングに追加するコードは、アクション ID を取得する方法を知る必要があるため、この「meeting.addToMeeting(action)」から変更されました。この「meeting.addToMeeting(action.getID())」に。
適切な OO 設計のためには、どのアプローチを使用する必要がありますか? それとも第三の方法がありますか...
java - 結合/凝集度
このフォーラムには結合度と凝集度の例を含む多くの良い例がありますが、私はそれをコードに完全に適用するのに苦労しています。コード内で変更が必要な可能性のある部分を特定できます。Javaの専門家なら誰でも私のコードを見て、どの側面が良いか悪いかを説明してくれるでしょうか。自分で変えてもかまいません。多くの人がお互いに意見を異にしているようで、どの原則に従うべきかを実際に理解するのは難しいと感じています...
actionscript - Flash / ActionScript - アプリケーション設計に関する質問
誰かがこれをどのように設計すべきかを共有できますか:
を使用して構築されたデータモデルがあるとしEntries
ます。
基本的に、私は 1 つの抽象クラスEntry
(またはインターフェイスIEntry
- この場合はそれほど重要ではありません) を持ち、このクラスのいくつかの実装を持っています - MovieEntry
, SoundEntry
, FoodEntry
, 何でも...
これらはそれぞれ、いくつかのデータ (URL、説明、カロリー数など) のラッパーであり、このデータは対応する各クラスにグループ化されます。
ここで、エントリのデータを画面に表示したい場合(たとえば、映画のポスターや の注釈などMovieEntry
)、どのように設計すればよいでしょうか?
明らかに、私は別のインターフェース/抽象クラスを提供してそれを呼び出しDrawableEntry
(そして継承しSprite
ます)DrawableMovieEntry
、次のような一連のクラスを構築DrawableSoundEntry
できます。
しかし、これは小さなアプリケーションにとってはやり過ぎのようです。
もう 1 つの方法は、MovieEntry
, SoundEntry
, ... スプライトを拡張し、描画の実装自体を提供することですが、データがその視覚化ルーチンと強く結合されるため、これは明らかに悪いことです。
それで - これはどのように行うべきですか?MVC アプローチには、この場合に提供できるものがあるのではないでしょうか?