問題タブ [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.
vb.net - CrystalReportViewerからCrystalReportを切り離すのに役立ちます
VisualStudio2005とVB.NETを使用しています。
いくつかのCrystalReportsがあり、それぞれにCrystalReportViewerを含む独自のダイアログリソースが関連付けられています。クラス定義は次のようになります。
基本的に、ダイアログをインスタンス化し、アイテムを必要なリストに設定して、ShowDialogを呼び出します。
これらのレポートのいくつかを1つのレポートに結合する必要があります(おそらくこのように)が、レポートのフィールドをロードするコードはダイアログにあります。
レポートの初期化をダイアログから切り離すにはどうすればよいですか?
ありがとう!
php - 保守が容易で結合の少ないプログラムの作成方法を教えている本/チュートリアル?
私は PHP プログラマーであり、自分のコードの品質を向上させたいと思っています。そして最も重要なことは、プログラミングが上手になりたいということです。
結合が少なく保守が容易なプログラムを作成する方法を教えてくれる、どの本、チュートリアル、または記事を読むことをお勧めしますか? PHP、特に CakePHP フレームワークに関する特定のヒントはありますか?
前もって感謝します!
oop - Cohesion と Decoupling、それらは何を表していますか?
結合と分離とは何ですか? カップリングに関する情報は見つかりましたが、デカップリングに関する情報は見つかりませんでした。
dependency-injection - ソフトウェアレイヤーの依存性注入とデカップリング
アプリのテスターを使いやすくするために、依存性注入を実装しようとしています。私はかなり基本的な疑問を持っています。
データ層は、SqlConnection オブジェクトを使用して SQL サーバー データベースに接続します。SqlConnection オブジェクトは、データ アクセス レイヤーの依存関係です。依存性注入の法則に従って、依存オブジェクトを new() するのではなく、コンストラクター引数を介して受け入れる必要があります。DI の神々を混乱させたくないので、SqlConnection を受け取るコンストラクターを DAL に忠実に作成します。
ビジネス層は DAL を呼び出します。したがって、ビジネス層は SqlConnection を渡す必要があります。プレゼンテーション層はビジネス層を呼び出します。したがって、これも SqlConnection をビジネス層に渡す必要があります。
これは、クラスの分離とテスト容易性に優れています。しかし、たまたまリレーショナル データベースを使用するデータ レイヤーの特定の実装に、UI レイヤーとビジネス レイヤーを結合しただけではありませんか?
基になるデータ ストアが SQL であることをプレゼンテーション層とビジネス層が認識する必要があるのはなぜですか? アプリが SQL サーバー以外の複数のデータ ソース (XML ファイル、コンマ区切りファイルなど) をサポートする必要がある場合はどうすればよいでしょうか。さらに、データ レイヤーが依存する別のオブジェクト (たとえば、2 番目のデータベース) を追加するとどうなるでしょうか。ここで、この新しいオブジェクトを渡すように上位レイヤーを変更する必要があります。
このメリーゴーランドを回避し、痛みを伴わずに DI のすべてのメリットを享受するにはどうすればよいでしょうか?
c# - Web Config を使用した TDD
すべての素晴らしいストーリーは、常にこの 4 つの魔法の言葉から始まります... システムを継承しました... 待って!それは違います!
とにかく、私のユーモアの試みは終わったので、既存のサービスをサポートしなければならないことはあまりありません。
このサービスの使用に関しては、多くの問題があります。たとえば、個人のレコードを作成する場合、サービスの 4 つの異なる部分を呼び出す必要があります。
そのため、マネージャーと協力して、新しいサイトを作成するときに、数と正しい順序を単純化するために、一般的な要求にファサードを追加するために、別のレイヤーを上に貼り付ける必要があると判断しました。
誰かが上記のワッフルを避けたい場合、私の質問はここから始まります
そのため、現在行っている作業で TDD を使用したいと考えていますが、継承したサービス (データ層になります) は、Web.Config の特定の接続文字列ノードにあるデータベース接続文字列と強く結合されています。
私が抱えている問題は、サービスを構成ファイルから切り離すには、私が持っていない数週間の時間がかかることです。
そのため、予想されるノードを含む App.Config ファイルを Test プロジェクトに追加する必要がありました。
これを行っても問題ありませんか、それともデータベース構成をデータレイヤーから分離するために時間を費やす必要がありますか?
function - コードを関数に分割するときの黄金律は何ですか?
モジュール化/デカップリングのためにコードを関数とクラスに分割するのは良いことですが、やりすぎると本当に断片化されたコードになってしまい、これも良くありません。
コードを関数に分割するときの黄金律は何ですか?
unit-testing - 何かの状態を変更するために別のクラスに依存するクラスを単体テストするにはどうすればよいですか?
クラスA
のインスタンスを含むクラスとB
、の状態を更新する呼び出し関数foo
の関数があります。コード例(Javascript)は次のとおりです。A
set
B
B
(モックやスタブなどを使用して)実装に依存しないfoo
ようにテストを維持しながら、関数を単体テストするにはどうすればよいですか?A
B
web-services - デカップリングは、レガシー アプリケーションの再設計に役立ちますか?
私はいくつかのインターネット ショップを運営する会社で働いています。サイトのコンテンツと製品の管理、注文処理、パートナー関係、経理、顧客ベースなど、コード全体を完全に書き直しています。現在、すべてのもの (すべての内部管理サイト、ビジネス ロジック、およびインターネット ストア Web サイト) が単一の LAMP インスタンス上で実行され、完全にすべてのデータが文字通り単一のガベージ データベースに配置されているシステムがあります。このため (また、10 年間の開発、perl、php コードの品質から部分的に書き直されているため) 新しい Web ストアを導入し、既存のものを再設計したり、ロジックの何かを変更したりすることは、一種の不可能な作業です。
古いコードを書き直すだけでなく、システム アーキテクチャを最適化するために、Web サイトを (相互に) 分離し、Web サイトから「ビジネス コア」を分離し、ビジネス コアを相互に分離することに決めました。
ある時点から、すべての Web ショップはほとんどが 1 つの共通の製品ベースを販売しています。それらは一種の鏡であり、海外の顧客をターゲットにするために設計が異なる場合があります (タイトルと説明は異なる場合があります)。私たちが販売するものは、ローカルパートナーに依存するサービス製品ですが、事前に定義された共通の製品範囲があります. ただし、一部の都市では特別価格を設定しており、他の都市では通常の商品範囲に加えて充実した商品範囲を提供しています。そのため、特定の都市に焦点を当てた専用の Web サイト、特別オファーのみを販売する Web サイトなども運営しています。
各 Web サイトが独自の製品データベース (別のコピーである場合もあります) を持つソリューションとは対照的に、私はすべての製品の説明情報、異なる都市および/または異なるサイトでの入手可能性、および価格を単一の分離された製品管理システムに構成することを検討しています。 SOAPを介してすべての情報を提供します。また、ユーザーがサイトにアクセスするたびに、サイトはそのサービスを消費し (いくつかのパラメーターを提供)、製品を一覧表示します。どうやら共通のアクセス ライブラリを開発して、すべてのサイトに含めることができます。
1) その解決策は適切ですか? キャッシュなしで十分に高速に実行できますか? リソースが限られているため (1.5 開発者)、すべてのサイトで memcached を使用する必要があるなど、技術的な複雑さを (可能な限り) 導入しないようにしています。
2) 分離した方法でシステムを再構築するとします。memcached などを使用したすべての作業に自分自身を従事させるのに十分なメリットがありますか?
3) SOAP サーバー側でデータをキャッシュすることは合理的ですが、Web サイトではなく、何千もの SOAP リクエストを作成し続けますか?
すべてのシステムは分離されます。それらに関連する Web サイトの一部は、注文処理、顧客認証 (すべての Web サイトで共通)、支払い受け取りの統合などです。注文を Web で行う必要がある注文処理の場合-サイトは、SOAP を介してリモートで注文処理システムに配置し、次に独自の SOAP サーバーを公開して、注文ステータスの更新を受信します。
4) そのデカップリング SOAP 中心の哲学は正しいですか?
使用するテクノロジは、nginx、php、MySQL です。
java - デカップリング-OOP
簡単な質問があります(Javaでの作業)。2つのクラスがあります。1つはドキュメントを表し、もう1つは単語を表します。
Documentクラスは、Wordに保持されている単語に関する情報を知っている必要があります。私の質問は、2つのクラスを分離するための最良の方法は何ですか?私は2つのオプションを念頭に置いています:
クラス間には接続がなく、Documentでメソッドを呼び出すたびに、Wordのオブジェクトを渡します(したがって、DocumentとWordの両方を開始するメインメソッドを持つ3番目のクラスがあります)。
Document内でWordのプライベートオブジェクトを宣言します。
注意すべき点の1つは、Word用とDocument用のオブジェクトが1つしかないことです。新しいドキュメントや単語ごとに新しいオブジェクトを作成するわけではありません。ドキュメント全体のリストをDocumentに保存し、単語全体のリストをWordに保存します。
ありがとう!
c - GUIとプログラムロジックが分離されるようにプログラムを設計する方法
しばらくしてGTK+を使って最初のCプログラムを作り始めています。私はある程度Cを学び、PyGTKを使って仕事をしたことがあるので、両方について十分に理解しています。しかし、私はCでGUIプログラムを作成したことはありません。それは機能しましたが、プログラムロジックがすべてGUIのものと混ざっていたため、私の最後のGUIプログラムは少し混乱していました。GUIとプログラムロジックを分離して作成するのが最善であると読んだので、GUIライブラリを切り替えても、かなり苦痛はありません。
これは正しいですか?ビジュアルリストにアイテムを追加するとします。アイテムを論理リストに追加し、そのリストを調べてGUIを更新する関数でそれを実行する関数はありますか?
例えば、
これを行うための一般的なプロセスは何ですか?
アドバイスをいただければ幸いです。
編集:
MVCに関するアドバイスをありがとう。私が与えた例の文脈でそれを説明できますか?MVCに関する情報はたくさんありますが、ここでのコード例にMVCがどのように適用されるかを理解するのに苦労しています。