プログラミング言語からデータベースを操作するお気に入りの方法は何ですか?[閉まっている]
-
08-06-2019 - |
解決
ORM については毎回、データベースについて考える必要が最小限であればあるほど良いのです。
他のヒント
私は 3 + 1 層のやり方がとても気に入っています。UI 用に 1 つの層、ビジネス ロジック用、およびデータの永続化用に 1 つの層。最後に言うのは?ドメイン オブジェクトとインターフェイス。これにより、メイン層の 1 つまたは 2 つとドメイン「層」をロードすることが可能になり、コードは機能するはずです。
大きく依存しているのは、 依存性注入 そして 制御の反転 原則。データ/永続層は 2 つのことだけを行います。データを作成、読み取り、更新、削除し、それをドメイン オブジェクト形式にマッピングします。
UI 層はまったく逆のことを行います。ユーザーが関連付けることができる方法でデータを表示および受信し、出力/入力をドメイン オブジェクト形式にマッピングします。
ビジネス ロジック層が知っておく必要があることは 1 つだけです。ビジネスの論理。データの出所やデータ層の配置場所は気にしません。オーバードローされたばかりの口座にフラグを立てる必要があることはわかっていますが、それを物理的に行う方法は実際の仕事の一部ではありません。
ドメイン オブジェクト自体にはロジックはなく、層間でデータを受け渡すための単なるコンテナーです。これは、依存関係についてまったく考える必要なく、ドメイン オブジェクトとインターフェイスをロードできることを意味します。
結局のところ、明確に分離された層を備えた非常に明確なコードベースができたと感じています。そして、いくつかの厳密なインターフェイスと優れた基本クラスを使用すると、コーディングのほとんどは、X が発生したときに何を行うかをソフトウェアに指示するだけです。まさにそれが本来あるべき姿です。
</rant>
編集:そうそう。これは、LINQ と サブソニック, 、およびその他の ORM。
これからは LINQ が私にとって進むべき道です
私はビジネス オブジェクト モデル レイヤー (オブジェクトとオブジェクトのコレクション) を構築することを好みます。
データベースと対話する機能を各オブジェクト/コレクションに構築します (SQL Server の場合は、 System.Data.SqlClient)。私はこのパターンを SQL Server、MySQL、Oracle に使用しました。
次に、アプリケーション コードからオブジェクトを操作します。
データベースをオブジェクトに抽象化することで、バックエンド データベースに関係なく、アプリケーション コードに一貫性が保たれます。
ORM は本当に素晴らしいです。
私は Python 内で作業するときに SQL Alchemy を使用します。SQL Alchemy は、これまでに実行したほぼすべての DBMS で動作します。
MacOS X 上の軽量のデータ駆動型アプリケーションには、Xcode 経由でアクセスできる優れたデータ モデリング ツールを備えた Core Data を使用しています。
これらはどちらも、正しく行われた ORM が優れていることを示しています。私は EJB で成功したことも、楽しんでいることもあまりありませんでした。
私はまだ LINQ の世界に足を踏み入れていませんが、Visual Studio が XSD データセットを使用して実行する DataTable/TableAdapter クラスが大好きになりました。データベース スキーマを作成した後、数回ドラッグ アンド クリックするだけで、厳密に型指定された DataSet/DataTable オブジェクトが作成され、すべての CRUD ステートメントのストアド プロシージャに対してパラメータ化されたクエリを使用するアダプター メソッドが作成されました。テーブルに直接関連付けられていない一部のプロシージャ用のクエリ テーブル アダプタも作成します。
ストアド プロシージャをまだ作成しておらず、テーブルだけがある場合は、ウィザードがプロシージャまたはアドホック SQL ステートメントを作成します。
これは Visual Studio 2005 から提供されており、新しい Web アプリの「構築」時間を大幅に短縮し、ビジネス ロジックとプレゼンテーション ロジックにより集中できるようになりました。
アプリケーション内の特定の状況に何が適しているかに応じて、混合アプローチを使用します。
- ページに相当する情報を読み取って表示したり、ユーザーが更新したりするときは、Hibernate を使用します。
- 更新のバッチを処理するとき、またはほとんどのデータがすでにデータベースにある場所を要約するとき (例:一日の終わりの処理)PL/SQLを使用します(セットで考えるようにします)
- ユーザーが検索を実行したり、概要レポートを実行したりすると、ibatis sqlmaps を使用して SQL を構築し、関心のあるフィールドのみを戻します (すべての列ではなく、もちろん不要な子行も戻しません)。
- 本当に迅速に実行する必要があるものはすべて、最適なアプローチを使用します。
これは Java/Oracle の場合です。
アクティブレコード, 、これは、Fowler の論文で最初に文書化された (おそらく) パターンです。 エンタープライズ アーキテクチャのパターン. 。Railsの中核技術として有名ですが、Ruby以外の言語でも実装されていると思います。何はともあれ、これはデータベースをきちんと抽象化したものですが、正直言って、find_by_sql 領域が少し不格好だと感じます。しかし、それは私だけかもしれません。
しかし、(今は不機嫌そうな老人の帽子をかぶって) 世界中のすべての ORM は SQL の十分な知識の代わりにはなりません。SQL の知識がなければ、RDBMS へのアクセスがまったく許可されるのを私は見たくありません。
Delphi と Oracle Data Access Components (ODAC)、および Oracle.OleDBProvider 経由の ADO を使用します。
最も人気のある方法は、Smalltalk と GemStone オブジェクト リポジトリを使用することです。なぜ?ORM の問題に対処する必要はありません。雇用主から強制されたり脅されたりした場合にのみ、別のことを検討します。
私のお気に入りの方法は、オブジェクト抽象化レイヤーを使用することです。理想的には、これは のみ SQLを扱う場所。しかし実際には、オブジェクトが SQL っぽいことも行う必要がある場合があります。しかし、オブジェクトの外側には何もありません。
これまでのところ、私はそのようなレイヤーを自分で作成してきました。利用可能なレイヤーがあまりにも使いにくく、遅すぎ、または大きすぎるためです。
私はデータ駆動型アプリケーションを開発していて、データベース モデルが非常に複雑であるため、プレーン JDBC を使用しています。他のテーブルの構造も含め、すべてがデータベースに記述されます。これに加えて、私はストアド プロシージャをよく使用します。したがって、ORM は私にとって選択肢ではありません。
好き 休止状態 たくさん :)
学習曲線があることは承知していますが、一度マスターすれば、非常に素晴らしいものになります。
言うまでもなく、新しいものを手に入れるのが待ちきれません エンティティフレームワーク .NET 3.5 SP1 (すでに利用可能であることは知っていますが、XML を入力するのが少し面倒です:))
私が大好きな C# では LINQ to SQL 新しいものは何でも構いませんが、私は本当に使うのが好きです .netTier + CodeSmith ジェネレーター .NET 2.0 で C# を使用している場合、データベースへの迅速かつダーティなデータ レイヤーを取得します。