2010-09-21 73 views
3

我有一个在我的GUI类(winforms)中的一堆逻辑的例子。我将重构这个,以便在gui中没有逻辑,并且一个单独的类拥有所有的逻辑。这是什么模式重构?

这是什么模式?假设我有一个名为AddAddressForm的表单类,那么你会调用哪个关联文件来保存逻辑? AddAddressMediator(不太适合这种模式),如果我在做WPF,我会称之为ViewModel(但我不是)。

回答

2

听起来像模型视图控制器没有模型部分。

+2

MVC如何在没有模型的情况下实现 – TalentTuner 2010-09-21 03:06:10

1

它取决于逻辑的类型,比如说你有条件逻辑,并且你创建了不同的对象,所以在新类中分离它将指向工厂方法。

2-如果您的班级中有复杂的算法,并且您将其分为另一个班级,那么最有可能使用策略模式。可以使用很多其他组合。

0

听起来像是将视图和功能分解为不同文件的基本关注点。并不确定它是否真的属于任何形式,但它的确让我想起了web表单,它们带有视图和代码。

2

我不认为它叫什么。我已经尝试过使用Windows窗体做过类似的事情,但不幸的是它并没有真正起作用:

对于每个表单,我有另外一个类叫MyFormLogic,它被认为包含了我所有的表单逻辑,而表单本身只是包含一些负责处理表单的方法和事件(例如AddButtonClicked事件和AllItems集合属性)

这似乎是个好主意(Yay easy unit testing!) ,但实际发生的是MyFormLogic类变得和以前一样大和混乱,现在我有很多额外的无意义的代码暴露了我的实体中的额外方法事件l表格类。 (也创建一个形式的实例是一种痛苦)

我建议你改为尽可能多地将逻辑重构成许多更小的类来完成1件事,而不是1个额外的类来处理所有的形式的逻辑(它很难解释我的意思,没有一些例子)

2

通过给出的例子,似乎你的对象共享某种共同的数据。

然后看看Flyweight Pattern

1

它是模型 - 视图 - 控制器(MVC)。在您的示例中,模型是地址,视图是对话框,控制器只是将对话框中的事件调解为地址对象。

注意:如果您想要自动执行单元测试,您可以省略控制器,但是不需要;分离(通过接口)将得到回报。

1

你所描述的仍然是Model-View-ViewModel模式,它不是特定于WPF。核心原则是ViewModel包含状态和逻辑,View不断与ViewModel同步。这对WPF绑定来说很好,很容易,但它们不是先决条件;任何有状态的UI都可以使用MVVM。在视图方面,模式的形式风格可能会变得很罗嗦。