tekitoumemo’s diary

思ったことを書くだけ。長文版Twitter

【C#】Dapper使ってりゃ間違いないよ

だっぱー


C#のデータアクセスはいっぱいあるけどチームで使うなら結構最適なORマッパーじゃないかなと思い始めてるので、Dapeerの良さについて語ります。

ちなみにチームと言っても色んな人種(年齢やら経歴やら)がいるチームにDapeerは最適だと思ってるのでORマッパーマッパーしてる人ばかりだったらPetaPocoの方が良いです〉ぺたぽこ
そしてMS標準のEntity Frameworkは開発当初から捨て去りましょう。
型付DataSetとか記憶から消し去りましょう。


それではDapperの良いところを語って行きます。

早い、とにかく早い


この記事を見てもらうと一目瞭然。EFとか終わってるでしょ。EFとかでもやっていけるよ!って人に言いたい。パフォーマンスの調査をするときにどっちが原因かわからんでしょ。無駄に工数かかるし、パフォーマンス調査の結果、「だっぱー」だね!ってなるんだからとりあえず選んどいて損はない

実績豊富

ラニさんが使ってる。

大型サイトでの実績があり、安定感バツグン。シンプルってのはこういうとこが良いね。無駄な調査しなくて良いし無駄にStackOverFlowを漁らなくて良い。

※CEOの河合さんに会ったことあるけど、天才。恐ろしいぐらいオタク。本当に一緒にお仕事させて頂きたい。

SQLを結構書く

これは賛否両論、むしろ生SQLを書くのは良くない風潮があるんだけど、40代以上の人はちょっと抵抗ある人が多いっぽいから生SQL書けるって良いなと思った。SQLは必ず通る道で誰でも知ってると思うので、学習コストが低いってかなり良いと私は思います。ORマッパーはデータアクセスのめんどいとこを差っ引いて使えるってのが魅力だけど、チーム全体で使えなければ開発効率もクソもないかなと思ってるんで生SQLを書くのは否定しません(2017/11月現在)。でもね、クエリビルダーのとかその他諸々の良さは知ってる、来月あたりに人間変わったように否定してるかも笑

daynamicが最強

ORマッパーの三種の神器(もっとある)としてデータマッピングがあるんだけど、むしろデータマッピングすらいらないじゃんって仕様がC#にはあります。C#コンパイラ言語なんだけど、.Net4.0からdaynamicが使えます、要はインタプリタが使えるので、マッピングしなくても使えます。無駄なクラス作る必要ないし、型を変更したときとかクソ楽ってか何もしなくて良いレベル。
こんな感じで使える。

dynamic dynamicObj = connection.Query("SELECT id, name FROM table1 LIMIT 1").FirstOrDefault();
Console.WriteLine("Id: {0}", dynamicObj.id);
Console.WriteLine("Name: {0}", dynamicObj.name);

ヤバくね?
インテリセンス使えんとかコンパイラでエラー検知出来ないとかタイポでバグるとかいろいろあると思いますが、テストは必ずやってるのが当たり前だと思うので、悪い点が見つかりません。C#はこんな感じで小賢しい天才機能があるので大好きです。

Dapperはあくまで経験が多い人も少ない人もいるチームで円滑に開発を進めるためのライブラリなので、技術好きで上級者は他のライブラリが良いかもしれません(僕も自分で作るならDapper使いません)初心者向けではありますが、いろんなこともできるので奥が深くて使いがいがあるライブラリなので、迷ったら是非使ってみてください。

後日談
Entity Frameworkを見てみると全然悪くない。っか良い要素が多過ぎて知らないくせにいきがってた感があります。批判するときはちゃんと調べましょう