我的应用程序根据查看位置的不同而存在细微差别。
业务逻辑和 View 样式的变化很好 - 这都是分别通过依赖注入(inject)和 CSS 处理的。
但是,我遇到的问题是 View 布局/元素的微小变化。
例如,如果用户在店内信息亭中运行我们的应用程序,我们使用的导航选项与他们在桌面环境中或通过 Web 浏览器运行的导航选项略有不同。我们可以选择隐藏按钮或导航栏。
目前,我正在做这样的事情:
[Inject]
public var environment:Environment;
public function get labelVisible():Boolean
{
switch (environment.channel)
{
case Environment.KIOSK :
return false;
case Envirnoment.WEB :
case Envirnoment.DESKTOP :
return true;
}
}
但是,我担心环境类会到处泄漏。
我不想过度设计某些东西,但我想知道我是否缺少一个合适的设计模式,可以让我避免长时间的 switch...case
或 if...then
到处都是。
最佳答案
如果您根据接口(interface)设计 View ,则可以处理实现中的这些差异。例如,假设 labelVisible
方法位于名为 LabelView
的 View 中。它会有一个 labelVisible()
方法,然后您可能会有一个 KioskLabelView
、WebLabelView
和 DesktopLabelView
。将根据环境注入(inject)正确的 View 类。因为差异很微妙,所以我怀疑您的大多数 View 类将在抽象实现中实现,而仅将这些微妙的细节留给子类实现。
关于design-patterns - 面向对象/模式 : Customizing layout based on environment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3680189/