design-patterns - 面向对象/模式 : Customizing layout based on environment

标签 design-patterns language-agnostic oop

我的应用程序根据查看位置的不同而存在细微差别。

业务逻辑和 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...caseif...then 到处都是。

最佳答案

如果您根据接口(interface)设计 View ,则可以处理实现中的这些差异。例如,假设 labelVisible 方法位于名为 LabelView 的 View 中。它会有一个 labelVisible() 方法,然后您可能会有一个 KioskLabelViewWebLabelViewDesktopLabelView。将根据环境注入(inject)正确的 View 类。因为差异很微妙,所以我怀疑您的大多数 View 类将在抽象实现中实现,而仅将这些微妙的细节留给子类实现。

关于design-patterns - 面向对象/模式 : Customizing layout based on environment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3680189/

相关文章:

Python 日志记录异常

perl - 为什么在代码中编写配置数据是个坏主意?

node.js - 使用 OOP 扩展 Node.js 模块

oop - 替换嵌套 if 语句的设计模式(箭头反模式)

language-agnostic - 哪些图书馆可以正确计算秒数以及哪些日期?

php - 在 PHP 中使用继承将多个子类的数据添加到数组

objective-c - Objective-C 中的优雅和 'correct' multiton 实现?

c# - 工厂或服务模式或方法注入(inject)?

javascript - 是否可以向现有对象添加构造函数?有意义吗?

language-agnostic - 柯里化(Currying)和部分应用有什么区别?