我在您执行以下操作的框架内工作:
IMyClass instance = Session.GetAllObjectsOfType("IMyClass")[0];
ILock lock = instance as ILock;
if(lock != null)
{
lock.Lock();
instance.DoSomething();
lock.Unlock();
}
ISaveable saveable = instance as ISaveable;
if(saveable != null)
saveable.save();
为此,我有
class MyClass : IMyClass, ISaveable, ILock
{
}
我实际上我需要实现8-15个接口,并且需要通过强制转换主对象来访问它们。实现这个的最简洁方法是什么?我看着外立面模式,但我不认为可以在这里使用。
答案 0 :(得分:3)
根据您的评论:
我希望有一个比明显更好的方式。将会有很多代码进入实现不同的接口,而ILock接口并不需要了解ISavebale的功能。我基本上是在寻找一种干净的方法,这样做不会导致一个类有5k行代码和200个公共函数
如果你想要一个类来实现接口,那么类需要继承接口,但是可以注入和包装功能(也就是Facade)。
这是实现ISaveable,ILock等通用但独立代码类目标的最简洁方法。
例如:
public MyClass : IMyClass, ISaveable, ILock
{
private readonly ISaveable _saveableImplementation;
private readonly ILock _lockImplementation;
public MyClass(ISaveable saveableImplementation, ILock lockImplementation)
{
_saveableImplementation = saveableImplementation;
_lockImplementation - lockImplementation;
}
public void ISaveable.Save()
{
_saveableImplementation.Save();
}
public void ILock.Lock()
{
_lockImplementation.Lock();
}
}