我在写一个Active Directory包装器,试图遵循SOLID和其他最佳实践。界面目前是“IActiveDirectory”。如何防止泄漏抽象?
我现在的问题是,实现ActiveDirectory必须实现IDisposable来处置创建和处理这个包装内的一些资源,我不知道如何解决这个问题,而试图编码到接口等等......我不想创建一个漏洞抽象(即装饰IActiveDirectory w/IDisposable)。我不能将服务细化(即将方法调用创建/处理资源的范围设置为方法调用),这是由于底层的依赖关系。
我目前有一个工厂,以便IActiveDirectory的消费者可以创建一个按需,但我需要一个干净,方便的方式让消费者用信号完成资源。
如何在不泄漏资源包装的抽象的情况下向消费者提供合同(即接口)?我应该公开实现sans一个接口吗?我的消费者或我的DI容器是否有办法管理此服务的生命周期?
“我需要一个干净,方便的方式让消费者用信号完成信号。” - 这正是“IDisposable”的意思。你不能抽象所有*。 – delnan
是的,我知道这正是IDisposable是什么,我没有问题把它放在具体的类。然而,我不喜欢把它放在一个接口上,因为我创建了一个漏洞抽象,我假设所有的实现都需要一个Dispose方法调用,违反了Liskov。你认为只是将具体的sans接口暴露出来会更好吗? –
这是完全有效的,在LSP和其他条件下,“Dispose”什么也不做。把它放在一个接口上并不意味着假设所有的实现都需要配置(任何不能简单地添加'void Dispose(){}')的实现,这意味着假设*一些实现需要配置(这是真实的)。 – delnan