2014-10-09 2 views
3

다가오는 프로젝트에서 의존성 주입과 aspect 지향 프로그래밍을 모두 사용할 계획입니다. DIY dependency injection guide 다음에 나 자신을 구현하고 AOP 부분에는 LOOM.Net을 사용합니다.DIY 의존성 주입과 aspect 지향성 프로그래밍

논리 클래스의 타입 interweaved 양태 클래스를 생성하는 공통 패턴

AspectClass aspect = new AspectClass(); 
LogicClass logic = Weaver.Create<LogicClass>(aspect); 

내 직감 접착제 코드 뒤섞임을 수행하는 것, 예를 들어 인 ConcreteLogicB

class MyInjector 
{ 
    ... 
    public ILogicA GetLogicA(AspectClass aspectToInterweave) 
    { 
     return Weaver.Create<ConcreteLogicA>(aspectToInterweave, GetLogicB(aspectToInterweave)); 
    } 

    public ILogicB GetLogicB(AspectClass aspectToInterweave) 
    { 
     return Weaver.Create<ConcreteLogicB>(aspectToInterweave); 
    } 
    ... 
} 

에 의해 구현 ILogicB에 따라 ILogicA를 구현하는 클래스 ConcreteLogicA,이 실행 가능한 해결책이 될 수 있거나 방법 오프 트랙이다겠습니까. 장점은, 내 논리를 내 측면 (AOP의 단서 다.)과 섞어 놓을 필요가 없다는 점이다. 그러나이 방법으로 접착제 코드에 좀 더 많은 로직을 추가하고있다.

답변

3

새 프로젝트를 시작하기 때문에 SOLID 소프트웨어 디자인 원칙을 자세히 살펴보고 새 프로젝트에 적용 해 보시기 바랍니다. 올바른 추상화를 사용하고 SOLID 원칙을 따르는 응용 프로그램을 설계 할 때 LOOM 및 PostSharp와 같은 도구를 코드 작성 도구로 사용하는 이유는 거의 없습니다. 이러한 도구는 쉽게 변경할 수없는 레거시 코드 기반을 가지고 있다는 불행한 입장에 서 있다면 특히 유용합니다.

코드 직조 대신 응용 프로그램 디자인이 도움이되도록하십시오. 올바른 추상화를 사용하여 응용 프로그램을 디자인 할 때 데코레이터를 사용하여 교차 절단 문제를 쉽게 추가 할 수 있습니다. 적절한 추상화 herehere을 사용하여 설계된 시스템의 예를 찾을 수 있습니다.

이러한 기사에서는 데코레이터를 사용하여 교차 절단 문제를 정의하는 방법에 대해 설명합니다. 이러한 방식으로 시스템을 설계 할 때 나머지 코드와는 별도로 크로스 커팅 문제의 구현을 테스트 할 수 있습니다. 코드 제직 도구를 사용할 때 훨씬 더 어려워지는 것. 올바른 추상화를 사용하면 쉽습니다.

저는 지난 몇 년 동안 개발자에게 융통성과 유지 보수성 향상을 위해 디자인 패턴을 올바르게 적용하는 방법을 가르쳐 줬습니다. 그들의 레거시 코드 기반은 달성하기가 매우 어려웠지만, 당신은 새로운 프로젝트를 시작하는 운 좋은 위치에있는 것 같습니다.

설계 기술을 향상시키고 향후 몇 년간 응용 프로그램을 유지 관리 할 수있는 기회로 활용하십시오.

+0

나에게 합리적인 것 같습니다. 어쨌든, 한 가지 더 질문이 있습니다. 데코레이터 패턴을 사용하면 인터페이스 당 하나의 애스펙트 클래스를 구현해야합니다. 그렇지 않습니까? 나는 여전히 논리 수업을 인젝터에 장식합니까? LogicAAspect : ILogicA를 가지고 있다면 예제에서 새로운 LogicAAspect (새로운 ConcreteLogicA (GetLogicB()))를 반환하겠습니까? –

+0

@PaulKertscher : 귀하의 질문을 이해할 수 있는지 잘 모르겠습니다. 나는 DIY '인젝터'로 일하지 않습니다. 나는 [실제 DI 라이브러리] (https : // simpleinjector.org) 또는 [pure DI] (http://blog.ploeh.dk/2014/06/10/pure-di/)를 사용합니다. 응용 프로그램이 커지면 DI 라이브러리가 있으면 순수 DI 또는 DIY에 비해 정말 유용 할 수 있습니다. 데코레이터를 사용하는 것의 큰 장점은 데코레이터가 자신의 의존성을 가질 수 있으며 데코레이터 구현이 차단 라이브러리 또는 AOP 프레임 워크와 같은 외부 도구를 완전히 알지 못한다는 것입니다. – Steven

0

동적 차단을 지원하는 종속성 주입 컨테이너를 사용하여 문제를 해결할 수 있다고 생각합니다 (대부분이 수행합니다). This 저장소는 기존 코드를 여러 측면으로 리팩토링하는 프로세스를 보여줍니다. Castle Windsor DI 컨테이너를 사용합니다. 일리노이 직조 대신 동적 차단을 사용하여 측면을 구현할 경우의 이점은 측면에 종속성을 쉽게 주입 할 수 있고 주변 환경/서비스 로케이터에 의존 할 필요가 없다는 것입니다.

관련 문제