問題タブ [datamapper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
3245 参照

design-patterns - データマッパーと関係:実装戦略?

データマッパーはほぼ完成しましたが、今は人間関係の段階にあります。

ここで私の考えを説明しようと思います。このトピックに関する良い記事や情報を見つけることができなかったので、おそらく私は車輪の再発明をしているのかもしれません(確かに、私は大きなフレームワークを使用できますが、それを実行して学びたいと思います)。

1:1の関係

まず、1:1の関係を見てみましょう。一般に、「Company」というドメインクラスと「Address」というドメインクラスがある場合、Companyクラスにはaddress_idのようなものがあります。ほとんどの場合、会社のリストを表示するだけで、住所は誰かが詳細を確認するときにのみ必要であるとしましょう。その場合、私のデータマッパー(CompanyDataMapper)は単に遅延ロードします。つまり、データベースからそのaddress_idをフェッチするだけで、アドレスデータを取得するための結合は行いません。

一般的に、私はすべての関係に対してゲッターメソッドを持っています。したがって、この場合、getAddress(Company companyObject)メソッドがあります。会社のオブジェクトを取得し、そのアドレスプロパティを検索し、NULLの場合は、そのAddressオブジェクトのMapperクラス(AddressDataMapper)を使用して、データベースから対応するAddressオブジェクトをフェッチし、そのアドレスオブジェクトを指定されたアドレスプロパティに割り当てます。会社オブジェクト。

重要:データマッパーは別のデータマッパーを使用できますか?

ほとんどの場合、会社オブジェクトと住所オブジェクトの両方が必要であるとしましょう。これは、常にリストにまとめて表示するためです。この場合、CompanyDataMapperは会社オブジェクトをフェッチするだけでなく、JOINを使用してSQLクエリを実行し、アドレスオブジェクトのすべてのフィールドも取得します。最後に、レコードセットを繰り返し処理し、新しいオブジェクトに対応する値をフィードして、アドレスオブジェクトを会社オブジェクトに割り当てます。

これまでのところ、単純に聞こえます。

1:n関係

これらはどうですか?1:1との唯一の違いは、会社が複数のAddressオブジェクトを持っている可能性があることです。見てみましょう:ほとんどの場合、会社にのみ関心がある場合、データマッパーは会社オブジェクトのaddressesプロパティをNULLに設定するだけです。アドレスプロパティは、なし、1つ、または複数のアドレスを参照できる配列です。ただし、読み込みが遅いため、まだわかりません。NULLです。しかし、ほとんどの場合、すべてのアドレスが必要になるとしたらどうでしょうか。すべての会社とそのすべての住所を含む大きなリストを表示するとしたらどうでしょうか。この場合、物事は本当に醜くなり始めます。まず、すべてのアドレスオブジェクトに対してアドレステーブルを50回結合することはできません(それは不可能であると強く信じています。そうすると、パフォーマンスはゼロ未満になります)。ですから、これをさらに先に考えると、

重要:これは本当ですか?10個のアドレスごとに10個の会社がある場合、100個のアドレスオブジェクトを取得するには100個のクエリを送信する必要がありますか?

m:n関係

アドレスオブジェクトに国、州、市、道路、家番号のみが含まれているとします。しかし、1つの家は、多くの企業が入っている大きなビジネスタワーになる可能性があります。誰もがそのウェブサイトでその塔を誇示するために小さなROMを借りることができるそれらの近代的なオフィスビルの1つのように。つまり、多くの企業が同じアドレスを共有できます。

そのような問題に対処する予定はまだありません。

重要:おそらくそれは1:nの関係よりも大きな問題ではありませんか?

これを解決/実装するための詳細を説明する優れたリソースを誰かが知っているなら、私はリンクについて喜んでいます!

0 投票する
1 に答える
376 参照

database - Data Mapper で 1 対多の関係を読み込む方法は?

1:1 の関係ではゴースト パターンを使用しますが、1:n の関係でこれで十分かどうかはわかりません。

たとえば、100 個の Item オブジェクトを持つ可能性のある Order オブジェクトを読み込む場合、最初に items プロパティに NULL を割り当てます。

質問は:

A) NULL を割り当ててから、items プロパティへの最初のアクセス時に、そのアイテムのすべての注文を探して、それらすべてをロードする必要がありますか?

B) または、すべての order_id のみを含む軽量のレコード セットのみをロードし、order_id のみが設定されている 100 個のアイテム ゴースト オブジェクトをロードする必要がありますが、それ以外はすべて NULL です。アイテム オブジェクトにアクセスして詳細を取得するとすぐに、その特定の Item オブジェクト データを遅延ロードしますか?

0 投票する
1 に答える
596 参照

oop - ファインダ メソッドはデータ マッパーの一部にする必要がありますか、それともドメイン クラスの一部にする必要がありますか?

Martin Fowler の Patterns for Enterprise Application Architectures 本 (ドイツ語で 229 ページ、Lazy Load) で、彼は次のコードの例を示しています。

ご覧のとおり、finder メソッドはドメイン クラス Product の一部のようです。どこか(多くの場合、データベースですが、ビジネス ロジックは気にする必要はありません) からオブジェクトを取得することに関連するものはすべて Data Mapper (PersonDataMapper) クラスの一部である必要があると考えていたため、これには少し混乱します。おそらく私は何かを逃しただけですか?

0 投票する
1 に答える
992 参照

php - モデルとマッパーの関係

私は現在、モデル、マッパー、コントローラーを使用した小さなアプリケーションに取り組んでいます。私の質問は、(一致する答えが見つからなかったため)、次のような状況で、マッパーがモデル(およびコントローラー)とどのように相互作用するかです。

これは可能な限りうまく機能します。モデルには、マッパーが必要なユーザーを取得できる(そして、ユーザーオブジェクトにマップし直す)ためのIDがあります。

私の問題は、このコードをどのようにラップできるかということです。つまり、このコードは非常に生であり、コントローラーで使用することは絶対にお勧めできません。短くしたいのですが、正確にはわかりません。

次のようになります。

しかし、これははるかに多くのコードです。プロシージャを親コントローラークラスに含めて、明示的に呼び出さなくgetMapperても簡単にアクセスできるようにする必要がありますか?$this->_mapper

問題は、マッパーパターンを壊したくないので、モデルがSQL / Mapperメソッドに直接アクセスするべきでは$model->find()ないということですが、最初にマッパーを作成してこれを実行するためだけに多くのコードを用意する必要はありません。これなど。

私は多くのパターンやマッピング/モデリング手法に慣れていないので、私を少し理解していただければ幸いです。私自身はすでに十分に混乱しています。

0 投票する
1 に答える
864 参照

ruby - モジュールを使用して Datamapper でプロパティを定義する

そのため、いくつかのモデルをセットアップしていますが、それらは 2 つの抽象基本クラスに基づいています (または、以前はクラスでした)。Datamapper の STI の処理で多くの問題に遭遇した後、Lighthouse ページで未解決のバグのように見えたので、モデルを DRY に保つためにすべてのプロパティを定義するモジュールを作成することにしました。残念ながら、私はスコーピングの問題を抱えており、問題をさらに複雑にしているのは、2 レベルの継承を使用しなければならないことです。これが私のコードです:

私が得るエラーは次のとおりです。

私はここで途方に暮れています。これを解決する方法を知っている人はいますか?

0 投票する
1 に答える
1814 参照

ruby - DataMapper 関連付けの外部キー名

私は現在、既存のデータベースに基づいた新しいアプリに取り組んでおり、データ アクセスに DataMapper を利用しています。ただし、外部キーを扱うときの規則は、データベースが使用するものではありません。

例:

DataMapper が使用する外部キーを、現在使用しようとしている「invoice_id」ではなく「invoiceId」にする方法はありますか (上記のコメントで示されています)。追加することで通常のフィールドでこれを実行できることは知っていますが:field => 'fieldName'、関連付けのような方法は見つかりませんでした。

0 投票する
2 に答える
176 参照

sql - SQL クエリの不等式の単純化

参考までに、この質問は行き詰まっていたので、解決に協力してくれたすべての人に感謝します。

イベントの長さがさまざまな予約プログラムで、イベントの潜在的な衝突を見つけようとしています。

(a ≤ x && e ≥ y) || (a ≥ x && e ≤ y) || (a ≤ x && e ≤ y) || (a ≥ x && e ≥ y)

これを達成するために DataMapper を使用していますが、以前のクエリは間違っていました。次に、上記を理解しましたが、それをクエリに変換する方法がわかりません。以下は、参照用の私の間違ったクエリです。

0 投票する
3 に答える
317 参照

design-patterns - 誰が関係を確立する必要がありますか?エンティティまたはデータマッパー?

4つのクラスがあります:

StudentBaseCourseBaseおよび StudentDataMapperCourseDataMapper

Studentオブジェクトは、Courseオブジェクトと関係を持つことができます。1人の学生が多くのコースを持つことができます。多くの学生が1つのコースを訪れることができます。

ERダイアグラムでは、Studentエンティティには「コース」と呼ばれる属性がありますが、コースは彼の学生について何も知りません。コースには、見返りに「学生」と呼ばれる属性はありません。

これらのクラスのどれが関係の作成を実行する必要がありますか?

編集:これはシステムレイヤーです!ビジネスロジック層では、開発者はStudentBaseとCourseBaseをサブクラス化して、StudentクラスとCourseクラスを作成します。これらのクラスを作成する開発者は、自分のビジネスロジックコードを除いて、そのコードを表示しません。

0 投票する
1 に答える
251 参照

ruby - 多数の <--> 多数の DataMapper コレクションの交差を行うにはどうすればよいですか?

タグ付けされたトピックに関連するデータマッパー コレクションの交差点を返そうとしています。

先に進む前に、明らかなことを指摘しておきます。

これは UNION を返します。これは、タグとして「shim」または「sham」を含むすべてのトピックを取得することを意味します。

私がやりたいのは、タグとして「shim」と「sham」の両方を持つすべての記事を返すことです。

わかりました、データはありますが、まだ 1 つの問題があります。これを DataMapper コレクションとして持つ必要があるため、次のように結果を効果的にドリルダウンできます。

@blah は DataMapper コレクションではなく配列になっているため、これはもちろん不可能です。

上記のより簡潔なバージョン:

それでも配列になりますが..... http://www.mail-archive.com/datamapper@googlegroups.com/msg02092.htmlによると、これは可能であるはずです