我在Windows窗体中有ListView控件,这是由于在图标视图或详细信息视图中显示项目列表。我想分离ListView状态逻辑并创建2个状态类IconsState和DetailsState,从IState中获取它们,从UI窗口调用所有方法。
在详细视图中有RetrieveVirtualItem事件,在图标视图中有DrawItem事件。为了从UI中存在的IState变量调用它们,两个国家的后代类都必须实现它们。在DetailsState中使用DrawItem只会返回。对于IconsState中的RetrieveVirtualItem也是如此。
是否有其他设计方法可以避免在状态中实现空方法?
答案 0 :(得分:0)
是的,有更好的方法。这是一种设计气味,迫使一个类有一个不应该在那里的成员,即用你的话说“在DetailsState中有DrawItem只做返回”。
或者,您可以使用MVP模式,这将允许您更大的可测试性。在MVP的被动视图变体中,您将拥有一个模型,两个哑视图和一个演示者,它根据用户的选择决定渲染哪个视图。
MVP的其他资源:
SO tag for MVP
Passive view sample
MVP examples for Windows Forms