4

ERP システムにいくつかのサポート アプリケーション (かなり小さい) を作成しています。

したがって、これまで私はデータ アクセス レイヤーを 2 つの役割に使用していると感じていました。ビジネス レイヤーとデータ アクセス レイヤーです。

何を別のレイヤーに移動する必要があるか、また移動する必要があるかどうかを判断するのに苦労しています。いつレイヤーを分離するかを知ることは知恵であり、パターンを知ることは単なる知識であるとどこかで読んだことがあります。どちらも十分な量ではありません。

だから私は何が何であるかを判断するためにいくつかの助けが必要です.

私の現在の DAL は、データの取得と基本的なロジックの適用を扱っています。たとえば、次のようなメソッドがあります

GetProductAvailabilitybyItem

GetProductAvailabilitybyLot

それらを分離する必要がある場合、私は何をしなければなりませんか?

私の頭の中にあるもう 1 つの問題は、DAL を正規化し、毎回異なるエンティティを返すようにするために (1 つの一般的な get メソッドを介して) DataTable、戻り値の型として使用する必要があるということです。現在List<PalletRecord>、戻り値の型などを使用しています。

私のアプリは非常に小さいため、これら 2 つのレイヤーを区別するのは難しい (そしておそらく役に立たない) と感じています。

私の基本的なニーズは、複数のフロントエンド (Web ページ、WinForms、WPF など) で使用できるものを構築することです。

追加の例:

バーコードについて話しましょう。取得したロット レコードが有効かどうかを確認する必要があります。DAL でレコードを取得し、ビジネス レイヤーで bool を返すメソッドを生成しますか?

次に、テキストボックスに有効なロットが含まれているかどうかを確認するために、どのプレゼンテーションからでも bool メソッドを呼び出すことができますか?

これは非常に単純化されたロジックですか?

4

3 に答える 3

2

非常に小さなアプリケーションを扱っていることを考えると、ORMがすべてのデータ アクセスを提供し、ビジネス層だけを心配するだけではどうですか?

そうすればDataTable、 の処理、データのオブジェクトへのマッピングなどについて心配する必要がなくなります。開発がはるかに高速になり、コードベースのサイズが縮小されます。

たとえば、NHibernateまたは Microsoft のEntity Framework

ここで、外部コンシューマーにデータを提供する (サービスを実装している) 場合は、実際のモデル エンティティを送信する代わりに、ワイヤを経由するDTOのセットを個別に作成することをお勧めします。

于 2012-12-08T19:42:05.227 に答える
2

あなたの説明に基づいて、アプリケーションがまだ小さい場合は、両方のレイヤーを今すぐ確実に分離する必要があります。データにアクセスして表示するだけでは BL は役に立たないと感じるかもしれませんが、時間が経つにつれて、さまざまなテーブルからのオブジェクトの作成を調整したり、別のテーブルでさまざまなテーブルを更新したりするなど、データを変更、変換、または操作する必要があることに気付くでしょう。ユーザーからの単一のアクション。

あなたが提供した例は、非常に単純化されていますが、このアイデアをサポートするのに役立ちます.

パブロの答えもいくつかの優れた設計アイデアを提供します.ORMを使用してDALを簡素化し、非常に薄く保つ必要があります. 私は、NHibernate と Fluentがこれに関して非常にうまく機能していることを発見しました。BL を使用して、データ アクセス オブジェクトを使用してアクセスを調整できます。

于 2012-12-08T19:48:57.447 に答える
1

私は nTire アーキテクチャの大ファンではなく、それにはいくつかの正当な理由があります。

このようなアーキテクチャの主な目的は次のとおりです。

  • 異なる基礎となるデータベースの分離を操作する機能
  • コンテキスト - つまり、アプリケーション設計とビジネス ロジック 統一性と
  • ベストパターンとプラクティスの確認。

ただし、そうしている間、プロバイダー固有の最適化を放棄するなど、いくつかの犠牲も伴います。

私のアドバイスは、データ アクセスとビジネス ロジック層と GUI またはプレゼンテーション層の 2 層アーキテクチャを使用できるということです。異なるプラットフォームに共通のコードを使用できると同時に、スパゲッティ コードから解放されます。

于 2012-12-08T19:53:08.940 に答える