C#とaop

6,902 views
7,415 views

Published on

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,902
On SlideShare
0
From Embeds
0
Number of Embeds
3,327
Actions
Shares
0
Downloads
7
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

C#とaop

  1. 1. C#とAOP F# C#の素晴らしさを語る会 @Posaune
  2. 2. 自己紹介 Posauneです。@Posauneです。まえかわです。 C#ラブ、F#すげえ、Ruby好き、Python素敵、 Powershellもっと流行れ 京都アジャイル勉強会(#京アジャ)やってま す。 最近はテストとか品質とかUXとかも好きで す。節操がない系エンジニア。 Microsoft MVP for VisualStudio ALM (2013/10 〜)
  3. 3. 資料はさっき作りました 適宜ツッコミをすることにより初めて成立す るセッションです 僕もAOPはまだまだなので、一緒に勉強しまし ょう!
  4. 4. 今日話さないこと Reflectionと遅延Bindingまわり ついでにILとの連携の話をして それからそれの応用としてのAOPとDI
  5. 5. f 今日話さないこと Of Reflectionと遅延Bindingまわり 90 % ついでにILとの連携の話をして それからそれの応用としてのAOPとDI
  6. 6. Reflectionと遅延バインディング Reflectionの説明は誰かがしてるはず あおおにくんさん? いしかわさん? 遅延バインディング Activator.CreateInstance あおおにくんさんもここに 自作DIの友
  7. 7. DI: Dependency Injection これ読め。 Jolt Award 2013 !
  8. 8. さて。
  9. 9. AOP Aspect Oriented Programming アスペクト指向、と呼ばれます aspect/ǽspekt/ 語源は「目に見えるもの(spect)」〗 (物事の)側面, 局面, 面; 様相; (物事を見 る)観点, 角度
  10. 10. アスペクト指向 プログラミング オブジェクト指向ではうまく分離できない特 徴(クラス間を横断 (cross-cutting) するよ うな機能)を「アスペクト」とみなし、アス ペクト記述言語をもちいて分離して記述する ことでプログラムに柔軟性をもたせようとす る試み。 (wikipediaより http://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%B9%E3%83%9A %E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD %E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
  11. 11. 要するにアスペクトって? 複数のクラスやメソッドにまたがる 横断的感心事 オブジェクト指向で分析すると、どうしても コードクローンを生んだりしやすくなってし まう。
  12. 12. 例えば class ClassA { public void MethodA() { Console.Write("Enter Class A - Method A"); } class ClassB { public void MethodC() { Console.Write("Enter Class B - Method C"); // Do Something // Do Something Console.Write("Exit Class A - Method A"); Console.Write("Exit Class B - Method C"); } } public void MethodB() { Console.Write("Enter Class A - Method B"); // Do Something Console.Write("Exit Class A - Method B"); } } オブジェクト分析をしても 切り出すのは難しい
  13. 13. アスペクト指向だと… 主機能 class ClassA { [LoggingTarget] public void MethodA() { // Do Something } [LoggingTarget] public void MethodB() { // Do Something } } class ClassB { [LoggingTarget] public void MethodC() { // Do Something } } アスペクト class LoggingIntercepter : Intercepter { public override void OnEnter(MethodInfo info) { Console.Write("Enter {0} - {1}", info.DeclaringType.Name, info.Name); } public override void OnExit(MethodInfo info) { Console.Write("Exit {0} - {1}",info.DeclaringType.Name, info.Name); } }
  14. 14. C#とAOP AOPを実現するために必要なこと メタプログラミング アセンブリへの介入 ビルドプロセスへの介入 ランタイムでやってもいいけど遅い
  15. 15. メタプロといえば
  16. 16. 怖いのでライブラリに 逃げましょう 商用 PostSharp OSS Fody
  17. 17. Fody オープンソースのAOPフレームワーク ビルドプロセスに介入し、PostBuildイベント でバイナリを書き換える どう書き換えるか、の実装は自分次第 Mono.Cecilを使ったIl.Emit祭り ILSpyとお友達♪ 今日はやりませんが、ここまで低レベルに 落ちれるのもC#の魅力ではあります
  18. 18. XXX.Fody Fodyにはすでにいくつも補助ライブラリが 出ている メソッドの実行時間ロギング IDataErrorの自動実装 IDisposableに自動実装
  19. 19. デモ 誰もが面倒くさいと思っていることの 自動実装
  20. 20. まとめ C#でもAOPできます 簡単にやるならFodyのありあわせを使うか PostSharp こるならFodyは楽しい C#は低レベル実装もかなり自在に触れる 意外にメタプロ耐性あるんですよ
  21. 21. C#

×