지금은 NHibernate도 독립적으로 ProxyFactory를 운용하고, Microsoft 사까지 Unity 라는 IoC/DI 라이브러리를 제공하고 있어, 어떤 것이 더 좋냐? 이런 건 무의미하고, 각자 자신에게 맞는 걸 사용하면 되겠습니다.
위의 코드는 Castle.Windsor 를 이용하여, Dependency Injection을 좀 복잡하게 사용한 예입니다. 뭐 이렇게 할 필요가 있나 싶겠지만, 제품을 만들다 보면, Customizing을 해야 할 게 아니라, 위와 같이 Configuration을 변경하도록 하는 것이 제품 완성도를 높인다고 믿고 있는 터라 꼭 이런 방식을 사용합니다.${DataService.Northwind} ${RequestSerializer.Northwind} ${ResponseSerializer.Northwind} ${DataService.Pubs} ${RequestSerializer.Pubs} ${ResponseSerializer.Pubs} ${AdoRepository.Northwind} ${AdoRepository.Pubs} ${JsonSerializer.Request} ${Compressor.SharpBZip2} ${JsonSerializer.Response} ${Compressor.SharpBZip2} ${RequestSerializer.Compress} ${Encryptor.Aria} ${ResponseSerializer.Compress} ${Encryptor.Aria} ${BsonSerializer.Request} ${Compressor.SevenZip} ${BsonSerializer.Response} ${Compressor.SevenZip}
아니 이런 Decorator 패턴에 대해 쓴다는 걸 서론만 쓰고, 그만 뒀네요... 코드 처리하는데 정신이 팔려서리... 쩝...
자 그럼 코드를 좀 볼까요? 상위에 있는 놈들은 모두 Component의 속성이나 인자값으로 다른 Component 를 주입하는 Dependency Injection이라 합니다.
자 여기서 Decorator 패턴을 사용한 예는?
Component 중에 "RequestSerializer.Pubs" 를 보십시요. 이 놈은 Serializer 로 "RequestSerializer.Compress" 를 Wrapping 하여 ARIA 암호화를 수행하는 Decorator 입니다.
"RequestSerializer.Compress" 는 "BsonSerializer.Request" 를 Wrapping 하고, SevenZip 알고리즘으로 압축을 수행합니다.
자 이제 정리하면 BSON->Compress->암호화 로 래핑되도록 되었습니다. 물론 순서는 바꿀 수 있고, Decorator를 더 추가할 수도 있습니다.
이렇게 환경설정에서 IoC/DI 기능 중에 Decorator 패턴을 활용하게 되면, 상당히 복잡한 구성도 쉽게 구성할 수 있고, 다양한 조합의 Component를 제공할 수 있습니다.
댓글 없음:
댓글 쓰기