2009-05-05 15 views
2

私は初心者ですが、データベースアプリケーションを作成するときに、私はいつも自分のフォームを作成して、そこにすべてのコードとバインディングを入れました。情報を保持する配列やリストを持つ代わりに、私はデータベースを直接変更しました。データ駆動型アプリケーションの「エンティティ」を扱うクラスを作成していますか?

私は少し進化しました。私はウィジェットを顧客に販売し、販売情報をデータベースに保存したとしましょう。データベースにアクセスするためのプログラムを作成していたとしても、それらのエンティティを扱うための 'Customer'と 'Widget'タイプのクラスを作成したくないですか?

私が誤っているのであれば、データベースアプリケーションをプログラミングするための適切なアプローチは何ですか?

答えて

4

はい。

n-tierのプログラミングを調べたいと思っています。

基本的に、フロントエンド(プレゼンテーション層)のアクセスはクラスライブラリ(ビジネス層)にのみ許可されます。クラスライブラリがデータベースにアクセスします。

これは、密接に連携していないソリューションを提供し、より保守性の高いコードを可能にします。また、層を導入することで、ビジネス層とのインターフェースを変更する必要がない限り、フロントエンドでコードを書き直すことなくDBを変更することができます。

バインディングに関する限り、Visual Studio Windows Forms(2005以降)を使用している場合は、bindingSourceを使用してコントロールをバインドすることができます。 ASP.NETを使用している場合、コントロールは問題なくオブジェクトのリストにバインドする必要があります。

ASP.Netの場合は、ObjectDataSourceをご覧ください。私は自分で使ったことはありませんが、ウェブ上にはたくさんのサンプルがあります。試してくださいhereまたはhere

+0

Visual Studioと.NETでバインディングやその他のデータ機能を使用するのはどうですか?プレゼンテーションレイヤーにフィードするために "データアクセス"レイヤーを使用する場合は、データアクセスレイヤーのほとんどのコードを最初から書き込んでいないでしょうか? – Pete

+1

使用しないでください。 .NETの前にはじめて導入されて以来、私はいつも基盤となるデータベースへのバインディングフロントエンドコントロールがEvilだと感じました。私の意見では、もちろん.... – RolandTumble

+0

申し訳ありませんが、データベースとやりとりするためにスクラッチからクラスを作成し、そのクラスにフィールドを設定するためにデータベースクラスを使用する別のクラスを作成したいと思いますか?これは、フォームにテキストボックスとラベルを投げ、コントロールをバインドするよりも好まれますか? – Pete

2

はい。

Object-Relational Mappingを詳しく見たいと思っています。

実際のビジネスエンティティは、リレーショナルテーブルにマップされるオブジェクトによってモデル化されます。

+1

慎重に言ってください。 「地図」は「反映」を意味するものではないことを説明する価値があります。 – dkretz

1

プレゼンテーション層がデータベース構造に直接依存しないようにする必要があります。その問題は、データベース構造がまったく変更され、プレゼンテーション層が変更されなければならず、長期的には問題を引き起こす傾向がある場合です。さらに、プレゼンテーション層がデータベースと直接対話することに伴うセキュリティ上の問題があります。

ここでの類推は市場です。パンを買うために店に行くときは、小麦の栽培方法を知る必要はありません。あなたが知る必要があることは、お金があり、パンを持っており、ある程度の量のパンを交換することだけです。あなたは、小麦を植える時期、または籾殻を取り除く方法、またはそのいずれかを知る必要はありません。バッキング層がそれを処理するからです。同様に、農業従事者は、パンを一人一束に売る方法や、パンを作る方法さえ知る必要はありません。彼がしなければならないことは、小麦の栽培法を知ることだけです。

中間層を使用してプレゼンテーションレイヤーとデータベースレイヤーをやりとりすることをお勧めします。これはビジネスロジックを置く場所です。たとえば、サイトにウィジェットを販売しているとします。プレゼンテーションコードでデータベースにウィジェットを照会して表示させる代わりに、ウィジェットを処理するビジネスオブジェクトがあります。このようにして、ビジネスオブジェクトはデータベース構造が何であるかを知る必要がありますが、プレゼンテーション層はビジネスオブジェクトにウィジェットのリストを表示する方法を知る必要があります。さらに重要なことは、ビジネスオブジェクトでは、特定のことが起きたときに呼び出されるルールを配置することができます。したがって、プレゼンテーション層がインベントリと注文のためにデータベースを直接変更する代わりに、ビジネスオブジェクトは変更の方法と、プレゼンテーションレイヤが売り上げの発生を要求するときに変更するテーブルを知っています。

このようにして、情報の表示とWebサイトの基礎となるロジックとの分離を行います。関与しているのは良い計画です。具体的には、特定の時点でWebサイトが何をしているのか、ビジネスオブジェクトが提供するインターフェイスの意味を理解する必要があります。次に、それらの要件に基づいてビジネスオブジェクトを実装します。それらのビジネスオブジェクトは、データベース構造と特定のビジネスロジックの知識を置く場所です(「Aが起きたとき、BとCをやる」など)。

これは最初の追加作業のようですが、実際にはそれは価値があります。

関連する問題