私はLiftフレームワークで最初のプロジェクトを開始しようとしています。どの永続ライブラリを選択するかを決定する必要があります。MapperとRecordの両方が機能するように、リレーショナルバックエンドを使用しようとしています。
Mapperの場合(私が最も見逃しているのは、RDBMSに送信されるクエリを制御する機能です)、特にSQLの結合や集計などによって解決される、より複雑なクエリに関してはそうです。次の例を見てみましょう-次の2つのエンティティを作成しましょう:
class BaseProduct extends LongKeyedMapper[BaseProduct] with IdPK {
// some fields
}
object BaseProduct extends BaseProduct with LongKeyedMetaMapper[BaseProduct]
class MyProduct extends LongKeyedMapper[MyProduct] with IdPK {
// some fields
object base extends MappedLongForeignKey(this, BaseProduct)
}
object MyProduct extends MyProduct with LongKeyedMetaMapper[MyProduct]
エンティティMyProduct
の専門分野の1つはどこにありますか。BaseProduct
これらのエンティティ間には明らかに1対1の関係があります。MyProduct
ただし、正確なものと一緒にクエリを実行するために私が思いついた最良の可能性はBaseProduct
、次のようなクエリでした。
MyProduct.findAll(PreCache(MyProduct.base))
これは2つのクエリを発行します(さらに、選択するMyProduct
エンティティのフィールドを制御できないのではないかと思います。
Mapperライブラリには十分に悪い。Record / Squeryl APIに関する私の主な懸念は、Proto
MapperAPIの周りに存在するすべてのクラスが不足しているという事実です。レコードのこれらのクラスの機能に近いものはありますか?Squerylのデータベース固有の機能(PostgreSQLの幾何学的クエリなど)にアクセスすることは可能ですか?
これらのレイヤーのいずれかに他の長所と短所はありますか?または、データベースとの通信をタイプセーフに適切にカプセル化し、クエリを適切に制御したい場合に注意が必要な他の抽象化レイヤーはありますか(PHPのPDOレイヤーを使用してクエリを直接発行することに慣れていました-Iこのような直接クエリインターフェイスは必要ありませんが、クエリを制御できる可能性は素晴らしいでしょう)Liftフレームワークとの統合は間違いなく利点です。
ありがとうございました!