問題タブ [modular-design]

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 投票する
0 に答える
127 参照

asp.net-mvc - SoC を維持しながら MVC で Unity を使用する

プロジェクト ソリューションの簡易版を提供します。私のソリューションには次のプロジェクトがあります。MVC、コア、データ、共通。Common は、列挙型、静的クラス、データ転送オブジェクトなどを保持します。ロジックもアセンブリもありません。MVC レイヤーは Core と Common にアクセスできます。Core は Data と Common にアクセスできます。データは Common にアクセスできます。

インターフェイスを使用して依存関係を消費するクラスが既にあります。IoC 用に Microsoft Unity を実装したいと考えています。UnityConfig を MVC、Core、および Data プロジェクトに追加しました。その後、Unity に各プロジェクト クラスを登録させることができました。これは問題なく動作し、バッグに問題があると思いました。

私のチームの開発者の 1 人が、そのようにすべきではないと言っています。3 つのレイヤーすべてに依存関係を追加していること。私は彼の主張を理解し、この環境で Microsoft Unity を実装するためのベスト プラクティスは何かと考えています。

他の開発者は、データ層参照を MVC プロジェクトに追加するように求めています。その後、Unity を MVC プロジェクトだけに含めることができます。データ層を MVC プロジェクトの範囲に入れるという考えは本当に好きではありません。私は開発者がエンティティを直接呼び出すという悪い経験をしたことがあり、コア層 (ビジネス層) を使用してコア層にデータベース呼び出しを行わせるように強制したいと考えています。

Unityが3つのレイヤーすべてを表示できるようにするためだけに、別のプロジェクトを追加することも検討しています。単一の構成ルートを持つ限り、これが問題を引き起こす可能性があることが指摘されました。私が以前に本当に考えていたものではありません。

MVC からデータ層への参照の追加を含まないクリーバー ソリューションを本当に望んでいます。

事前にどうもありがとうございました。

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

javascript - Javascript でモジュールのスコープを設定するために IIFE が必要なのはなぜですか?

core.js があるとします

これをファイルに含めると<script src="core.js">

1) グローバル名前空間を汚染します

2) 別の変数を [置き換える/置き換える] 可能性があります。

しかし、オブジェクトにすれば問題は解決しませんか? つまり、このようにcore.jsを作成します

このアプローチの根本的な問題は何ですか? 完全なオブジェクトが作成されるまで、他のアイテムにアクセスできないためですか? たとえば、core = {a:"Foo" , b:a}うまくいきませんか?しかし、私はそれを解決することができました

クロージャーに本当に興味がないのに、なぜ IIFE (Immediately Invoked Function Expression) に入る必要があるのでしょうか? すべてを別の名前空間で公開することを気にしないJavascriptの「モジュール名前空間」の場合、このアプローチは機能し、Javascriptでモジュール効果を作成しませんか?

これについてもっと読むための指針はありますか?私はそれが少し曖昧であることを知っていますが、IIFE requirejs などのようなこの概念は初めてです。初心者の視点から理解しようとしています。

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

c# - ServiceLocater パターンで Ninject を使用する - 良いか悪いか

Ninjectに慣れようとしています。依存性注入の原則を理解し、Ninject の使用方法を知っています。しかし、私は今少し混乱しています。Service Locator パターンに関しては、意見が分かれています。

私のアプリケーションは厳密にモジュール化されています。私はできる限りコンストラクター注入を使用しようとしていますが、これはかなりうまく機能しますが、少し面倒です (私の意見では)。

拡張機能 (外部コード) がこのシステムの恩恵を受けたい場合、カーネルにアクセスする必要があるのではないでしょうか? つまり、現在、アプリケーションのすべてのサブシステムにアクセスできる静的クラスが 1 つあります。別の方法として、カーネル (Service Locator パターン) にアクセスし、そこからサブシステムの依存関係を取得します。ここでは、カーネルへのアクセスを許可することを簡単に回避したり、カーネルへの依存関係を許可しないことで、より明示的にしたりできます。

しかし、拡張機能が私のアプリケーションのコンポーネント (インターフェース) を任意のサブシステムから使用したい場合、それらを解決するためにカーネルにアクセスする必要があります。これは、使用していない限り Ninject が自動的に解決されないためです。 「kernel.Get()」ですよね?

Peww、これをわかりやすい方法で説明するのは本当に難しいです。皆さんが私が目指しているものを手に入れることを願っています。

カーネルまたはそのラッパーに依存することが「悪い」のはなぜですか? つまり、すべての依存関係を回避することはできません。たとえば、すべてのサブシステムへのアクセスを提供する「コア」クラスへのクラスがまだあります。拡張機能が独自のモジュールをさらに使用するために登録したい場合はどうなりますか?

なぜこれが悪いアプローチである必要があるのか​​ についての良い答えは見つかりませんが、かなり頻繁に読んでいます。さらに、Ninject は Unity や類似のフレームワークとは異なり、このアプローチを使用しないと述べられています。

ありがとう :)

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

javascript - jQuery を使用した構造化アプリケーション

あまりリッチではないので、アプリケーションを構築します。それ以外の場合は、その目的で angularjs を使用できます。私は自分の JS コードを適切なモジュラー プログラミング アプローチに編成したいと考えていました。

例えば

質問を実際のコードで更新したので見てください

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

javascript - ポータル コンテナの設計

私は、HTML5 と Javascript でポータル コンテナーを構築する必要があるシナリオにいます。このコンテナーには「n」個のウィジェット URL が提供され、コンテナーは (iFrame ではなく) DIV で Ajax を介してそれらをロードする責任があります。

ここで問題は、各ウィジェットの JavaScript 関数の定義を分離する方法です。たとえば、コンテナ ページに Widget1_DIV と Widget2_DIV の 2 つの DIV があるとします。Widget1_DIV には Widget1 の HTML、JS、CSS が配置され、Widget2 も同様に配置されます。

ここで、両方のウィジェットに同じ 'foo' という名前の JS 関数があり、それらが同じ DOM に組み込まれると競合するとします。RequireJS が競合を回避するのに役立つか、または両方のウィジェットの DIV をモジュール化するための適切な解決策を知りたいですか?

ありがとう

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

c# - 「key:value;key:value;key:value;key:value;」でシリアル化を処理するためのフレームワーク フォーマット

もちろん、この形式からデシリアライズするコードを書くのは簡単です。私はすでにそれをしましたが、私は好きではありません。

単一責任の原則では、この種のシリアライゼーションのみを考慮するジェネリック クラスが必要であると述べています。そして、タスクはフレームワークで対処できるほど一般的です。

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

java - 既存の Java アプリケーションでモジュール化を行う方法は?

私は相互に依存するクラスを持つ非常に大きな Java アプリケーションを持っています。大きなアプリケーションをモジュールに変換することが決定されています。このタスクを開始するには、アイデアを収集したいと思います。

私の質問は、ここで尋ねられたものとほぼ同じです: How to moduleize a (large) Java App?

主に5年前に回答されたため、この質問を再質問します。新しいアイデアは大歓迎です。

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

asp.net-mvc-5 - MVC Ninject: MVC Area プロジェクトから NinJect バインディングを追加する方法

私はこのブログの例を使用しています:

http://blog.longle.net/2012/03/29/building-a-composite-mvc3-application-with-pluggable-areas/

私は自分のソリューションで機能する概念を持っています。ただし、ユーザーがモジュール/領域にアクセスする権限を持っている場合にのみ、バインディングをカーネルに追加する良い方法を見つけようとしています。

ServiceLocator についていくつか読んだことがありますが、それを避けようとしていました。

物事を機能させるために私が試みていることの 1 つは、モジュールの既定のコンストラクターでのユーザー コンストラクターの挿入です。それは機能していますが、ハックです。

私が使用しているパターンでは、AreaRegistion から継承するクラスを作成する各モジュール プロジェクトです。各モジュール プロジェクトがビルドされると、関連ファイルがメイン Web プロジェクトの Areas フォルダーにコピーされます。その後、メイン プロジェクトが読み込まれると、リフレクションを使用してすべてのモジュール アセンブリが読み込まれます。次に、AreaRegistration.RegisterAllAreas() が呼び出されると、AreaRegistration を継承するクラスを持つすべてのモジュールを検出してロードします。

Ninject カーネルにアクセスし、AreaRegistration から継承するモジュール クラスにバインドを追加する良い方法を見つけたいと思います。RegisterArea() オーバーライドからバインディングを追加するコードを開始することを想像します。

ServiceLocator に頼らずにこれを行う方法についての提案を探しています。

どんなアイデアでも大歓迎です。

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

java - 実行中に更新する「モジュラー」Java プログラムを作成するにはどうすればよいですか?

私は、中央のスレッドによって監視されている間に複数の異なるタスクを実行できるプログラムを作成するというアイデアをいじっています。アイデアは、実行時/実行中に個別のモジュールを探してロードするコアプログラムを作成することです。これらのモジュールは、完成したオブジェクトを別のモジュールに渡す前に独自のタスクを実行します。別のモジュールは、完成品を Web サーバーにアップロードしたり、結果データを事前に定義されたファイル/フォルダー構造に整理したりするなどの処理を行います (画像を参照)。基本的な概念のため)。 ここに画像の説明を入力 私はこれまで Java のモジュラー設計を実際に扱ったことはありません。私の過去のプログラムはすべて完全に自己完結型であったため、どこから始めればよいかほとんどわかりません。

私の目標は、外部ライブラリをコア プログラムに格納することです (たとえば、AWS SDK for Java は、.jar 自体を最大約 18 MB まで発射できます)。 1 行のバグを修正するためだけに、18 MB 以上の自己完結型プログラム全体を再配布する必要があります。さらに、必要に応じて、プログラム全体を再起動することなく、個々のモジュールを更新できるようにしたいと考えています。これにより、1 つの更新中に他のモジュールが動作し続け、全体的なダウンタイムが短縮され、プログラムが必要な時間だけが更新されるようになります。完全にシャットダウンするのは、コアへの更新が行われたときです。

私が知りたいのは、これは可能ですか(私はそう仮定しています) 、もしそうなら; 何を調べる必要がありますか/どのように設定しますか? (私は車輪を再発明しようとしていますか? もしそうなら、どこでその車輪を見つけることができますか?)

の使用を調べて、ここServiceLoaderで例を試してみましたが、それを使用してあるモジュールを別のモジュールに向ける方法や、コアからライブラリ クラスを取得できるかどうか、または "アクティブな更新」が言及されました。これまでに見たのは、(私の例では) コアがモジュールにアクセスできるということだけですが、モジュールがコアにアクセスするかどうか/どのようにアクセスするかはわかりません。

それが投稿に関連しているかどうかはわかりませんが、私はすべての作業を Eclipse 内で行っています (利用可能な IDE 固有のツールがある場合に備えて言及する価値があると考えました)。