저는 SOLID 및 기타 모범 사례를 따르려고하는 Active Directory 래퍼를 작성하고 있습니다. 인터페이스는 현재 "IActiveDirectory"입니다.누출 추상화를 방지하려면 어떻게해야합니까?
내가 지금 가지고있는 문제는 구현 된 ActiveDirectory가이 래퍼 내부에 생성되고 처리되는 몇 가지 리소스를 처리하기 위해 IDisposable을 구현해야한다는 것이며 인터페이스에 코드를 작성하는 동안이 문제를 해결하는 방법을 모르겠습니다. , 등등 ... 나는 누출 추상화 (즉, IAisiveDirectory/IDisposable 꾸미기)를 만들고 싶지 않습니다. (예 : 메소드 호출에 대한 자원의 생성/폐기 범위 지정) 서비스를 세밀하게 만들 수 없습니다. 기본 종속성.
저는 현재 IActiveDirectory의 소비자가 주문형 제품을 만들 수있는 공장을 가지고 있지만 소비자가 리소스로 완료되었음을 알리는 깨끗하고 편리한 방법이 필요합니다.
리소스 래퍼를 추상화하지 않고 소비자에게 계약 (즉 인터페이스)을 제공하려면 어떻게해야합니까? 구현물에 인터페이스가 없다는 것을 공개해야합니까? 소비자 또는 DI 컨테이너가이 서비스의 수명을 관리 할 수있는 방법이 있습니까?
"소비자가 리소스로 완료되었음을 알리는 깨끗하고 편리한 방법이 필요합니다." - 그게 바로'IDisposable' 이죠. * 모든 것을 추상화 할 수는 없습니다. – delnan
예 저는 IDisposable이 정확히 무엇인지 알고 있습니다. 그리고 구체적인 수업에 문제가 없습니다. 그러나 나는 모든 구현체가 Liskov를 위반하는 Dispose 메서드 호출이 필요하다고 가정함으로써 누출 된 추상화를 생성하기 때문에 인터페이스에 배치하는 것을 싫어합니다. 콘크리트 산을 인터페이스에 노출시키는 것이 더 낫다고 생각합니까? –
LSP 및 다른 기준에 따라 'Dispose'가 아무 것도하지 않는 것이 타당합니다. 인터페이스 상에 두는 것은 모든 구현이 폐기가 필요하다고 가정하는 것을 의미하지는 않습니다. (단순히'void Dispose() {}'를 추가 할 수없는 구현이라면, 일부 구현은 폐기해야한다고 가정한다는 것을 의미합니다. – delnan