可选组件功能vs SRP
|
我目前遇到一个设计问题。
假设有一个组件层次结构。这些组件中的每一个都派生自抽象的
Component
类型,该类型类似于以下内容:
public abstract class Component
{
public abstract Component Parent { get; }
public abstract ComponentCollection Children { get; }
}
现在,我想向这些组件添加一些可选功能,以能够在组件层次结构中进行搜索并在层次结构中选择组件为例。
在基类中提供以下可选功能是否被视为不好的做法:
public abstract class Component
{
// Other members
public abstract bool IsSearchable { get; }
public abstract bool Search(string searchTerm);
public abstract bool IsSelectable { get; }
public abstract bool Select();
}
虽然“搜索能力”和“选择能力”在派生组件中通过例如使用策略模式?
在某种程度上,这似乎违反了SRP,但我认为唯一的选择是为每个可选功能都具有一个接口,并仅在支持该功能的组件上实现该接口。
我认为这样做的缺点是,每次我要检查组件是否提供特定功能时,都必须编写这样的代码:
public bool Search(Component component, string searchTerm)
{
ISearchable searchable = component as ISearchable;
if(searchable != null)
{
searchable.Search(searchTerm);
}
}
您会选择哪种策略,或者您有更好的主意?
提前致谢!
没有找到相关结果
已邀请:
3 个回复
捐焦
敦肌
谷靛