0

関連するオブジェクトを埋め込んで、および/またはを使用できるのに、なぜhas_oneアソシエーション(および追加のテーブル、モデル)を使用する必要があるのですか。常に関連付けられたオブジェクトを結合し、複雑なクエリを必要としない場合。例えば:composed_ofserialize

Dog(color、weight)has_one :headHead(teeth_count、eye_color)

Dog(color、weight、head_teeth_count、head_eye_color)に置き換えて、「計算された属性」または次のような値オブジェクトを使用できます。

composed_of :head, mapping: [%w(head_teeth_count teeth_count), %w(head_eye_color eye_color)]

テーブルが少なく、シンプルで、コードが明確で、モデルが重くなく、偶発的な余分なクエリがなく、パフォーマンスが向上します。

もう一つの例:

ユーザー(メール)has_many :roles役割(名前)

User(email、roles)に変換します

serialize :roles, Array

私はこれらの場合に何かを逃しましたか?

4

1 に答える 1

4

セマンティクスは、実際には優れたソフトウェアを作成する上で非常に重要な部分です。

本は著者で構成されていません。本は著者がいます。

また、例がより単純であるか、コードがより明確であることについて、あなたはひどく間違っていると主張します。パフォーマンスの向上は議論の余地があり、無視できる可能性があります。

あなたの最後のケースは特に悪いです。特定の役割を持つすべてのユーザーを検索したい場合はどうすればよいでしょうか? すべてのユーザーをインスタンス化し、デシリアライズして一度に 1 つずつチェックしますか?

于 2013-01-24T23:52:15.107 に答える