Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
C#とAOP
F# C#の素晴らしさを語る会
@Posaune
自己紹介
Posauneです。@Posauneです。まえかわです。
C#ラブ、F#すげえ、Ruby好き、Python素敵、
Powershellもっと流行れ
京都アジャイル勉強会(#京アジャ)やってま
す。
最近はテストとか品質とかUXとかも好...
資料はさっき作りました
適宜ツッコミをすることにより初めて成立す
るセッションです
僕も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) するよ
うな機能)を「アスペクト」とみなし、アス
ペクト記述言語をもちいて分離して記述する
ことでプログラムに柔軟性を...
要するにアスペクトって?

複数のクラスやメソッドにまたがる
横断的感心事
オブジェクト指向で分析すると、どうしても
コードクローンを生んだりしやすくなってし
まう。
例えば

class ClassA
{
public void MethodA()
{
Console.Write("Enter Class A - Method A");

}

class ClassB
{
public void Meth...
アスペクト指向だと…
主機能
class ClassA
{
[LoggingTarget]
public void MethodA()
{
// Do Something
}
[LoggingTarget]
public void Method...
C#とAOP
AOPを実現するために必要なこと
メタプログラミング
アセンブリへの介入
ビルドプロセスへの介入
ランタイムでやってもいいけど遅い
メタプロといえば
怖いのでライブラリに
逃げましょう
商用
PostSharp
OSS
Fody
Fody
オープンソースのAOPフレームワーク
ビルドプロセスに介入し、PostBuildイベント
でバイナリを書き換える
どう書き換えるか、の実装は自分次第
Mono.Cecilを使ったIl.Emit祭り
ILSpyとお友達♪
今日はやりませ...
XXX.Fody
Fodyにはすでにいくつも補助ライブラリが
出ている
メソッドの実行時間ロギング
IDataErrorの自動実装
IDisposableに自動実装
デモ

誰もが面倒くさいと思っていることの
自動実装
まとめ
C#でもAOPできます
簡単にやるならFodyのありあわせを使うか
PostSharp
こるならFodyは楽しい
C#は低レベル実装もかなり自在に触れる
意外にメタプロ耐性あるんですよ
C#
C#とaop
Upcoming SlideShare
Loading in …5
×

C#とaop

12,736 views

Published on

  • Follow the link, new dating source: ❤❤❤ http://bit.ly/2F4cEJi ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ❤❤❤ http://bit.ly/2F4cEJi ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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#

×