3

私は、n 層アーキテクチャ (DAL、BLL、UI) の基礎を学ぼうとしている、かなりの新人プログラマーです。私がプログラミングしているアプリケーションは、VB.NET (.Net 3.5) で記述された単一層の 3 層アプリケーションです。レイヤーは次のとおりです。

ダル

BLL

UI

COMMON - 現在、DTO が含まれています。

BLL と UI の間で何を渡すかを判断するのに苦労しています。私の本能は、BLL からの完全なビジネス オブジェクトではなく、データのみを UI に渡す必要があることを教えてくれます。次の 2 つのシナリオを検討してください。

1) BO を BLL から UI に直接渡します。これにより、BO メソッドが公開され、UI が BO に直接アクセスできるようになりますが、これは良くないようです。

2) 関連するデータのみを BO から UI に渡します。たとえば、顧客には名前と住所があります。このデータは実際に UI で表示/編集したいものであるため、完全な BO ではなく、そのデータのみを UI に返します。次に、UI は BLL を呼び出して、特定の BO を更新します。

#2を使用する傾向がありますが、それを実装する最良の方法がわかりません. 私が現在プログラムしている方法では、BLL からのみデータを返すと、BO へのすべての参照が失われ、GC がそれらを要求します。これに基づいて、私はいくつかの質問があります:

1) BLL の呼び出し間でビジネス オブジェクトを維持する必要がありますか? 別の方法は、BLL を介してデータを渡すたびにそれらを再作成することですが、これは間違っているようです。

2) 単層アーキテクチャで BO を存続させる最善の方法は何ですか (UI に渡さない場合に参照を保持する方法は?)

3) n 層アプリケーションはどのようにこれを行いますか? BLL で BO を有効に保ち、UI からの更新を待ちますか? BO が不要になったときに確実にリリースされるようにするには、BLL で多くの "簿記" が必要ではないでしょうか?

洞察に感謝します。愚かなことを尋ねている場合はご容赦ください。私は知っている小さなプログラミングを独学したので、愚かな質問をしていて、それを知らないかもしれません.

4

2 に答える 2

0

3 層アーキテクチャの例として、ペット ショップを参照してください。BLL と DAL の両方をサービス オブジェクトとして実装しますが、それ自体では状態を保持しません。それらはステートレスであるため、シングルトンパターンを使用して、簡単に参照できるようにファクトリに保持させることができます。

使用できる CRUD メソッドの例を次に示します。

FooInfo DALFactory.FooService.Retrieve(int id);
FooInfo BLLFactory.FooService.Retrieve(int id);

IList<FooInfo> DALFactory.FooService.RetrieveAll;
IList<FooInfo> BLLFactory.FooService.RetrieveAll;

FooInfo DALFactory.FooService.Create(FooInfo entity);
FooInfo BLLFactory.FooService.Create(FooInfo entity);

FooInfo DALFactory.FooService.Edit(FooInfo entity);
FooInfo BLLFactory.FooService.Edit(FooInfo entity);

void DALFactory.FooService.Delete(FooInfo entity);
void BLLFactory.FooService.Delete(FooInfo entity);

どちらの場合もわかるように、まったくロジックを持たない同じエンティティ オブジェクト (別名データ転送オブジェクト) を渡します。このアーキテクチャにより、UI レイヤーを BLL からリッチ クライアントと Web サービスの組み合わせに切り離すことができます。

Retrieveandメソッドの意図はRetrieveAll、データベースからデータを取得し、それをエンティティ オブジェクトに詰め込むことです。Createメソッドは、指定されたエンティティに基づいてデータベースに新しい行を追加します。このアーキテクチャでは、ビジネス ロジック層BLLFactory.FooServiceとエンティティFooInfoオブジェクト以外に「ビジネス オブジェクト」はありません。

これらのオブジェクトの有効期間に関して、ステートレスBLLFactory.FooServiceは一度作成され、アプリが存続している限り再利用されます。FooInfoオブジェクトごとに 1 回作成してから、ASP.NET セッションなどに永続化できます。

于 2009-12-04T15:30:11.317 に答える