問題タブ [decoupling]

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.

0 投票する
7 に答える
1739 参照

javascript - jqueryで密結合を処理または最小化する方法

説明

設計上、ほとんどのjqueryコードは多くの密結合につながります。たとえば、セレクターはhtmlの特定の構造を想定しています。

対応するhtmlが変更された場合、何らかの理由で、

機能が壊れています。

質問

  • 密結合を処理するための最良の方法は何ですか?
  • それを緩めるためにどのようなアプローチがありますか?

回答、アプローチ

  • htmlカスタムデータ属性を使用して、cssをjsロジックから分離します。data-submenu="true"たとえば、htmlを追加しvar mySubnav = $("[data-submenu]");、js側で使用します。
  • 堅実なテスト環境を実装する
  • 最も具体性の低いセレクターを使用して、可能な限り緩く結合し$("a.sub-menu')ます。も参照してください
  • (1)静的DOM要素への参照を事前に取得し、(2)セレクター文字列を1つの場所(コードの上部)に格納することにより、jQueryコードの本体からCSSセレクターを表す実際の文字列リテラルを削除します。
  • ビューを介してJavaScriptをDOMから分離するBackboneなどのJavaScriptフレームワークを使用します
  • イベント管理によるカップリングに関してデリゲートライブを使用する
0 投票する
2 に答える
389 参照

design-patterns - 状態パターン:状態を更新するには、どのクラスを信頼する必要がありますか?

Head First Design Patternsを読んでデザインパターンを学んでおり、StatePatternの章を終えたところです。しかし、私が得られないことが1つあります。

この本では、状態を持つクラスはContextと呼ばれ、実際の状態はStateインターフェイスを実装します。リクエストが本に与えられたら、ここのメソッドを使用して状態を変更します。

  1. コンテキストはリクエストを受け取ります。
  2. Contextは、所有するStateでhandle()メソッドを呼び出し、要求をStateに渡します。
  3. 状態はリクエストを処理し、変更する必要がある場合はコンテキストに状態を設定します。これを行うために、州はフィールドとしてコンテキストを持っています。

ただし、これは2つのクラス間にいくらか「再帰的な」結合を与えるように思われ、直感的ではありません。私が彼らの解決策を読んでいないのなら、私は次のデザインを好むでしょう:

  1. コンテキストはリクエストを受け取ります。
  2. Contextは、所有するStateでhandle()メソッドを呼び出し、要求をStateに渡します。
  3. 州はリクエストを処理し、州を返します。別の状態であるかどうかは、リクエストの処理方法によって異なります。
  4. コンテキストは、独自の状態を返された状態に設定します。

私が考えることができる長所と短所:

  1. 変化する可能性のあるすべてのものをStateクラス、Context、およびStateに入れると、互いのフィールドを覗き見する必要がなくなるため、より分離されます。
  2. 州のクラスは大きくなる可能性があります。
  3. 状態は、異なるコンテキスト間で簡単に再利用できない場合があります。ただし、Stateは、Stateインターフェースを実装する抽象クラスとして実装でき、抽象状態をサブクラス化するContextsによって使用される具体的なStateを持つことができます。

最初のもの( Head First Design Patternsで使用されている)を優先する必要がある、または2番目の選択肢も有効で実際に使用されている、または私が見なかった重大な欠陥がある可能性がある特定の理由はありますか?

すべての入力と、読んで返信してくれてありがとう!

0 投票する
2 に答える
789 参照

c# - 実装の詳細を.netのクラスライブラリに適切に分離する方法

共通のインターフェイスに基づいてこれらのライブラリでアクションを実行するプロセスによって動的にロードされる個別のクラス ライブラリ/アセンブリに実装ロジックを効率的に分離するための標準的な方法が C#(または cli) にあるかどうか疑問に思っています。

より正確には、メッセージを受信し、これらのメッセージの処理を別のものに委任するサービスを構築しているとします。何かのようなもの:

ある種の構成から実行時にクラス ライブラリをロードするプロセスが必要です。ライブラリには、次のようなインターフェイス部分を実装するメインクラスまたはクラスファクトリがあると思います。

これはすべて、アセンブリ内のクラスにある種の注入可能なインターフェイスを実装させ、アプリ構成に行を追加し、無料で大量のものを取得するだけで、やや Java のように感じます。

0 投票する
2 に答える
2402 参照

vb.net - インターフェイスを扱うとき、共有メンバーをどのように処理しますか?

そのため、共通のクラス セットのインターフェイスを作成するために、膨大な量の作業を行いました。アイデアは、各クラスがセット内で使用できるインターフェイスを作成することでしたが、最終的には各クラスが異なります。インターフェイスは共有メンバーを好まないことが判明しました。私が試したこと:

明らかに、これについて下調べをしていれば、共有メンバーはインターフェイスで使用できないことがわかっていたでしょう。共有メンバーの処理を個々のクラスに完全に任せるべきですか? 共有メンバーとの結合を最小限に抑える別の方法はありますか? 単一のインターフェースを実装する約 20 程度のクラスがあります。前もって感謝します。

0 投票する
2 に答える
769 参照

types - clojureで堅牢なデータAPIを構築するには?

データ API がないため、私の clojure アプリは非常に急速に構造的に結合されることがわかりました。例外がスローされるかエラーが発生するため、入力を間違えると名前を持つキーを持つマップがあります。また、リストを分解するときに間違いを犯しやすいことにも気付きました (たとえば、リストの間違った部分を分解するなど)。

Java の世界から来た私は通常、IDE を使用して、最小限の順序付けられていないデータ オブジェクトから「適切な」データを取得するのに役立てています。しかし、clojure マップの受け渡しは、これとは逆のパラダイムのようです。

型システムやideコードの補完がない場合、クロジュリアンはどのように防御的にコーディングしますか?

0 投票する
2 に答える
1406 参照

entity-framework - Entity Framework を使用したデータ層の分離

小さな検索アプリケーションを実行するために、EF 4.0、エンティティへの linq、VS 2010、および SQL Server 2005 ストアド プロシージャを使用しています。EDM と必要なレイヤーを設計しました。プレゼンテーション層は、検索結果を適切に表示します。

現在のジレンマは、検索がさまざまなテーブルから読み取るのに十分柔軟でなければならないということです。たとえば、現在の検索では、アプリケーションはテーブル A から読み取ります。明日、アプリケーションは、テーブル A とはまったく異なる列名を持つテーブル B から読み取る必要があるかもしれません。

EDM を使用して、プレゼンテーション層に影響を与えることなく、テーブル A の列をテーブル B の列にマップする方法を教えてください。

提案/ポインタ/リンクは大歓迎です。

お時間をいただき、ありがとうございました。

0 投票する
3 に答える
464 参照

c# - DateTime.Current 依存関係の抽象化

コードが結合されたときに作成されるハード依存関係をラップする nuget パッケージ、またはその他の「標準」はありますDateTime.Nowか?

自分で書く前に、これについてのガイダンスを求めています。そうするのは簡単ではありますが、ある程度の標準として既に存在するものを使用したいと思います。

0 投票する
2 に答える
357 参照

symfony - symfony 2.0 バンドルのインターワーキング

他の開発者が独自のバンドルを作成して他の機能を実装する可能性を残して、メイン バンドルに基づいてアプリケーションを作成したいと考えています。

Symfony 2.0 はそのための良い選択のようですが、デカップリングを維持しながらバンドルを連携させる方法がわかりません。

MainBundle では、以下のようなユーザー リストを生成するコントローラーを作成します。

サードパーティのバンドルがカスタム ボタンをこのリストに追加できるようにするにはどうすればよいですか?

たとえば、AvatarBundleImage をアップロードするボタンを追加したい場合があり、 SendEmailBundleはユーザーに電子メールを送信するボタンを追加したい場合などです。

バンドルの独立性を維持するには? どうやってやるの?

どうもありがとう、マッシモ

0 投票する
3 に答える
607 参照

xna - たとえば、「ヘビ」ゲームでオブジェクトを分離する最善の方法

私は楽しみのためにC#/ XNAでヘビゲームを作成していますが、それはいくつかの優れたオブジェクトデザインを練習する良い機会です。

ヘビオブジェクト

基本的にリンクリストであるスネークオブジェクトがあり、各ノードはマップに関連するXおよびY座標を持つベクトルです。

また、ヘビが食べたばかりかどうか(この場合、この更新では最後のボディノードは削除されません)、ヘビが移動している方向など、いくつかのプロパティがあります。

マップオブジェクト

マップ(ゲームエリア)は、その内容を整数の2D配列内に保持します。プリミティブの配列を使用してマップを格納すると、メモリ消費が抑えられ、ベクトルの配列よりも高速(かつ簡単)に反復できます。

コンテンツは列挙型{Empty、Wall、Snake、Food}内で定義され、配列内の関連する座標に格納されます。

マップ内のスネークオブジェクトへの参照も保持されるため、renderを呼び出すたびに、スネークを構成するノードをループして、マップ上の正しい位置にレンダリングします。

質問!!

私の質問は...この結合がきつすぎるかどうかです。その場合、何か提案(つまりオブザーバーパターン)がありますか、それともこの状況で大丈夫ですか...

マップで使用されている座標系を知る必要からヘビを切り離す方法を考えようとしましたが、それを機能させ、各ノードの相対的な位置を維持する方法を考えることはできません-他の。

どんな答えもありがたいです、乾杯!

0 投票する
1 に答える
335 参照

c# - データ コンテナーと動作を組み合わせたオブジェクト

ワークフロー階層のストレージ ソリューションを作成しています。

図を単純化するために、Workflow と WorkflowStep の 2 種類のオブジェクトがあります。

WorkflowStep は Workflow の下に階層的に配置されますが、Workflow は WorkflowStep を集約しません。これは、これらのオブジェクトを単なるデータ コンテナーと見なすためです。

したがって、これにより、次のクラスが残ります。

ワークフロー内で WorkflowStep を集約しない理由は (論理的には適合しますが)、これらのオブジェクトは純粋にデータ コンテナーとして表示され、後で変更される可能性があり、これらのオブジェクトのストレージをオブジェクト自体から分離したままにしておく必要があるためです。

もちろん、他の代替手段は、次のようなことを行うことです。

どちらのアプローチの長所と短所は何ですか? 両方のデザインについて述べている文献はありますか?