2011-07-09 7 views
4

これまでにタイププロバイダについて読んだ情報から判断すると、F#用の素晴らしいORMを実装するために使用できるかどうか疑問です。F#型のプロバイダは、オブジェクト・リレーショナル・マッピングを実装するための良い基礎を提供しますか?

データベース型の行は、正しく型付けされたプロパティを持つオブジェクトで表現でき、型の安全な読み込みと書き込みが可能で、型プロバイダの実装はコンパイル時に自動的に現在のデータベーススキーマをチェックします。

これは現実的で有用なシナリオですか?

+0

+1よくある質問ORMを簡素化し改善するための技術をまだ待っています。多分タイププロバイダが助けますか? – Daniel

+0

@Daniel - Linq-to-SQLを使ったことはありますか?私はそれが華麗だと思います(少なくともC#の実装では、F#の実装はプライムタイムの準備ができていないようです)。私はエンティティのフレームワーク/ Hibernate ORMSの頑丈な多様性を嫌います:私はリレーショナルモデルが柔軟で効率的でクエリ可能なストレージモデルとしてうまくいくと思っています。フロント・オブジェクト・マッピング(さらにアドホック・クエリのための1対1のテーブル・マッピングを超えて)私が感じる痛みは、RDBMSの実装とSQLにあり、Linq-to-Sqlはその多くを癒すことができます。 –

+0

@Stephen:ほとんどの開発者がデータの静的表現を提供するため、ほとんどのORMが提供されています。私はむしろ動的性を持っています(たとえば、列を追加すると、ORMは "それを拾う"必要があります;私はコードを再生成する必要はありません)。このため、私はLinq-to-Sqlに多くの時間を費やしていません。 'System.Dynamic.DynamicObject'のようなものを使用して文法的な振る舞いを達成するのは簡単ではないようですが、それはより複雑な部分を扱うことになります:RDBMS実装の詳細。 – Daniel

答えて

1

私が正しければ、型プロバイダはF#コンパイラの「プラグイン」の一種になります。 F#コンパイラがコードをコンパイルする際に見つけられないタイプ情報をプラグインします。したがって、基本的にF#コードをコンパイルする際に、コンパイラは型プロバイダにF#コンパイラには知られていない型情報を記入するように要求します。これは、コンパイル時に型が識別される静的型付けに関するものであることを意味します。

ORMの場合、リレーショナルスキームのタイププロバイダを実装する必要があります。このタイププロバイダは、F#コンパイラがコードをコンパイルして "フィルイン"するために使用されます。あなたのORMマッピングを表す型。

ORMを見ると、リレーショナルデータをオブジェクトにマッピングするだけでなく、基礎となるリレーショナルデータのクエリ、更新などのさまざまな操作もできます。私の意見では、この時点でF#型のプロバイダはORMには良いとは思いませんが、間違っている可能性があります:)

+1

はい、タイププロバイダはORMの実際の機能を提供しないことを理解しています。しかし、コード生成を使わずにORMを静的型安全にすることが有用かどうかと私は思います。 – wmeyer

+0

しかし、あなたはORM生成コードで型の安全性を得るでしょう。そうでしょうか? – Ankur

関連する問題