タグ付けされた質問 「orm」

オブジェクトリレーショナルマッピング(ORM)は、オブジェクト指向システムとリレーショナルデータベースの間のマッピング手法です。

1
ORM POCOはドメインエンティティを置き換えますか?
これは、この質問にいくぶん似ていますが、より広義です。 一般的には、EF 4.1のようなオームズはPOCOSをサポートし、それは今あなたのドメインエンティティを持ってしても意味がないことがデータベースに永続化されたオブジェクト? EF 4やLinq-to-SQLなどの古いORMでは、「データベースオブジェクト」が自動生成され、データベースに密結合されていたため、重要なアプリケーションの場合、より堅牢でインテリジェントなドメインエンティティにマッピングされていました。就職。 新しいORMを使用して堅牢なドメインエンティティを構築し、そのドメインエンティティとDBMSの間のマッピングを提供するだけのデータレイヤーを作成するという考えはありますか? 書面では、これが常に目標であると感じていますが、少なくとも.NETの世界では、利用可能なツールを使用して(簡単に)簡単に実現することはできません。

2
ノンブロッキングORMの問題
私はSO について質問しましたが、私のお気に入りのWebフレームワークにはノンブロッキングORMがないことがわかりました。非ブロッキングとは、非同期検索のためのコールバックをサポートするORMを意味します。ORMには、データが受信されたときに実行されるコールバックなどが提供されます。 作成したいのですが、開発の開始を妨げるいくつかの質問があります。 ORMの開発時に発生する可能性のある問題は何ですか? ノンブロッキング検索をサポートすると、ORMの複雑さが劇的に増加しますか? なぜ非ブロッキングORMが非常に少ないのですか? 更新:質問を改善する必要があるようです。私たちはすでに非ブロッキングの方法でデータを受け取ることができるソリューションを持っています、そして私はそのようなソリューションを使用するほとんどの会社が生のSQLを使用すると信じています。今後のプロジェクトで再利用できる、より一般的なソリューションを作成したいと考えています。私たちはどんな困難に遭遇するでしょうか? 更新2:優先言語はpythonですが、私は原則に興味があります。この質問は実際に私のためです。私はすでにノンブロッキングORMを持っているプラ​​ットフォームを見ていきます。
9 web  orm  server-side 

3
ORMはツリーのようなDB構造にとって悪いツールですか?
この質問は意見に基づくものとして締めくくられるかもしれませんが、今必要なのは議論によって裏付けられたいくつかの意見です。 PostgresとEcto(Elixir)を永続化レイヤーとして使用してアプリケーションを構築しています。それ自体を参照するエンティティがあるため、それを使用してツリーのような構造を構築できます。Ectoでこれをやろうとすればするほど、いらいらします。 ORMは、多くの関連付けを持つ複雑なDB構造を作成するための単なる悪いツールですか?ORMがリレーショナルデータに適用しようとするオブジェクト指向の方法は、ここでは悪いアプローチのようです。オブジェクトは分離されています。それらが他のオブジェクトと相互作用する場合、それらは(想定されている)メッセージを送信します。彼らの内面の詳細は隠されたままである必要があります。リレーショナルデータは、開いた透明なグラフを形成します。これら二つの世界は私と完全に両立しないようです。 しかし、ORMは非常に一般的で人気があります。Webアプリケーションの大部分はORMでうまく機能する分離されたエンティティで動作しますか、それはなぜですか?ORMフレームワークを使用して平均的に複雑なERDモデルを実装する場合は、簡潔なコードまたはパフォーマンスを犠牲にする必要があるように思われます。

2
ORMで複雑な計算フィールドを処理する方法
私たちのAPIには、計算された値を持つデータベースから取得した後に(いわば)「装飾」する必要があるいくつかの中心的なデータ型があります。データベースは、CakePHP 3データベースレイヤーから大きく影響を受けたテーブル/エンティティダイナミックに従うORMを介してアクセスされます。テーブルオブジェクトは、データベースと、モデルオブジェクトインスタンスとして行を取り込んで渡すアプリケーションとの間の仲介として使用されます。したがって、データベースからデータを取得してそれらの行を返すだけでなく、返されたデータを実際に使用する前に前処理する必要があります。ここに私が何を意味するかをよりよく説明するために出てきたいくつかのユースケースがあります: オブジェクトには数値があり、ユーザーフレンドリーなラベルに変換されます(通常、これは純粋にクライアントに保持するロジックですが、ビジネスセキュリティ上の理由から、このデータの一部はサーバーにのみ保持する必要があります。エッジケース) オブジェクトには、最後に追加された評価から取得された関連する評価値が必要です このような計算値と保存された値の組み合わせに基づいて、複雑なスケジュールオブジェクトが構築されます 単独では、これらのいずれもmap()、返された結果セットに対する単純な操作で実際にかなり簡単に実行できます。同じことが複数の計算値が必要な場合にも当てはまります。必要に応じて、より多くのマップ操作を実行して、それらのフィールドを計算および追加できます。 とはいえ、このアプローチには2つの大きな欠点があります。 これは、これらの計算された値を操作するすべての場所で後処理の追加の手順を実行する必要があることを意味します。これは特にDRYではありません。 これらの変換の一部は、最初に実行される他の変換に依存しています。それ以外の場合は、操作できるデータがありません。 両方を処理するために、このコードをORMに移動し、ORMを変更して、インターフェイスが(外部で)データベース列を処理するのと同じ方法で計算された仮想フィールドにアクセスできるようにするのが最善のアプローチであると考えていました。内部的には、これらの仮想フィールドを変換関数にマップし、潜在的に必要な依存関係変換を内部的に決定して、2番目の問題を解決することができます。 (余談ですが、これにより、単純なハッシュではなく、返された行が実際のオブジェクトである必要がなくなるかどうか疑問に思っています。現在、各行は、フィールドデータセットが設定された新しいオブジェクトをインスタンス化しますが、すべての計算またはデータの変更はモデルの外に移動され、オブジェクトはプロパティのバッグになります-本質的に、それ自体の内部ロジックを持たないハッシュマップです。これは実際には悪いことではないかもしれません)

1
Datamapperでクラスのないテーブルは可能ですか?
次の属性を持つItemクラスがあります。 itemId,name,weight,volume,price,required_skills,required_items。 最後の2つの属性は複数値になるため、それらを削除して次のような新しいスキームを作成します。 itemID,required_skill(itemIDは外部キー、itemID and required_skillは主キーです。) 今、私はこの新しいテーブルを作成/使用する方法に困惑しています。私が思いついたオプションは次のとおりです。 1)ItemsとRequired_skillsの関係は1対多であるため、requiredSkillクラスを作成することができます。これは、one_to Itemにn個のRequiredSkillが含まれています。その後、私は行うことができますItem.get(1).requiredskills。これは私にとって最も論理的に聞こえ、次のようなメソッドとクエリを提供します。 sugar.components.create :raw_material => water.name sugar.components.create :raw_material => sugarcane.name sugar.components sugar.components.count 2)required_skillsは(ルールに似ているため)定数と考えることができるため、ハッシュデータベース、gdbmデータベース、または別のsqlテーブルに入れて、そこからクエリを実行することもできます。 私の質問は:データマッパーのモデルレステーブルのようなものはありますか?データマッパーはテーブルの作成と整合性に責任があり、データマッパーの方法でそれをクエリすることができますが、SQLで行うようにクラスを必要としません? 最初の方法を使用して問題を解決しました。正規化プロセスごとに新しいクラスを作成しました(上記の1対多の関連付けのように見えます)。しかし、私はオブジェクト指向プログラミングに不慣れであり、そのような正規化ごとに新しいクラスを作成することが、データマッパーでそれを行う通常の方法であるのか、それともハックであるのかわかりません。これと、これを行うためのより良い方法があるかどうかは、私が知りたいことです。 あずきっく 再読datamapper.org団体に数回、今私はDataMapperのは確かに参加するために別々のクラスを必要としていることがわかります。だからあなたは私の質問に答えました。しかし、ロバート・ハーベイが賞金を置いたので、私はダイナミックな方法についての応答をもう少し待つ責任を感じています。 あなたのコードは不満を述べましたCannot find the child_model Container for Item in containers。私はそれを以下のような自己参照関連付けの2番目の例でうまく動作させることができました(他のものへの参照としてここに置く): class Item class Link include DataMapper::Resource storage_names[:default] = "requirement_links" belongs_to :require, "Item", :key => true belongs_to :required, …

2
IRepositoryからIQueryableを返す
リポジトリパターンを使用して、一般的な使用のために、データセット(テーブル)のIQueryableを返すことは適切ですか? これは多くの場合に非常に便利です。特に、そのインターフェイスを利用する外部ライブラリ、たとえば、UI要素をソート/フィルタリングしてバインドするプラグインを使用する場合に便利です。 ただし、IQueryableを公開すると、デザインにエラーが発生しやすくなる場合があります。これと遅延読み込みの誤った使用を組み合わせると、パフォーマンスが大幅に低下する可能性があります。 一方、使用方法ごとにアクセスメソッドを用意することは冗長であり、多くの作業(ユニットテストなど)も必要です。

4
テストデータベースに入力して使用するためのベストプラクティスは何ですか?
そこで、HibernateとMySQLを使用して、データベース駆動型のRESTful Java Webサービスをいくつか開発しています。テスト目的で、私はH2インメモリーデータベースを使用しています。H2は素晴らしく高速なので、これは非常にうまくいきました。唯一の問題は、テストの前にDBテーブルにデータを入力するのが面倒なことです。基本的には、一連のオブジェクトを手動で作成して永続化します。多分私は間違った道を行くのではないかと思っています。 教えてください、私がやろうとしていることをするためのベストプラクティスは何ですか?私を助けることができるツールはありますか?一般的な戦略やヒントはありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.