根据上下文更改代码行为

时间:2010-12-01 20:25:48

标签: c# .net aop

我有一个类可以从GUI调用或者形成非图形环境(批处理模式)

在批处理模式下执行时,“告诉”代码的GUI相关部分不能执行的最方便的最佳实践方法是什么。

我想到像

这样的东西
    public MyMethod()
    {            
        [@TAG: DOTHIS_ONLY_IF_GUIMODE]
        ShowPanels();
        ....
    }

GUI_MODE_ACTIVATED在运行某处会被设置为true或false,具体取决于从哪里调用程序

我想避免丑陋的追踪if / else的东西散布在我的代码中 我的小拇指告诉我AOP是要走的路(但如果我设法找到一个更简单的替代方案,我会去寻找它)
那么,最简​​单的方法是什么?

更新 正如大多数贡献者指出的那样,将GUI代码与业务代码分离是一条经验法则,但即使没有涉及GUI ,我仍然有兴趣知道如何做到这一点(即,两个不同的两种不同环境的BATCH模式,例如)

4 个答案:

答案 0 :(得分:3)

我认为最好的办法是将特定于GUI的代码从类中取出,并实现在类处理中的关键时刻触发的事件。当GUI调用时,GUI代码订阅这些事件并“做正确的事情”。批处理代码忽略了事件,一切都很好。

答案 1 :(得分:0)

  

在批处理模式下执行时,“告诉”代码的GUI相关部分不能执行的最方便的最佳实践方法是什么。

这就是您将业务逻辑问题与UI问题分开的原因。

  

那么,SIMPLEST和最简单的方法是什么?

将业务逻辑问题与UI问题分开。

答案 2 :(得分:0)

最简单,最直接的方法是使用if语句。

一种不那么简单但更有条理的方法是将ShowPanels方法抽象化,然后派生出两个类:一个用于GUI模式,另一个用于批处理模式。

答案 3 :(得分:0)

Add Aspects to Object Using Dynamic Decorator

您的课程应仅涉及业务逻辑而非演示(GUI或批处理等)。在运行时,您可以根据需要将表示(GUI或非GUI)代码附加到类的对象。

无需在类定义中使用丑陋的属性代码。