0

新しいアプリケーション スイートで基本的な 3 層アーキテクチャを構築しようとしています。初めて、ベスト デザイン プラクティス (IoC/DI など) の適用を開始したいと考えています。

私の UI レイヤーは、作業を行うために BLL オブジェクトを作成する必要があります。

UI で BLL を 10 回呼び出す必要があるとします。BLL オブジェクトを 10 回作成する必要がありますか、それともフォームの読み込み時に 1 回作成する必要がありますか?

4

5 に答える 5

1

通常、呼び出しごとにビジネス オブジェクトを再作成します。これは、HTTP ベースの Web サイトを作成する場合に必要な、ステートレス アプリケーションの維持に役立ちます。

非常に重いオブジェクトが原因でこれが問題になる場合は、オブジェクトのキャッシュ/プールを作成したり、Session オブジェクトに保存したりするなどの対策があります。やむを得ない場合を除き、そこには行かないでください。

于 2012-12-12T13:24:04.747 に答える
1

私の UI レイヤーは、作業を行うために BLL オブジェクトを作成する必要があります。

推奨される方法は、ビジネス レイヤー オブジェクトのインターフェイスが、作成時または後でプロパティを介して GUI フォームに挿入される場合です。この場合、フォームはビジネス層オブジェクトについて何も知らず、それらのインスタンス化を気にせず、本来あるべきこと (GUI 対話) のみを行います。

個人的には、コンストラクター注入を好みます。

public class MyForm
{
    private IDocumentStorage documentStorage;
    private IJobsRegistrator jobsRegistrator;

    public MyForm(IDocumentStorage documentStorage, IJobsRegistrator jobsRegistrator)
    {
        this.documentStorage = documentStorage;
        this.jobsRegistrator = jobsRegistrator;
    }
}

ビジネス層インターフェイスの場所IDocumentStorageと場所。IJobsRegistrator制限がある場合は、代わりにプロパティ セッターを使用できます (たとえば、パラメーターなしのコンストラクターのみを使用できます)。

于 2012-12-12T13:19:50.610 に答える
0

厳密にはシンプルな3層

層 1 - データベース ここにはロジックはなく、RDBMS メカニズムによるデータの取得と保存のみ

層 2 - ビジネス ロジック/データ アクセス データ アクセス オブジェクト (層 1 との間でデータの受け渡し/取得、ビジネス オブジェクトはここで作成する必要があります) およびビジネス データ (ドメイン) オブジェクトはここから作成/入力/保存する必要があります

層 2 ユーザー インターフェイス ユーザーの作成/操作のために、データ (層 2 から取得したビジネス オブジェクト内) をユーザーに提示するだけです。

于 2012-12-12T13:27:35.313 に答える
0

うーん...これに対する率直な答えを期待すると、がっかりします。答えは、場合によります。

オブジェクトがステートレスな軽量オブジェクトの場合 - 作業が楽になるのであれば、毎回作成してください。

一方、オブジェクトが状態を維持する必要がある場合、または作成に多くのリソースが必要な場合は、シングルトンの作成/管理に必要なすべてのオーバーヘッドを備えたシングルトンとして作成する必要があります。

どちらのシナリオも DI コンテナーでサポートされていますが、シナリオに適したものを選択するのはユーザー次第です。

于 2012-12-12T13:23:06.913 に答える
0

オブジェクトがサービス タイプのクラスである場合、つまり、一部の入力を受け取り、一部の出力 (リポジトリ タイプ オブジェクトなど) を提供する場合、UI レイヤーがその抽象バージョンに依存するようにする必要があります。次に例を示します。

public class UILayerComponent
{
    private readonly IBLLObject _bllobject;

    public UILayerComponent(IBLLObject obj)
    {
        _bllobject = obj;
    }

}

ただし、UI レイヤーは、このオブジェクトのインスタンス化、有効期間の管理、さらには具体的な実装について何も認識しない必要があります。これは、IoC コンテナーが処理するジョブである必要があります。

ただし、オブジェクトが状態駆動型の場合 (たとえば、あるユーザー アクションによって作成され、別のユーザー アクションによって更新または削除されるなど)、必要に応じてオブジェクトを作成および破棄する必要があります。

于 2012-12-12T13:27:07.353 に答える