2010-12-30 12 views

答えて

0

私はあなたがそれを達成するために、アスペクト指向プログラミングを使用しなければならないと思います。私はあなたが私は考えることができる つのオプション(代わりに、インターフェースの)クラスの意味だと思うhttp://www.sharpcrafters.com/aop.net

+0

私は申し訳ありませんが、私はasp.net初心者ですいくつかのより直接的な例を提供することができますか? –

0

読む:

があらゆる方法で書き込みコードの行にあるをINotifyPropertyChangedの実装を

または

のAOPのフレームワークを記事のhttp://www.codeproject.com/KB/cs/AOP_Frameworks_Rating.aspxに採用する場合は、それがメジャールではない場合ap

+0

もっと直接的な例を教えてもらえますか? –

+0

INotifyPropertyChangedのリンク:http://msdn.microsoft.com/en-us/library/ms229614.aspx他のAOPフレームワークの場合、それぞれのサイトには良い例があります。 – Chandu

+0

それはあなたの時間のためのおかげで多くのお役に立ちました –

1

私の30分です。ロギングコードをどこかに実装する必要があります。そのため、コードに対して別の抽象化を作成する必要があります。したがって、抽象クラスが必要です。おもう。これは非常に速く汚れています。

public interface IService<T> 
{ 
    List<T> GetAll(); 
    bool Add(T obj); 
} 

、あなたはあなたができるあなたの実装に、あなたはあなたの具体的なクラス

public class EmployeeService : Service<Employee> 
{ 
    protected override List<Employee> GetAllWithLog() 
    {    
     return new List<Employee>() { new Employee() { Id = 0, Name = "test" } }; 
    } 

    protected override bool AddWithLogging(Employee obj) 
    { 
     /// TODO : do add logic here 
     return true; 
    } 
} 

public class CompanyService : Service<Company> 
{ 
    protected override List<Company> GetAllWithLog() 
    { 
     return new List<Company>() { new Company() { Id = 0, Name = "test" } }; 
    } 

    protected override bool AddWithLogging(Company obj) 
    { 
     /// TODO : do add logic here 
     return true; 
    } 
} 

public class Employee 
{ 
    public int Id {get;set;} 
    public string Name { get; set;} 
} 

public class Company 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

用として

public abstract class Service<T> : IService<T> 
{ 
    private void log() 
    { 
     /// TODO : do log routine here 
    } 

    public bool Add(T obj) 
    { 
     try 
     { 
      log(); 
      return AddWithLogging(obj); 
     } 
     finally 
     { 
      log(); 
     }   
    } 

    public List<T> GetAll() 
    { 
     try 
     { 
      log(); 
      return GetAllWithLog(); 
     } 
     finally 
     { 
      log(); 
     } 
    } 

    protected abstract List<T> GetAllWithLog(); 
    protected abstract bool AddWithLogging(T obj); 
} 

あなたのロギングルーチンを実装する必要があります抽象クラスが必要になりますちょうど..

static void Main(string[] args) 
    { 
     IService<Employee> employee = new EmployeeService(); 
     List<Employee> employees = employee.GetAll(); 

     foreach (var item in employees) 
     { 
      Console.WriteLine(item.Name); 
     } 

     IService<Company> company = new CompanyService(); 
     List<Company> companies = company.GetAll(); 

     foreach (var item in companies) 
     { 
      Console.WriteLine(item.Name); 
     } 

     Console.ReadLine(); 
    } 

これが役立つことを願っています!

+0

マイケル..私は今これを試してみましょう.. !! –

関連する問題