2011-11-09 19 views
2

我有一个控制用户看到网页上的哪个类控制。有几个州。第一组视图由用户对象控制,该对象控制下面的项目。 - 登录 - 未登录 - 喜欢页 - 页面不招人喜欢State模式,但是从2个不同的地方

然后,还有另外一个标识,如果竞选绑上面的页面是否有效 对象(活动) - 系列活动 - 此役过后

我想知道如果我应该有2类,控制状态 - 一个用于用户和一个广告活动。然后,根据每个类设置的两种状态,根据if和else推导正确的视图。

  1. 如果网页喜欢和竞选活动的 - 显示用户活动提供页面
  2. 如果页面不喜欢和竞选活动的 - 显示prelike竞选可用的页面
  3. 如果页面喜爱,此役过后 - 显示用户此役过后
  4. 如果页面不被喜欢和广告系列结束 - 在页面上显示用户喜欢广告系列

    这看起来像“代码味道”吗?

我该怎么设计这个更好?

+0

是运动状态,通过任何手段连接到用户? – CharlesB

+0

为什么不有一个“控制状态”类,并将活动对象传递给它? –

+0

活动状态未链接到用户,但用户将根据两种状态查看视图。我在说明中添加了更多信息以供澄清。 – Dhana

回答

0

是否都包裹状态标志到自己的类似乎并没有对我重要的选择 - 什么办法,明确传达的意图会做(正确地命名例如标志)。 在你的情况下,我可能会去寻求一些简单的基于规则的解决方案(如@ejaenv给出的解决方案),可能通过以某种小型DSL的形式进行美化。

但是你可以从一些获得更多的维护别的IMO。这两种状态(类似和活动)之间的耦合是否正确?例如,我可以理解,有时候你想准备一些漂亮的,定制的页面专用于每一个案例。另一方面,通常这种耦合通常不是必须的,因为两种状态都代表了相当独立的概念。根据每个标志的状态,一个页面模板可能包含适当的元素。这样你就避免了完全选择正确的视图的问题。

顺便说一句,你的建议是不是真的描述的状态模式(因为这个问题可以建议)。这种模式是关于一个对象的行为,这个对象的行为因呼叫而异,具体取决于它的状态,以及一些特定的多态性。 当你计划添加更多条件时,状态模式对你来说帮助不大。与这种模式相关的必要的样板量将会掩盖所有(在这种情况下为次要的)收益。除此之外,国家模式是关于从客户隐藏国家(他们只能间接地根据观察到的行为推断它)。应用该模式,然后阅读状态以基于它做出决定肯定会是一种代码味道。

相关问题