次のコード例があります。
public interface IRepository {
// Whatever
}
public class SampleRepository : IRepository {
// Implements 'Whatever'
}
public class NHibernateRepository : IRepository, IDisposable {
// ...
public void Dispose() { ... }
}
さて、それは本当に悪いですか?よくわかりませんが、これは、で基本クラスのデストラクタを仮想としてマークしないC++
のとほぼ同じようです。
IRepository
インターフェースを実装させたくありませんIDisposable
。それは、望ましくない複雑さと、実装しなければならないクラスの束をもたらすからIDisposable
です。
このケースはどのように処理する必要がありますか?
派生型の1つが使い捨てリソースを管理する必要がある場合、これはどの型階層でも発生する可能性があると確信しています。
では、どうすればよいIDisposable
ですか?最初のインターフェイスまでプルアップするか、そのままにして、ユーザーが使い捨てリポジトリと非使い捨てリポジトリを区別することを期待しますか?
ありがとうございました。