問題タブ [spring4d]
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.
java - Spring Framework を使用して特定の依存関係がアプリに含まれていることを確認するにはどうすればよいですか?
これは説明するのが難しい質問になるでしょうが、ここに行きます。
Delphi Spring Framework を使用しています。(http://code.google.com/p/delphi-spring-framework/)
ClassA によって実装される InterfaceA を宣言する UnitA があるとします。
同様に、ClassB によって実装される InterfaceB を宣言する UnitB があります。
どちらも、インターフェースとクラスをそれぞれの初期化セクションで Spring Container に登録しました。
InterfaceA は InterfaceB に依存していますが、Spring を使用しているため、UnitA の節には UnitB がありませんuses
。言い換えれば、私たちは仕事を終えました.UnitAとUnitBを切り離しましたが、InterfaceAをInterfaceBに依存させることができます。
ただし、上記のシナリオでは、依存関係を解決できるように、UnitA と UnitB の両方がプロジェクトに含まれていることを確認する必要があります。
ここで、新しいプロジェクトを開始すると想像してください。その新しいプロジェクトは UnitA を使用していますが、開発者は、UnitA を使用する場合はプロジェクトに UnitB も含める必要があることに気づいていません。依存関係はコンパイル時ではなく実行時に解決されるため、コンパイラ エラーは発生しません。
そして、ここに問題があります: アプリが展開される前に、この UnitB への依存関係が確実に認識されるようにする正しい方法は何ですか?
複雑なアプリでは、徹底的なテストにもかかわらず、特定のコード パスがおそらく長時間実行されず、この不足している依存関係がデプロイ前に発見されない状況が予測できます。
各インターフェイス解決呼び出しにRequires
、起動時にチェックして例外を発生させる呼び出しが付随するシステムを実装しました。これにより、エラーが確実に表示されます。しかし、これを検出するか、この問題に対処するための「ベスト プラクティス」または標準的な方法があるかどうか疑問に思っています。
追加: これは Java や他の言語の問題ですか?
delphi - spring4dからIMultiCastEventを使用するにはどうすればよいですか?
spring4dのコレクション部分の使用を開始しようとしています。ただし、コレクション変更イベントをサブスクライブできません。エラーを取得します:[DCCエラー]:E2008互換性のないタイプ:
TObjectListのOnNotifyプロパティは、次のように宣言されています。
property OnNotify: ICollectionNotifyDelegate<T>
、 どこ
つまり、OnNotify.Addメソッドは、次のように宣言されたGenerics.Collections.TCollectionNotifyEventを予期します。
私のイベントハンドラーは次のように宣言されています:
私は混乱しています%)助けてください)
delphi - delphi - spring4d依存性注入フレームワークでインスタンス化子からコンストラクターにパラメーターを渡す方法は?
作成時点から渡されることが期待されるパラメータを持つクラスを登録することは可能ですか?
私はそれが次のようなことができることを知っています:
ただし、パラメーターは、オブジェクトがインスタンス化される場所ではなく、コンテナーが登録される実行コンテキストにバインドされます。
たとえば、このようなことは可能ですか?
非常に単純なコンストラクターを使用することを支持する人々を知っていますが、コンストラクターのパラメーターが明らかに適切に見える場合があります。
構築されたオブジェクトが機能するには object パラメーターが必要であるため、参照が満たされている必要があります。また、このパラメーターは、その制約をクラスで見るとより明確にします。
最初に割り当てを行わずにオブジェクトを使用しようとすると、メソッドまたはプロパティで参照を割り当て、他のすべてのメソッドで発生させて例外を発生させることができます..私はこのタイプのコードを書くのは好きではありません.コンストラクターパラメーターを使用して、そこで確認してください。コードが少ないほど、IMO は向上します。
また、渡されるオブジェクトは、コンテナーを使用して新しいオブジェクトを構築するオブジェクト (たとえば、Transaction オブジェクト) に対してローカルであり、何らかの状態を持っています (コンテナーで取得できる新しいオブジェクトではありません)。
delphi - SpringFrameworkで使用するためのインターフェースにパラメーター化されたメソッドを実装する方法
私はAureliusORMフレームワークとSpring4Dフレームワークを統合しようとしていますが、ほとんどの場合成功していますが、Aurelius ORM(およびその他も)は、データベースへのオブジェクトのロードと保存を「オブジェクトマネージャー」に依存しています。私が行っている作業の一部は、クラスの実装とインターフェースを可能な限り分離しようとしています。ただし、このObject Manager(AureliusのTObjectManager)のインターフェイスを作成するときに、ObjectManagerの「Find」メソッドを実装するのに問題があります。たとえば、オブジェクトマネージャは次のメソッドをサポートしています。
ObjectManager宣言をインターフェースに変換しようとしています。次の方法で変換しようとしています。
そして、これが問題のあるところです。コンパイラがエラーで失敗するからです。
基本的に、自分のObjectManagerで呼び出すことができるインターフェイス関数を考え出す必要があります。次に例を示します。
あなたの助けを誰かに感謝します、今数日間魂を考え出そうとしています。
delphi - インターフェイス セクションで宣言されていないクラスのテスト
私は依存性注入コンテナーの初心者であり、モッキングと組み合わせてそれらを使用して頭を悩ませようとしています。
コントローラーとリスト (モデル) があるとします。
IController の実装は次のようになります (次のimplementaion
セクションにあることに注意してください。
そしてもちろん、このクラス (および IBlahList のクラス) を次のように登録しますGlobalContainer
。
implementation
TController クラスを直接参照できないように、さまざまな情報源 (とにかく Nick Hodges です!) で示唆されているように、TController をセクションに配置します。
ここで、単体テストで ICollection の実装をテストしたいとします。
それで、私の質問は、TController クラスをinterface
セクションに移動してテストできるようにする必要があるか、またはまだ見つけていないコントローラーにモック IBlahList を渡す方法が他にありますか?
delphi - Delphi Spring DI:実装型なしでインターフェイスのインスタンス化を委任することは可能ですか?
私は Delphi Spring Framework を使い始めたばかりで、現在のバージョンの DI コンテナーで、実装型を指定せずにファクトリ メソッドに構築を委譲できるかどうか疑問に思っていました。
たとえば、これに似たもの:
ご覧のとおり、私の具体的なユース ケースは、COM オブジェクトのインスタンス化です。その場合、関心のあるインターフェイスを実装するクラスはアプリケーションの一部ではありませんが、CreateComObject
/を呼び出してインスタンスを作成することはできますCoCreateInstance
。ただし、コンテナ内の登録は常に実際の実装クラスにバインドされているように見えるため、運が悪いようです。
現時点でこれが不可能であると仮定すると、専門家はこれにどのように対処しますか? ラッパー クラスまたはダミー クラスを作成しますか、それとも単に COM オブジェクトを DI コンテナーから除外し、単純にインスタンス化しますCreateComObject
か?
delphi - Spring for Delphi の GlobalContainer と ServiceLocator の違いは何ですか?
彼らはとても似ているようです。GlobalContainer に何かを登録できます。
GlobalContainer
またはを介してインスタンスを取得するとServiceLocator
、どちらも機能します。
delphi - Spring for Delphiで自動配線でモックを使用するにはどうすればよいですか?
これらのインターフェイスがある場合:
それらの実装(コントローラーには、コンストラクターインジェクションによるシーケンサーが必要です):
実装をグローバルコンテナに登録します。
IController
そして最後に、自動配線機能を使用して、インターフェイスの新しいインスタンスを取得できます。
実際のアプリケーションコードは問題ありません。しかし、テストプロジェクトでは、モックを作成したいと思いISequencer
ます。テストによっては、コンテナにの実装を要求するときにISequencer
、実際の実装(TSequencer
)が必要な場合と、模擬実装(のようなTSequencerMock
)が必要な場合があります。この切り替えを行うにはどうすればよいですか?
delphi - クラスタイプを登録せずに、Spring の DI コンテナーでインターフェイスをモックするにはどうすればよいですか?
単体テストできるように、既存のコードを分離しようとしています。UI オブジェクトへの依存を削除するためのインターフェイスを導入しました。問題は、Spring コンテナーの RegisterComponent < T > 呼び出しに TComponentType パラメーターが必要であるため、RegisterComponent< IMyProgressBar > を呼び出すことができないことです。RegisterType < TMyProgressBar >.Implements < IMyProgressBar > を呼び出す必要があります。つまり、DUnit でプログレスバー クラス定義を含むユニットを使用する必要があります。これは、DIContainer を ServiceLocater と連携して使用して、必要なときにプログレスバーを要求するという目的を無効にします。
モック クラスを作成してインターフェイスを手動で実装する必要はありません。Delphi.Mocks を使用して、実装クラスを指定せずにインターフェイスを自動的にモックする方法はありますか?
delphi - TObservable の使用方法Delphi Spring フレームワークの .RemoveListener()?
Delphi Spring フレームワークでは、\Spring4D\Samples\SpringDemos\Demo.Patterns\Observer フォルダに TObservable.AddListener() を使用する方法の例があります。
ただし、TObservable.RemoveListener() の使用方法を示す例はありません。
ここでリスナーを追加します
FEditorMonitor := TEditorMonitor.Create;
FEditorMonitor.AddListener(TCurrentTimeEditUpdater.Create(Edit1));
次のコードを使用して Edit1 を Listener から削除しようとすると、Edit1 には引き続き通知されます。
FEditorMonitor.RemoveListener(TCurrentTimeEditUpdater.Create(Edit1));
何か案が?