문제

이 질문은 이전 게시물과 관련이 있습니다. 여기. 기본적으로 나는 DAO를 엔티티에 주입하고 싶습니다.

public class User
{
   IUserDAO userDAO;
   public User()
   {
         userDAO = IoCContainer.Resolve<IUserDAO>;
   }
  public User(IUserDAO userDAO)
   {
         this.userDAO = userDAO;
   }
   //Wrapped DAO methods i.e
   public User Save()
   {
       return userDAO.Save(this);
   }

}

여기에 내 DAO에 사용자 정의 메소드가 있다면 기본적으로 엔티티 객체에 래핑해야합니다. 따라서 iuserdao.register ()가 있으면 use.register () 메소드를 작성하여 래핑해야합니다.

더 나은 것은 DAO의 메소드가 사용자 객체에 동적으로 할당되는 프록시 객체를 만드는 것입니다. 그래서 나는 다음과 같은 것처럼 보일 수 있습니다.

var User = DAOProxyService.Create(new User());
User.Save();

이것은 사용자 엔티티를 와이어를 통해 데이터 전송에 적합한 멍청한 클래스로 유지할 수 있지만 마술처럼 많은 DAO 방법을 제공한다는 것을 의미합니다.

그래도 이것은 내 모자 영역에서 벗어나고, 나는 이것을 달성하기 위해 무엇이 필요한지 궁금했습니다. Castles Dynamic Proxy를 사용할 수 있습니까? 또한 C# 컴파일러가 이에 대처하고 동적으로 추가 된 방법에 대해 알 수 있습니까?

이것이 넌센스인지 알려주십시오.

편집하다:

컴파일 타임에 사용자 객체를 반환하는 것으로 daoproxyservice.create ()를 어떻게 든 daoproxyservice.create를 선언해야합니다. 이것은 제네릭으로 수행 할 수 있습니다.

이것은 사실이 아닙니다. 반환하고 싶은 것은 사용자 객체가 아니라 동적으로 추가 된 userDAO 메소드가있는 사용자 객체입니다. 이 클래스는 어디에서나 방해받지 않기 때문에 컴파일러가 무엇을 만들어야할지 모릅니다.

내가 본질적으로 반환하는 것은 다음과 같은 새로운 객체입니다. 그러나 이것은 지저분 해 보인다.

내가 찾고있는 것이 이것과 비슷한 것 같습니다. 믹스 인

도움이 되었습니까?

해결책

나는 처음에 당신이 물어 보는 것이 효과가 없다고 말할 것입니다. 그러나 약간의 조정으로 우리는 그것을 작동시킬 수 있습니다.

VAR은 단지 컴파일러 기능입니다. 당신이 말할 때.

 var x = GetSomeValue();

컴파일러는 " 'getSomeValue'는 문자열을 반환하는 것으로 정의되어 있으므로 프로그래머는 'String x = getSomeValue ();'를 작성해야합니다. 주목하십시오 컴파일러 이것을 말합니다. 이 변경은 이루어집니다 엮다 시각.

본질적으로 객체를 반환하는 클래스 (daoproxyservice)를 정의하려고합니다. 이것은 작동하지만 "var 사용자"는 "객체 사용자"와 동일합니다.

컴파일 타임에 사용자 객체를 반환하는 것으로 daoproxyservice.create ()를 어떻게 든 daoproxyservice.create를 선언해야합니다. 이것은 제네릭으로 수행 할 수 있습니다.

class DAOProxyService
{
     static DAOProxyService<T> Create<T>(T obj) { ......} 
}

다른 팁

그렇지 않습니다 전적으로 자동이지만 데코레이터 클래스를 생성하기위한 Oleg Sych의 변형을 사용하는 것을 고려할 수 있습니다. iuserdao가 변경 될 때마다 (새 메소드 등) 파일을 재생합니다. 수동으로 유지하는 것보다 낫다 :-)

http://www.olegsych.com/2007/12/how-to-us-t4-t-generate-decorator-classes/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top