問題タブ [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 投票する
3 に答える
1757 参照

c# - データ クラスをレイヤーやアプリケーション全体で再利用するか、レイヤー固有のクラスにマップする必要がありますか?

WCF サービスを使用してデータ ソースと対話する WPF アプリケーションを作成しています。クライアントと WCF サーバーの両方に DI を使用して分離されたコードを確保していますが、バックエンドからユーザー インターフェイスへのデータ転送を処理する方法がわかりません。

レイヤーを別々に保つために、データは現在、いくつかのマッピング手順を介してデータベースから UI に転送されます。サーバー側では、データ エンティティはドメイン オブジェクトにマップされ、ドメイン オブジェクトは再びサービス データ コントラクトにマップされます。クライアント側では、WCF プロキシ クラスがビューモデルにマップされます。

職場の一部の開発者は、変更が導入されたときに非常に多くのクラスを更新する必要があるため、一見同一のクラス間でデータを「コピー」するとメンテナンスの問題が生じると主張しています。代わりに、クライアント アプリケーションと WCF サービスの両方を制御するため、レイヤー全体で共有クラスを使用する必要があると言われています。私も関連する作業量を心配しており、パフォーマンスが低下する可能性があると考えていますが、一方で、レイヤー/抽象化全体で共有クラスを使用すると、密結合が発生する可能性があります。最善のアプローチは何ですか?

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

javascript - この JavaScript コードをさらに切り離すにはどうすればよいですか?

JavaScript オブジェクトがあります。そして、あなたは次の行を見ることができます:

ウィンドウに緊密に結合されています (gv初期化されていない場合はクラッシュします)。しかし、私が本当にしたいのは、次のことです。

しかし、それはうまくいきません。私にできることはありますか?これは完全なリンクです (密結合あり):

そしてページ...

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

ruby-on-rails - 状態結合の防止?

次のオブジェクトと関係があります。

ビジネスルール

推論

質問モデル

明らかに、質問モデルの状態は、テストとクラスの状態に結合されています。

単体テストを作成するとき、これをテストするには、この状態をすべてセットアップする必要がありますが、特にビジネス ケースがますます複雑になるにつれて、これは非常に扱いにくくなります。

どうすればこれを回避できますか?

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

javascript - 任意の JSON を DOM に埋め込むためのベスト プラクティスは?

次のように任意の JSON を DOM に埋め込むことを考えています。

これは、後で JavaScript テンプレート エンジンで使用するために任意の HTML テンプレートを DOM に格納する方法に似ています。この場合、後で JSON を取得し、次のように解析できます。

これはうまくいきますが、それが最善の方法ですか?これは、ベスト プラクティスまたは標準に違反していますか?

注: JSON を DOM に格納する代わりの方法を探しているわけではありません。それが、私が抱えている特定の問題に対する最善の解決策であると既に判断しています。私はちょうどそれを行うための最良の方法を探しています.

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

c# - ViewModel でルックアップを処理するにはどうすればよいですか?

建物のデータベース テーブルには、建物の種類がコードとして格納されます。別のルックアップ テーブルに、そのコードの説明が格納されます。

どのように設計すればよいViewModelですか? また、関連する説明の値を取得するには、どこで呼び出しを行う必要がありますか?

1つのオプションを見ることができます。より良いオプションがあるかどうか知りたいです。

それから私の見解では

私の考え方は間違っていますか?上記を実行すると、サービスへの依存関係が作成Viewされますか?

更新 1

提供されたソリューションのいくつかに取り組みます。私は別の問題に遭遇したようです。各建物のコンストラクターに直接アクセスできません...

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

objective-c - ObjectiveCにクラスを登録する

classAオーディオ入力を何度もサンプリングするオーディオのクラスであるとしましょう。新しいデータを取得するたびclass Aに(1秒間に何度も発生する可能性があります)、彼は別のクラスに通知する必要がありclassBます。

class B これで、 inのインスタンスをclassA作成し、新しいデータが到着したときにBを呼び出すことができますが、これはモジュラーソフトウェアではありません。

classAは外部に「盲目」になり、すべてのプロジェクトに彼を追加し、何らかの方法で彼を支援する別のプロジェクトをclassB作りregisterたいので、Aが何か新しいものを持っているとき、Bはそれを知っています(AがBを呼び出さなくても!)

Objective Cでどのように正しく行われたのですか?

どうもありがとう 。

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

java - デカップリングのための高速応答を備えたバスおよび REST サービス?

REST API を公開している複数のバックエンド モジュールがある場合、モジュールの 1 つは API を介して他のモジュールを呼び出し、すぐに応答する必要があります。

解決策は、この「トップ」モジュールから REST API を直接呼び出すことです。問題は、カップリングが作成され、スケーリングやフェイルオーバーがネイティブにサポートされないことです。

一種のバス (JMS、ESB) を使用すると、モジュールが認識しているエンドポイントが不要になるため、モジュールを分離できます。彼らはバスに「話しかける」だけです。

バスを介して高速応答を有効にするには、何を使用しますか?

また、引き続き REST API に依存することは合理的ですか、それとも JMS リスナーの方が優れているでしょうか? JMS、Camel、ESB について考えました。そのようなアーキテクチャを使用している企業について知っていますか?

ps: モジュールは、たとえば tomcat インスタンスで実行されている Java war である可能性があります。

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

jquery - jQueryのdeferredの「then」メソッドをいつ使用する必要がありますか?「pipe」メソッドをいつ使用する必要がありますか?

jQueryDeferredには、関数の非同期チェーンを実装するために使用できる2つの関数があります。

then()

deferred.then( doneCallbacks, failCallbacks ) Returns: Deferred

doneCallbacksDeferredが解決されたときに呼び出される関数または関数の配列。
failCallbacksDeferredが拒否されたときに呼び出される関数または関数の配列。

pipe()

deferred.pipe( [doneFilter] [, failFilter] ) Returns: Promise

doneFilterDeferredが解決されたときに呼び出されるオプションの関数。
failFilterDeferredが拒否されたときに呼び出されるオプションの関数。

then()私はそれより少し長くなっていることを知っているpipe()ので、後者はいくつかの追加の利点を追加する必要がありますが、違いが正確に何であるかは私にはわかりません。Deferred名前は異なり、aを返すこととaを返すことの違いPromiseはわずかに見えますが、どちらもほぼ同じコールバックパラメータを取ります。

私は公式ドキュメントを何度も読んだことがありますが、常に「密度が高く」すぎて頭を包み込むことができず、検索するとどちらかの機能について多くの議論が見つかりましたが、違いを明確にするものは見つかりませんでしたそれぞれの長所と短所。

では、いつ使用するのが良いのかthen、いつ使用するのが良いのpipeか?


添加

フェリックスの優れた答えは、これら2つの機能の違いを明確にするのに本当に役立ちました。then()でも、の機能よりもの機能の方がいい時があるのではないでしょうかpipe()

それはpipe()より強力であることは明らかでありthen()、前者は後者ができることは何でもできるようです。使用する理由の1つthen()は、その名前が、同じデータを処理する一連の関数の終了としての役割を反映しているためである可能性があります。

しかし、新しいものを返すために実行できないthen()元のを返す必要があるユースケースはありますか?Deferredpipe()Promise

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

php - データベース CODE を実際に切り離す

Web アプリケーションを作成するプロジェクトにいます。php5で書いています。

ユーザー システム (ログイン、新しいユーザーの登録など) を作成していたときに、突然データベース コードがいたるところにありました。誤解しないでください。単一のクエリ関数を持つシングルトン データベース クラスを使用しています。

ここまでは順調ですね。しかし、SQL クエリをどこに置くのでしょうか? つまり、インターネット上の例では、認証システムのデータベース クエリが 2 つのまったく異なるモジュールを強力に結合していることがわかります。MySQL データベースを使用しないことにした場合はどうなりますか? 次に、MySQLDB クラスを接続およびクエリ関数と交換するだけでなく、SQL クエリを含む Web アプリケーション全体のすべての部分を交換する必要があります。

私の解決策は、MySQLDB クラスの隣に MySQLQueryer 静的クラスを用意することでした。すべての SQL クエリを保持して実行する場所。この新規ユーザー登録関数のように:

ハッシュとソルトの作成はすべてユーザー認証モジュールで行われることに注意してください (つまり、データベース モジュールではありません)。

これは良い解決策だと思いますか、それとももっと良い解決策がありますか? たとえば、上記の登録関数を含む AuthenticationMySQLDatabaseHelper クラスを作成した方がよいでしょうか? つまり、個別のモジュールごとに、クエリを実行するための独自の MySQLDatabaseHelper クラスを持たせます。

多分私は問題をそれよりも大きくしていますか?

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

php - $_POST/$_GET 処理コードを HTML フォーム/URL から切り離すにはどうすればよいですか? (PHP-OOP)

クラスには、使用可能な post/get 変数に基づいてアクションを実行する処理メソッドがあります。簡単な例を次に示します。

したがって、実行時にメソッドをこのように呼び出すことができます$handler->handleAll($_POST)。問題は、$vars 配列に格納されている変数の名前を「var1」および「var2」などにする必要があることです。これは、処理コードが html フォーム要素の名前または URL の get 変数 (または実際にはのキー) と結合されていることを意味します。渡された任意の配列)。

任意の変数の配列を注入できるようにすると、メソッドが柔軟になります。これは、ポリモーフィックでもあるため必要です。クラスはこのメソッドを継承し、それを使用して独自のアクションを呼び出します。この結果、処理方法が機能するために何が必要かが外部からは明らかではありません。これは、実装を調べて、それが何をするかを調べる必要があることを意味します (愚かなコードを phpdoc にコピーしない限り)。

これを回避する方法がわかりません。(このような複数のクラスからの) インデックス ページに膨大な if/case ステートメントがすべて公開されていると、非常に厄介なコードになるため、これらすべてをメソッド内にカプセル化することをお勧めします。また、自身の状態を操作するアクションの呼び出しを担当するクラスのメソッドとして持つことも理にかなっています (責任駆動設計)。各変数をメソッドのパラメーターとして使用することを考えましたが、一部のクラスではパラメーター リストが非常に大きくなります。また、さまざまなクラスの多くの handleAll() メソッドを自動的に呼び出すことができないことを意味します。これは、呼び出しごとにすべてのパラメーターを明示的に注入する必要があり、ポリモーフィックな側面が取り除かれるからです。

要約すると、メソッドをポリモーフィックに保つ必要がありますが、HTML フォームまたは URL からのユーザー入力から処理コードを分離する何らかの方法が必要です。これを行う際に、インターフェイスを実装から分離する方法もあるかもしれません。これに対する解決策がまだ見つからないことに驚いています。これは一般的な問題のようです。