有一个遗留项目和大量模型类,它们按原样呈现。它们具有许多属性,可以分为许多不同的接口(接口隔离)。
class FatModel : IFoo, IBar, IZaa...
需要将这个类的一个实例传递给需要IFoo和一些IBar的应用层
选项来了。
创建通用接口。
interface IFooBar : IFoo, IBar class FatModel : IFooBar, IZaa...
但事实证明这是胡说八道,因为这些通用接口像兔子一样繁殖。为 2 个接口创建了一个通用接口后,肯定会出现需要 3 个或其他 2 个接口的人……并且以不同的组合出现。
按原样传递对象并在正确的位置转换为所需的界面。
但在这种情况下,所有类型检查都会进入运行时,这很糟糕。
适配器,将在其中显示所需的属性?
我从来没有为模型做过适配器,我不知道这样的解决方案有什么用。
还有哪些其他选择?
让我们从接口(以及实现它的类)必须显示主题区域这一事实开始。
如果该组合
IFoo
具有IBar
应用价值,那么介绍它会很有用。那么一切显然都很简单,但是,您几乎不想为此重写遗留问题。如果接口的组合没有实用价值,那么同时需要两者的方法也没有实用价值。解决这个问题的一个简单方法是将两种方法分开,一种是 requires
IFoo
,另一种是 requiresIBar
。UPD:我没有马上想到,但你可以制作一个指定要求的通用方法: