2009-06-10 136 views
6

我不确定我是否使用“标准”术语,但这是我正在尝试解决的基本面向对象问题。oo问题 - 混合控制器逻辑和业务逻辑

我正在编码一个窗体。我不想在表单事件处理程序中使用逻辑,所以我只是从那里调用一个自定义对象。

在自定义对象上,有两组逻辑。

  1. “控制器”逻辑,决定什么时候需要完成什么。
  2. 确实需要完成的业务逻辑(例如执行数学运算并返回结果的控件等)。

我的问题是,OO架构是否允许在一个对象中具有这两个?还是建议将它们分成“控制器”对象和“业务逻辑”对象?有没有我应该参考的设计模式?

目前,我已经开始将它们组合成一个对象的路线。该对象具有包含控制器逻辑的“开始”方法。然后,该方法根据需要调用对象的其他方法,并最终将结果返回给对象的调用者。

回答

3

一般而言,您应该可以在两个不同的对象中使用这些对象,但有一个限定符。如果你的项目足够小并且你的对象模型不够复杂,那么将这些功能组合成一个对象也许是有道理的;但是,如果您的功能足够复杂,那么隔离控制器和业务对象几乎肯定会更好。至少,如果你现在还没有完全分离它们,那么设计系统时要考虑在以后分离控制器和业务对象。

1

不,我不把业务逻辑放在控制器中。我添加了一个注入控制器的中间服务层。让服务部门完成这项工作。控制器用于路由请求和编组响应。

即使您未使用Web服务或WSDL,将逻辑放入干净的服务层也是“面向服务”的。如果您决定更改控制器/视图技术,它还有其他好处。

7

你在做什么是“胖控制器”体系结构的一种形式。现在,软件开发趋向于精简控制器。

OO设计是关于解耦。如果你只关注OO编程的一件事,那就让它成为那个。

检出“Domain-Driven Design Quickly”。这本免费的电子书简要介绍了埃里克埃文斯的重要着作“域驱动设计”中涵盖的概念。

了解这些概念应该有助于您理解如何将业务逻辑从控制器或服务层中分离出来。

+0

+1链接 – kizzx2 2009-06-11 01:40:50

1

您设计问题的答案可以是以下情况:如果您还必须为其提供Web客户端,您将如何设计应用程序。

您的Windows Forms UI和您的Web UI都将调用相同的类和方法。唯一的区别就是每个UI如何填充UI并与其他层进行通信。