3

我在 Windows 窗体中有 ListView 控件,这是由于在图标视图或详细信息视图中显示项目列表。我想分离 ListView 状态逻辑并创建 2 个状态类 IconsState 和 DetailsS​​tate 从 IState 继承它们,并从 UI 窗口调用所有方法。

在详细视图中有 RetrieveVirtualItem 事件,在图标视图中有 DrawItem 事件。为了从 UI 中存在的 IState 变量调用它们,两个州的后代类都必须实现它们。在 DetailsS​​tate 中拥有 DrawItem 只会返回。IconsState 中的 RetrieveVirtualItem 也是如此。

是否有另一种设计方法可以避免在状态中实现空方法?

4

1 回答 1

0

是的,有更好的方法。强制一个类有一个不应该存在的成员是一种设计气味,即用你的话来说“在 DetailsS​​tate 中拥有 DrawItem 只会返回”。

或者,您可以使用 MVP 模式,这将使您具有更高的可测试性。在 MVP 的被动视图变体中,您将拥有一个模型、两个哑视图和一个演示者,该演示者根据用户的选择决定渲染哪个视图。

有关 MVP 的其他资源:
用于 MVP 的 SO 标记
Passive view sample
MVP examples for Windows Forms

于 2012-04-11T15:45:34.447 回答