問題タブ [tightly-coupled-code]
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.
design-patterns - 密結合オブジェクトの症状は何ですか?
アプリケーションを設計するとき、オブジェクトが密結合されていることはいつわかりますか? 密結合されたオブジェクト/コードの兆候は何ですか?
php - 依存関係を作成せずにマジック ナンバーを回避する
私が取り組んでいる API のエラー マネージャーを作成しています。これは、API から返されるエラー コードの単一のストアを提供し、異なる呼び出しで同じエラーが同じ方法で処理されるようにするという考え方です (たとえば、要求から欠落している必要な値)。
私の最初のアプローチは、次のようなものでした。
ただし、これにより、エラーを設定したい場所のエラーコードクラスへの依存が作成されます。
代替手段は次のとおりです。
しかし今、コードの途中に何の意味もない数字が置かれています。
この特定の問題の解決策を考えることができますが、「列挙型」を使用したい他の状況があり、クラスを密結合しない解決策を思いつきません。
これを行うためのより良い方法や、マジック ナンバーを削除するための別のアプローチはありますか? それとも、ケースバイケースで受け入れて検討する必要があるのは密結合ですか?
actionscript-3 - 密結合を避けるには?
私は先週、この問題を回避しようとしてきましたが、シングルトンまたは密結合を必要としない解決策を見つけることができないようです。私は 3D スペース ゲームを開発しています。その初期のデモはここにあります...
www.sugarspook.com/darkmatters/demo.html
...そして、プレイヤーができるミッションを追加するところまで来ています。ヘッドアップ ディスプレイ (Hud クラス) から選択します。
ゲームの構造は次
のとおりです。 Game クラスには Hud と ObjectsList クラスが含まれています。
ObjectsList クラスには、プレーヤー、さまざまな種類の船、惑星、軌道 (宇宙ステーション) など、さまざまなゲーム オブジェクトが含まれています。
プレイヤーが軌道から一定の距離内に到達すると、ミッションがインスタンス化されます。
ミッションは、ObjectsList 内の MissionsList クラスに追加されます。
ミッションは (別のパイロットによって選択されたかのように) 警告なしに使用できなくなり、期限切れになる可能性があるため、Hud に表示されるリストは動的で定期的に更新されます。
以前は、ゲームまでイベントをディスパッチするミッションがあり、それが Hud に変更を通知していました。情報を渡す必要がある Hud にはさまざまなより深い「レベル」があるため、これは少し不格好に思えます。チェーン全体で同じ機能がたくさんあることになります。
私が考えていた解決策は、MissionsList クラスへの参照を Hud に挿入して、Missonslist からの更新をリッスンできるようにすることでした。何かの状態とその表示を混在させるのは悪い習慣だと聞いたことがありますが、ミッションの「ライブ」リストを Hud に取得する方法が他にわかりません。対照的に、Hud に表示の詳細のみが含まれ、それらの詳細を生成した Mission オブジェクトへの参照がない場合、プレイヤーが Hud からミッションを選択すると、どのミッションが選択されたかをどのように判断できますか? この場合、密結合は問題ありませんか? または、シングルトンを使用して Hud と通信する必要がありますか? 私が提案していることに根本的な問題がある場合は、それが何であり、何が最善の解決策であるかを教えていただければ幸いです. ありがとう。
code-structure - アプリケーション パラメータの密結合を回避しようとする
私の Web アプリケーションには、このような URL パラメーターを解析するメソッドがあります。
当社の部門の 1 つに、このアプリケーションのパラメーターを含む URL のリストがありますが、理由はわかりませんが、これらのパラメーターを変更するのは困難です。このような URL を使用する場合があります。.../default.aspx?Service=Wells&Layer=ActiveWells&Query=XYZ IN ('1234567890...')
最近、次のような変化がありました。「ActiveWells」レイヤー名が「Surface Participation Wells」に変更されました。「BoreStick」レイヤー名が「WellBores」に変更されました。したがって、その部門の事前設定された URL パラメーターは機能しなくなります。
私のマネージャーは、「ActiveWells」のインスタンスを「Surface Participation Wells」のようなものに変更するコードを追加するように私に言いました。その後、マネージャーは、後で URL パラメーターを持つ部門がそれらをすべて新しい名前に変更したときに、そのコードを削除できると言いました。
「密結合」とは正確にはわかりません。しかし、私はそれが悪いことを知っており、これはその例のように聞こえます. また、コードを一時的に保持して後で削除することを意図してコードを追加することは、悪い考えのように思えます。
しかし、私は自分の命令に従い、次のようなコードを追加しました:
静的な LayerNameChange メソッドに switch ステートメントがあります。
今から数か月または数年後、このアプリの開発者は誰であれ、他の部門が事前設定されたすべての URL パラメータの変更を完了したときに、これを削除する必要があることを知っているはずです。
これに似た別のシナリオは、コンソールまたは Windows ベースのアプリケーションが、
これを行うためのより良い方法はありますか?
編集:
上で述べたことの代わりに、以下の疑似コードのようなことをしたらどうなるでしょうか。
呼び出しメソッドには、ある種の、
解析メソッドが NameConverter クラスの存在を知る必要があるのはなぜですか?
そう自分に問いかけました。
結局のところ、私が見ているように、それは URL パラメーターを解析する責任の一部ではありません。
私がこれを考えすぎているかどうかはわかりません。私はこのレベルの開発の認識に不慣れです。質問は既に回答済みであることは承知していますが、私のこの新しいアイデアについてさらにコメントをいただければ幸いです。
java - Hibernate と SQL の移植性
私は持続性が初めてで、「Pro JPA 2」という本を読んでいます。Java と JDBC パックの問題点は
- SQL は移植可能ではありません
- Java コードと SQL の密結合
JDBC の皮肉なことに、プログラミング インターフェイスは移植可能ですが、SQL 言語は移植可能ではありません。SQL を標準化するための多くの試みにもかかわらず、2 つの主要なデータベース プラットフォームでそのまま実行される複雑な SQL を記述することはまだまれです。SQL ダイアレクトが類似している場合でも、クエリの構造に応じて各データベースのパフォーマンスが異なるため、ほとんどの場合、ベンダー固有のチューニングが必要になります。
私の質問は次のとおりです。
- SQL の移植性に関連する問題は依然として重大ですか?
- 私が理解しているように、Hibernate、TopLink、およびその他のフレームワークも、メタデータ (注釈) から SQL クエリを作成する必要があります。SQLの移植性に関連する問題をどのように整理していますか?
- Java と JDBC の密結合は、開発者が SQL クエリを作成する必要があることを意味します。私はそれを正しく理解していますか?
あなたの応答を前もって感謝します )
spring - インターフェイスの実装は密結合ですか?
ここで言う
コードを Spring に密結合するため、InitializingBean および DisposableBean インターフェースの使用はお勧めしません。
それは理にかなっていますか?これは密結合とは正反対だと思いました。
bash - 結合されたシェル スクリプト間でオプションをきれいに渡す
myBaseScript.sh
次の署名を持つ(bash)シェルスクリプトがあります:
このスクリプトは、次のようにmyBaseScript.sh
を介してオプションを解析します。getopts
mySuperScript.sh
ここで、 を呼び出すscript を作成して、myBaseScript.sh
オプションをベース スクリプトに転送できるようにします。
[OPTIONS]
で使用されるオプションはどこにありますかmyBaseScript.sh
。では使用されませんmySuperScript.sh
。
このスクリプトは、すべてのディレクトリなどmySuperScript.sh
をクロールし、有効なファイルのリストをコンパイルして に渡します。DIR1
[DIR2]
${FILES[@]}
myBaseScript.sh
今私はこれを持っていますmySuperScript.sh
:
whereは現在のパス${FILES[@]}
にあるファイルのリストです。言い換えれば、これは
ただし、オプションDIR1
の[DIR2]
、 などは対象外です。
私は使用できます
そして as の最初のエントリ$OPTIND
をに渡します。しかし、これは非常に複雑に思えます。さらに、有効なオプションのリストを に複製する必要があり、これは管理上の悪夢です。$allOpts
[OPTIONS]
myBaseScript.sh
myBaseScript.sh
これらのオプションの解析専用の新しいスクリプトを作成することもできます。しかし、それは以前には存在しなかった依存関係を作成するため、少し厄介に思えmyBaseScript.sh
ます...
では、これを行う最もクリーンな方法は何ですか?
android-layout - アクティビティからレイアウトを半分離して申し訳ありませんか?
少なくとも Droidio (Android Studio) では (Eclipse についてはわかりませんが、Droidio はそれに基づいているため、おそらく ItelliJ Idea にも当てはまります)、新しいアクティビティを作成すると、対応するレイアウト ファイルも作成されます。 . デフォルトでは、以下の「xmlns:tools」行と「tools:context」行の 2 つのプロパティによって、Activity に密接に結合されています。
アクティビティは、次のように *.java ファイルの onCreate() メソッドで対応するレイアウトにも自動的にバインドされるため、これは私には奇妙/不必要に思えます。
これは単に「徹底」している(ベルトやサスペンダーを着用している)だけなのか、それともきつすぎるカップリングなのか?レイアウト側 (コントローラー/アクティビティーへの) の明示的な配線には、少しコードの匂いがします。xml から疑わしい 2 行 (「xmlns:tools」と「tools:context」) を削除しても問題なく動作するため、これらの行の目的がわかりません。
アクティビティ/レイアウト (コントローラー/ビュー) を半分離したミリ秒を無駄にすることはできますか?