PostSharpでexternを使ったDaoパターン
PostSharpは、virtualなメソッドにアスペクトをかけられないようです。ですのでインタフェースのメソッドをアスペクトすることもできない。
サンプルをみていてわかったんですが、staticでexternにするとメソッドのbodyを持たなくてもいいので宣言だけ見るとインタフェースをアスペクトしているみたいになります。
[Dao] public static class EmployeeDao { public static extern Employee SelectBySalary(int max, int min); }
この方法の欠点は、テストのときにポリモーフィズムでDaoを切り替えられないということです。普通に使うと使う側は以下のようになります。
public class EmployeeService { public Employee SelectBySalary(int max, int min) { return EmployeeDao.SelectBySalary(max, min); } }
対策としてはいったんFuncで受けてあげればよさげです。(テストのときはFuncを置き換える)。
public class EmployeeService { protected Func<int, int, Employee> _selectBySalary = EmployeeDao.SelectBySalary; public Employee SelectBySalary(int max, int min) { return _selectBySalary(max, min); } }