ビジネス向けアプリケーションにこそ進めるmicro orm

37
ビビビビビビビビビビビビビビビビビビビビ MicroORM ビビビビ http://opcdiary.net 1

Upload: tadahiro-ishisaka

Post on 28-May-2015

1.472 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: ビジネス向けアプリケーションにこそ進めるMicro orm

1

ビジネス向けアプリケーションにこそ薦めるMicroORM石坂忠広http://opcdiary.net

Page 2: ビジネス向けアプリケーションにこそ進めるMicro orm

2

皆さん?RDBMSへのアクセスってどうしてますか?

Page 3: ビジネス向けアプリケーションにこそ進めるMicro orm

3

ADO.NETのDataSetだったり

Page 4: ビジネス向けアプリケーションにこそ進めるMicro orm

4

Linq to SQLだったり

Page 5: ビジネス向けアプリケーションにこそ進めるMicro orm

5

ADO.NETのEntity Frameworkだったり

Page 6: ビジネス向けアプリケーションにこそ進めるMicro orm

6

でも満足してますか?

Page 7: ビジネス向けアプリケーションにこそ進めるMicro orm

7

こういったフレームワークの作るクエリー文に納得いってますか?

Page 8: ビジネス向けアプリケーションにこそ進めるMicro orm

8

クエリーヒントなんてどう与えるんだよ?

Page 9: ビジネス向けアプリケーションにこそ進めるMicro orm

9

WHEREの左右逆じゃね?

Page 10: ビジネス向けアプリケーションにこそ進めるMicro orm

10

システム動かさねーと INDEXの必要有無もわかんねーのか!

Page 11: ビジネス向けアプリケーションにこそ進めるMicro orm

11そもそも、コードからテーブルを自動的に作るとかワケわからないし。

DOAなんだからテーブルが先に決まってるのが

当たり前だろ!

Page 12: ビジネス向けアプリケーションにこそ進めるMicro orm

12

こういうことですよね?

Page 13: ビジネス向けアプリケーションにこそ進めるMicro orm

13

俺にクエリを書かせろ!

Page 14: ビジネス向けアプリケーションにこそ進めるMicro orm

14

DataReader最凶!!!!

Page 15: ビジネス向けアプリケーションにこそ進めるMicro orm

15

同期実行最凶!!!

Page 16: ビジネス向けアプリケーションにこそ進めるMicro orm

16

しかし!

Page 17: ビジネス向けアプリケーションにこそ進めるMicro orm

17

だからって、 DataReaderではデータを入れるクラスやそのリストにデータ押し込むコードを書かなくていけなくてメンドイよね

Page 18: ビジネス向けアプリケーションにこそ進めるMicro orm

18

わかります

Page 19: ビジネス向けアプリケーションにこそ進めるMicro orm

19

お客さん。良いものが有ります。

注)写真はイメージです

Page 20: ビジネス向けアプリケーションにこそ進めるMicro orm

20

MicroORM!!

Page 21: ビジネス向けアプリケーションにこそ進めるMicro orm

21Micro ORM

うすーいレイヤーで DBへのアクセスを楽にする クエリービルディングとかしないので、クエリーはプログラマが SQL文を書く クエリーヒントのような様々テクニックを駆使できます

クエリを実行して、 DTO(Data Transfer Objectあるいは POCO) にデータ挿入するところはやってくれる

Page 22: ビジネス向けアプリケーションにこそ進めるMicro orm

22

ということで、

Page 24: ビジネス向けアプリケーションにこそ進めるMicro orm

24Dapper - a simple object mapper for .Net

多分 .NET一番ポピュラーなMicroORM

結果セットが帰ってくる Queryと帰ってこない実行のみの Execute二つのメソッド。 どちらも ADO.NETの Connectionの拡張メソッドとして実装されている

クエリ引数とオブジェクトプロパティとの紐付け、結果セットのフィールドとオブジェクトプロパティとの紐付けはシンプルに「名前」で解決

パフォーマンスは DataReaderとほぼ同じ。 と言うか、中は DataReader。

Stack Overflowの中の人 Sam Saffromが作った

Page 25: ビジネス向けアプリケーションにこそ進めるMicro orm

25Dapperの導入

Nuget!

Page 26: ビジネス向けアプリケーションにこそ進めるMicro orm

26単純なクエリーprivate static void Main(string[] args)

{

string connecttionString =

@"hogeohoge";

using (var con = new SqlConnection(connecttionString))

{

int ret;

con.Open();

//データ抽出 var logs = con.Query<Log>("SELECT Id, TimeStamp, Description FROM Log");

logs.ToList()

.ForEach(l => Console.WriteLine(

"{0}, {1}, {2}", l.Id, l.TimeStamp, l.Description));

}

}

Page 27: ビジネス向けアプリケーションにこそ進めるMicro orm

27INSERTprivate static void Main(string[] args)

{

string connecttionString =

@"Hoge";

using (var con = new SqlConnection(connecttionString))

{

int ret;

con.Open();

//データ追加 ret = con.Execute("INSERT Log(TimeStamp, Description) VALUES(@tm, @desc)",

new { tm = DateTime.Now, desc = "Description" });

Console.WriteLine("{0}行追加しました。 ", ret);

}

}

Page 28: ビジネス向けアプリケーションにこそ進めるMicro orm

28結果セットを返すストアードプロシージャ

//ストアードプロシージャの実行var logs = con.Query<Log>(

  "GetLogs", new { param1 = DateTime.Now.AddHours(1.0) },

commandType: CommandType.StoredProcedure);

logs2.ToList().ForEach(

  l => Console.WriteLine("{0}, {1}, {2}", l.Id, l.TimeStamp, l.Description));

Page 29: ビジネス向けアプリケーションにこそ進めるMicro orm

29

あとは linqで嬲ってあげるだけ

Page 30: ビジネス向けアプリケーションにこそ進めるMicro orm

30

すばらしい!

Page 31: ビジネス向けアプリケーションにこそ進めるMicro orm

31Dapper以外のMicroORM

Massive https://github.com/robconery/massive

PetaPoco http://www.toptensoftware.com/petapoco

Page 32: ビジネス向けアプリケーションにこそ進めるMicro orm

32まとめ

今まで蓄えてきた SQLの知識やクエリチューニングの技術を余すことなく投入できるので、ビジネスアプリケーション開発の現場にこそMicroORMが相応しい!!!

Page 33: ビジネス向けアプリケーションにこそ進めるMicro orm

33

お知らせ

Page 34: ビジネス向けアプリケーションにこそ進めるMicro orm

34

今年もやります

Page 35: ビジネス向けアプリケーションにこそ進めるMicro orm

35

C# Advent Calendar 2013

Page 36: ビジネス向けアプリケーションにこそ進めるMicro orm

36

http://bit.ly/CSADC2013で君を待つ!

Page 37: ビジネス向けアプリケーションにこそ進めるMicro orm

37

No code, No life.