2009-05-22 10 views
2

私は、私のソフトウェアにデータアクセスレイヤーを書き直すことに重いものを置いています。これは本当に私の最初のプロジェクトで、使い方は不適切でした。私のデータアクセスレイヤーを改善する

私のプロジェクトでは、プルされているすべてのデータがarraylistに格納されています。データのいくつかは、arraylistから型付きオブジェクトに変換され、arraylistに戻されます。

また、アプリケーションにはセントラルクエリセットがありません。これは、いくつかのクエリがコピーと貼り付けであることを意味します。このアプリケーションには、アプリケーションにとって非常に標準的ないくつかのカスタムオブジェクトと、それらのオブジェクトに対して非常に標準的なクエリがいくつかあります。

オブジェクトと、データベースに読み書きするクラスとの間にレイヤーを作成する必要があるかどうかは本当に分かりません。このレイヤーは、データベースから取得したデータを適切なオブジェクトとして入力し、複数のオブジェクトが返された場合、それらのオブジェクトのリストを返します。これは良いアプローチですか?

また、これが良い方法であれば、データベースからデータをどのように返すべきですか?私は現在、SqlDataReader.readを使用していて、配列リストを埋めています。私はこれがここで使うのに最高の方法ではないことを確信しています。私はこれを改善する方法について本当に明確ではありません。

このすべての理由は、私はいくつかのクラスにデータベース操作のすべてを集中ではなく、彼らはそれが本当に依存プロジェクト内のすべてのクラスの中で

答えて

4

ことの一つは、右のバット頭に浮かぶ。あなたがのArrayListの代わりに、ジェネリック医薬品を使用する理由はありますか?場合.NET 1.1を使用していますが理解できますが、パフォーマンスを得ることができる領域の1つは、ArrayListsをピクチャから削除し、タイプ間の変換とキャストを停止することです。

データアクセス層を設計する際の多くはORMですとLINQ to SQLこれは非常にうまくいきます。一般に、N層アプローチはうまくいきますあなたが達成しようとしているように見えます。たとえば、再利用できる特定のメソッドを持つクラスライブラリでデータアクセスを実行することは、場所全体で同じクエリを「コピー&ペースト」するよりはるかに優れています。

こちらがお役に立てば幸いです。

+0

私は実際にはhello world型のアプリケーションよりも大きなものを書く経験はほとんどありませんでした。私は、ジェネリック医薬品がずっと遠くまでずっと知っていることさえ知りませんでした。そして、私は、確かに、私が最終的に書いてくれる利益や数字の数を実現しませんでした。 –

+0

よかったです。けっこうだ。私はあなたが今知っているのでうれしいです:)。それらの卑劣なArrayListsを取り除く! –

2

を広げていたいれます何をしているの。ユーザーインターフェイスなどを備えたアプリケーションが増えている場合は、そうである方が良い方法があります。

私は現在、ASP.NET MVCで開発中ですが、LinqはSQLをとても快適に使用しています。 Linq to SQLはコード生成を使用して、データをモデル化するコードクラスのコレクションを作成します。

ScottGuは、自身のブログ上でLINQ to SQLは本当に素晴らしい紹介があります。

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

+0

このリンクをお寄せいただきありがとうございます。私は投稿を読み、それはかなり簡単です達成するためには、あまりにも扱いやすくなりました –

0

「私は私が私のオブジェクトと読み込みと書き込み、クラス間の層を作成する必要がある場合は本当にただわかりませんこのレイヤーはデータベースからのデータを取り込み、適切なオブジェクトとしてタイプし、複数のオブジェクトが返された場合は、それらのオブジェクトのリストを返します。これは良いアプローチですか?

私はJava開発者ですが、言語に依存しない回答は「はい」と考えています。

は、私はLINQのような技術が、このために生まれてきたと信じている。Martin Fowler氏の"Patterns Of Enterprise Application Architecture」を見てみましょう。

5

ORMを使用する必要があります。 "そうしないと、あなたの顧客から盗んだのです" - Ayende

+1

ハ!私はあなたがこれに答えたときに彼のポストを見ていました。同様 http://ayende.com/Blog/archive/2008/11/21/stealing-from-your-client.aspx –

+1

素敵ヴォネガット参照。 –

1

過去のいくつかのプロジェクトでは、すべてのADO.NET作業を行い、他のすべてのデータアクセスクラスが継承する基本クラスを使用しています。したがって、私のUserDBクラスはDataAccessBaseクラスを継承します。私はUserDBクラスが実際にデータベースから返されたデータを受け取り、呼び出し元のBusiness Objectに返されるUserオブジェクトを生成した瞬間にそれを持っています。複数のオブジェクトが返された場合、これらは汎用リスト、つまりList<Users>が返されます。

デーモン・アームストロング(これはachivedする方法で実証デーモンアームストロングをGoogleで検索。

を「」http://www.simple-talk.com/dotnet/.net-framework/.net-application-architecture-the-data-access-layer/「」私は今始めているしかし

はこのすべてを移動することにより、良い記事がありますLINQ to SQLを使用するつもりだったが、すぐに水中で死んでしまうように見えるので、すぐに私の投資するのがベストだろうと思った。次のORMの時間