일부 사용자 정의 클래스와 상호 작용할 필요가있는 .NET 프로젝트를 작업 중입니다. "작업"으로 언급되어 있습니다. 모든 작업 클래스는 라이브러리가 소비하기 위해 특정 인터페이스 IJob
을 구현해야합니다. 때로는 작업 클래스가 관리되지 않는 자원을 보유 할 수 있으며 명시 적으로 처리해야합니다.일회용 물건을 어떻게 처리해야합니까?
작업에 명시 적 처분이 필요한지 미리 알 수없는 경우 어떻게 사용 후 모든 작업이 적절히 처리되도록해야합니까? 나는 몇 가지 아이디어를 자신을 가지고 있지만, 귀하의 의견/제안을 듣고 싶습니다 :
는
Dispose()
방법을 구현하기 위해 모든 작업을 강제로IJob : IDisposable
을 확인합니다. 이렇게하면using
블록의 작업을 처리 할 수 있지만 대부분의 작업은 이 아니기 때문에 명시 적 처리가 필요할 것으로 예상되므로은 클라이언트 개발자에게 불필요한 혼동을 일으킬 수 있습니다.- 는
try-finally
블록 작업과 관련된 모든 작업을 수행하고, 작업이IDisposable
을 구현하는 경우Dispose()
가 호출 될 수 있도록finally
를 사용합니다. 이렇게하면 빈Dispose()
메소드를 구현하지 않아도 클라이언트가 새로운 작업 클래스를 쉽게 구현할 수 있지만 라이브러리가 일회용 작업을 알고 걱정하는 사실도 숨 깁니다. 이것을 작성 후
, 나는 솔루션 # 1 향하다하는 경향이있다,하지만 난 여전히 다른 솔루션을 볼 좋을 것이다 생각하고, 추가 프로/두에 단점은 이미 염두에두고있다.
좋은 지적. 그러나 대부분의 하천은 처분이 필요하며 소수의 일자리에서만 필요하다고 생각합니다. –
'System.Web.IHttpModule'은 구현 자에게 (Dispose()) 메소드를 제공 할 것을 요구합니다. 단 몇 개의 모듈 (IMHO) 만 필요합니다. 나는 이것이 # 1에 대한 우선 순위를 제공한다고 생각합니다. –
+1, 나는 또한 Job이 사용했던 것을 정리하는 표준화 된 방법을 제공하는 것이 이치에 맞다고 생각한다. 'IDisposable'을 사용하면 프레임 워크 지원의 혜택을 볼 수 있으며 최종 사용자는 적절한 정리 코드를 어디에 두어야하는지 생각하면 도움이됩니다. – user7116