2009-02-05 5 views
1

우리는 우리의 코드에서 사방이 패턴을 가지고 :보일러 플레이트 코드를 속성으로 대체하는 방법은 무엇입니까?

using (ServiceAccess ws = new ServiceAccess()) 
{ 
//... 
//code here to talk to webservice ws 
//... 
} 

어떻게 웹 서비스에 얘기해야 기능에 속성이 보일러 플레이트 코드를 대체 할 수 있습니까? (저는 이전에 자바에서 Hibernate를 사용하여 몇 가지 작업을 해본 적이 있습니다. 그리고 자동 삽입을 사용하는 몇 가지 "Transation"주석이있었습니다 ... 보일러 플레이트 코드를 함수에 넣으십시오. .) 사용하는 {} 꽤 괜찮은하지만 그것을 전혀 가지고 않는 것이 좋을 것 ... 속성을 갖는 것은 웹 서비스를 말하는 것으로 기능을 문서화하는 데 도움이 될 것입니다.

편집 : AOP가 트릭을 수행할까요?

+0

'using'절은 try ... finally 블록을위한 구문 설탕입니다. 이미 매우 짧은 자체 지름길을위한 지름길을 요구하고 있습니다. 속성 선언은 얼마나 짧습니까? 그만한 가치가 있니? 이미 충분히 '사용하고 있지 않은가?' –

답변

0

내가 할 수있는 최선의 방법은 코드를 스 니펫으로 삽입하기위한 바로 가기를 만드는 것입니다. 변수 선언을 속성을 통해 메소드에 넣을 수는 없습니다. 다른 말로하면, 속성은 코드에 대해서만 알려줄 수 있습니다. 코드 자체는 변경할 수 없습니다.

1

spring.net에서 aspects을 살펴보십시오.

+0

그래, 우리 프로젝트가 Spring.NET을 사용하기를 바란다 .... 불행히도 그것은 순수한 .NET과 의존성이 없으며 새로운 프로젝트가 아니기 때문에 Spring.NET을 가져 오기에는 너무 늦었다. 그렇다면 AOP 파트를 사용하는 것이 정말 쉽지 않은 한. – dgrant

+0

프록시를 사용하여 계속 수행 할 수 있습니다. 참조 : http://www.castleproject.org/dynamicproxy/index.html – Logicalmind

1

PostSharp을 살펴볼 수도 있습니다. 애스펙트를 구현하기 위해 애트리뷰트를 사용할 수는 없지만 원하는대로 달성하기 위해 애트리뷰트를 사용할 수있다.

0

"Aspect"유형의 것들 ... 이것은 주어진 코드로 주어진 메소드를 꾸미는 방법입니다. 예를 들어 처분하고 싶다면 메소드 호출 후 aspect와 코드는 서비스에 액세스해야합니다. 또한 서비스 클래스의 수명을 거의 제어 할 수 없다는 것을 의미합니다.

최근 일부 코드에서는 서비스 인스턴스를 얻을 수있는 클래스에 대한 컨텍스트를 제공합니다. 그들은 당신이 통과 할 수있는 대의원에게 제공됩니다. 당신의 종결이 남겨진 후에 처분을 할 수 있습니다 ...

DateTime serverTime; 
context.UseService<IInfoService>(s=>serverTime = s.GetTime());