linqの欠点
答えて
- は、あなたが最初にそれを
- 繰延実行を開始するときに理解することは難しいことができます常に多少漏れやすい抽象化になります - あなたは、本質的
、私はまだLINQを愛していないどのような動作し、何を知っておく必要があり、大規模:)
EDITかかわら:この短いリチウムを書きましたst、私はa very similar questionへの答えがあることを思い出しました...
実際に私は欠点を考えることができません。多くのことがよりコンパクトではあるが読みやすい方法で書かれているため、プログラミングの時間が大幅に短縮されます。
しかしこれを言って、私はあなたが何をやっているのかを考えなければならないということにも同意しなければなりません。
それが持っている唯一の欠点は、その性能はプログラミングで任意の抽象化と同じように、このarticle
を参照してください、それは誤解に対して脆弱である:「私はちょうどこの抽象化を理解していれば、私は何が起こっているか理解する必要はありません。カバーの下に。"
真実ですが、カバーの下で何が起こっているのか分かっていれば、適用が中止された箇所を理解するため、抽象的な部分からはるかに優れた価値が得られます。それが適切なところで成功の大きな自信を持っています。
これはすべての抽象概念に当てはまりますが、Linqにはバケツが含まれています。 Linq to Objectsを理解するには、C#でSelect
、Where
、Aggregate
などをyield return
と書く方法を学ぶことが最善の方法です。 yield return
が手書きコードの多くをクラスですべて書き換えることによって、どのように置き換えられるのかを理解します。そうすれば、あなたはそれを救う努力を感謝してそれを使うことができ、もはや魔法のように見えなくなるので、あなたはその限界を理解するでしょう。
述語が式として取り込まれ、実行される別の環境に移送されるLinqの亜種の場合と同じです。安全に使用するためには、どのように動作するのか理解しておく必要があります。
したがって、Linqの第1の欠点は、単純な例が誤解を招くほど短く単純です。問題は、サンプルの作者が何を書くべきかを知っていたことです。彼らは長い形でそれを全部書く方法を知っていて、Linqの断片をどのようにabreviationsとして使うことができるのかを知っていたので、素敵な短いバージョンに到着しました。
私が言っているように、実際にLinqに特有のものではありませんが、とにかく関連性は高いです。
LINQの最大の痛みは、(データベースのバックエンドで)leaky abstractionでなければリポジトリインターフェイスで使用できないということです。
LINQは、層(特にDALなど)内幻想的ですが、別のプロバイダが異なるものをサポートしているので、あなたは、異なる実装のために同じ作業Expression<Func<...>>
またはIQueryable<T>
機能に頼ることはできません。例として
、LINQ-SQL-へとEntity Frameworkの間:
- EFは
Single()
- あなた
Skip
/Take
/First
場合EFは、明示的なOrderBy
- EFせずにエラーになりますをサポートしていません。
などADO.NET Data ServicesのLINQプロバイダーはdiffereをサポートしていますntの組み合わせ。これにより、嘲笑や他の抽象化が危険にさらされます。
しかし、メモリ内(LINQ-to-Objects)、または単一レイヤー/実装で...素晴らしい。
ここでいくつかの考え:Pragmatic LINQ。
匿名の種類。適切なORMはでなければなりません。常にのオブジェクトが「あなたの」タイプ(部分クラス、私のメソッドを追加する可能性、オーバーライドなど)を返します。チュートリアルやlinqを使ったさまざまな複雑なクエリの例がありますが、そのうちの誰もが 'プロパティのバッグ'を返すというメリットについては気にしません(新しい{return ... {}を返します)。私はどのように匿名型で作業し、別のクラスに再びラップするのでしょうか?
- 1. CRUDパターンの欠点
- 2. Context.Currentパターンの欠点?
- 3. Tomcatの欠点Http11NioProtocol
- 4. gwt + grail ..利点と欠点
- 5. Nginxの画像キャッシュの欠点と欠点は何ですか?
- 6. Android NDKの利点と欠点
- 7. ActiveMQのNIOの欠点
- 8. MonoTouchの最大の欠点
- 9. wordpressの欠点/制限?
- 10. mongo db --smallfilesスイッチの欠点
- 11. WCF readerクォータ設定 - 欠点?
- 12. SQL Server - Null列のパフォーマンス/サイズの欠点
- 13. VAR型の大きなLIMITの欠点
- 14. 単位なしのラインハイトへの欠点?
- 15. C++クラスの前方宣言の欠点?
- 16. SqlBulkCopyの欠点は何ですか
- 17. シングルトンクォーツジョブの欠点は何ですか
- 18. jUnitと比較したTestNGの欠点?
- 19. ファサードデザインパターンの欠点は何ですか?
- 20. jInternalFrameを使用する際の欠点
- 21. 空間データの重複と欠落点
- 22. 大きな初期化リストの欠点?
- 23. Stackless Pythonの欠点は何ですか?
- 24. DWRの欠点は何ですか?
- 25. REST Webサービスの主な欠点
- 26. CreateFileとSteamの利点と欠点の比較
- 27. チェインセッター:欠点はありますか?
- 28. LOGOを使用する際の欠点/弱点は何ですか?
- 29. Jsonオブジェクト用に生成されたC#クラスの利点と欠点
- 30. 複合主キーのMySQLでのパフォーマンスの欠点
それでは欠点はありません!その記事で測定されたオーバーヘッドは、実際のアプリケーションの大部分に大きな違いはありません。 –
私はlinqを使ってアプリケーションを開発していますが、パフォーマンスの問題は本当に気になります。特に動的クエリのようなものを使うべきです。 – Sadegh