• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
C#とaop
 

C#とaop

on

  • 2,226 views

 

Statistics

Views

Total Views
2,226
Views on SlideShare
1,218
Embed Views
1,008

Actions

Likes
1
Downloads
3
Comments
0

4 Embeds 1,008

http://posaune.hatenablog.com 705
http://mj89sp3sau2k7lj1eg3k40hkeppguj6j-a-sites-opensocial.googleusercontent.com 286
http://cloud.feedly.com 11
http://reader.aol.com 6

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    C#とaop C#とaop Presentation Transcript

    • C#とAOP F# C#の素晴らしさを語る会 @Posaune
    • 自己紹介 Posauneです。@Posauneです。まえかわです。 C#ラブ、F#すげえ、Ruby好き、Python素敵、 Powershellもっと流行れ 京都アジャイル勉強会(#京アジャ)やってま す。 最近はテストとか品質とかUXとかも好きで す。節操がない系エンジニア。 Microsoft MVP for VisualStudio ALM (2013/10 〜)
    • 資料はさっき作りました 適宜ツッコミをすることにより初めて成立す るセッションです 僕もAOPはまだまだなので、一緒に勉強しまし ょう!
    • 今日話さないこと Reflectionと遅延Bindingまわり ついでにILとの連携の話をして それからそれの応用としてのAOPとDI
    • f 今日話さないこと Of Reflectionと遅延Bindingまわり 90 % ついでにILとの連携の話をして それからそれの応用としてのAOPとDI
    • Reflectionと遅延バインディング Reflectionの説明は誰かがしてるはず あおおにくんさん? いしかわさん? 遅延バインディング Activator.CreateInstance あおおにくんさんもここに 自作DIの友
    • DI: Dependency Injection これ読め。 Jolt Award 2013 !
    • さて。
    • AOP Aspect Oriented Programming アスペクト指向、と呼ばれます aspect/ǽspekt/ 語源は「目に見えるもの(spect)」〗 (物事の)側面, 局面, 面; 様相; (物事を見 る)観点, 角度
    • アスペクト指向 プログラミング オブジェクト指向ではうまく分離できない特 徴(クラス間を横断 (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)
    • 要するにアスペクトって? 複数のクラスやメソッドにまたがる 横断的感心事 オブジェクト指向で分析すると、どうしても コードクローンを生んだりしやすくなってし まう。
    • 例えば 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"); } } オブジェクト分析をしても 切り出すのは難しい
    • アスペクト指向だと… 主機能 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); } }
    • C#とAOP AOPを実現するために必要なこと メタプログラミング アセンブリへの介入 ビルドプロセスへの介入 ランタイムでやってもいいけど遅い
    • メタプロといえば
    • 怖いのでライブラリに 逃げましょう 商用 PostSharp OSS Fody
    • Fody オープンソースのAOPフレームワーク ビルドプロセスに介入し、PostBuildイベント でバイナリを書き換える どう書き換えるか、の実装は自分次第 Mono.Cecilを使ったIl.Emit祭り ILSpyとお友達♪ 今日はやりませんが、ここまで低レベルに 落ちれるのもC#の魅力ではあります
    • XXX.Fody Fodyにはすでにいくつも補助ライブラリが 出ている メソッドの実行時間ロギング IDataErrorの自動実装 IDisposableに自動実装
    • デモ 誰もが面倒くさいと思っていることの 自動実装
    • まとめ C#でもAOPできます 簡単にやるならFodyのありあわせを使うか PostSharp こるならFodyは楽しい C#は低レベル実装もかなり自在に触れる 意外にメタプロ耐性あるんですよ
    • C#