1

我已经以通常的 MVC 思维方式进行了大量(网络)开发,我认为它对我很有帮助。

但是,我现在必须拆分我的应用程序,使我的前端必须以服务的形式访问服务器端功能

由于我是创建服务的人,我想我可以将服务视为控制器,而控制器又会调用我模型中的函数。

这是一个好方法吗?

谢谢

PS:有问题的服务器端技术是 PHP,客户端是 Adob​​e Flex (ActionScript)。

4

2 回答 2

4

有很多不同的方法,我不能说其中任何一个都是错误的。我想知道您目前的方法是什么;以及使您想要更改它的限制是什么。

您似乎建议的方法是创建一个位于模型(AKA PHP 代码执行“繁重的后端提升”)和视图(AKA Flex 前端)之间的外观。我没有继承问题;特别是如果您已经实现了包含所有繁重/业务逻辑的后端。我会将此外观层视为服务层,并将其视为模型的一部分;不是控制器的一部分。

尝试在 Flex 和某些后端之间创建模型-视图-控制器-服务 (MVCS) 架构时;我一般是这样做的:

这些视图被实现为 Flex 组件。

Controller 实现为 ActionScript 类。从我的角度来看,控制器的主要目的是将对服务器的请求和数据打乱回视图。

服务层在服务器上实现;PHP 在你的情况下。可能是您在 Flex 中为您在服务器端拥有的每项服务提供了一个并行服务类。

模型层具有执行相关业务逻辑的类;验证数据以将其保存到数据库以从数据库中检索它,以及您需要的任何其他业务逻辑。通常作为模型的一部分,我有值对象类。值对象类通常在 ActionScript 中并行,用于在服务器端服务和客户端控制器之间传输数据。

所以,它的工作原理是这样的:

  1. 用户与视图交互
  2. 视图将事件分派给控制器
  3. 控制器对服务器上的服务进行远程调用
  4. 服务调用模型获取数据
  5. 模型获取请求,执行适当的操作,创建一个值对象 - 或值对象数组 - 并将其返回给服务
  6. Service 将结果返回给客户端控制器
  7. 控制器做一些事情来更新视图

有很多框架可以帮助这个过程,特别是对于应用程序层之间的“封装”通信。

在许多情况下;“模型中应该有什么/视图中应该有什么”之间的界限很模糊。当我们开发 Flex(或 AJAX 或 Silverlight 或任何智能客户端)应用程序时,我们通常希望拥有智能视图;所以一些业务逻辑可能会作为视图的一部分来实现。没关系; 我们必须用“理想”的抽象案例来平衡应用程序的功能。

你的问题有点宽泛,但我希望这会有所帮助。我个人更喜欢对我的应用程序架构实用一些。有时我的服务类执行业务逻辑,例如数据解析。这取决于应用程序及其目标、客户和时间框架。

于 2011-05-25T01:17:09.497 回答
1

如果您的目标是在将服务中的数据返回到想要使用它的应用程序之前对其进行处理,您可以考虑为您的服务创建一个装饰器类。

这是一个关于检索帖子的服务的小图:(我似乎不允许发布图像,所以我把它放在ImageShack上。)

PostService 类包含 RemoteObject 的一个实例,基本上只是远程 (php) 服务的客户端存根。它将向 onResult 或 onFault 函数返回 ResultEvent 或 FaultEvent。

现在您可以创建一个实现相同接口的装饰器类。我把它命名为 PostServiceDecorator,但你最好给它起一个名字,让你知道它究竟做了什么处理。此类又包含 PostService 的实例。PostService 将 ResultEvent 传递给 PostServiceDecorator 作为参数传递的函数,后者现在可以处理该事件并将 post 对象的 ArrayCollection 传递给给定的 onResult 函数。

这样你就可以把事情分开: PostService 除了检索原始数据之外什么都不做,如果你不装饰它仍然可以这样使用。

不过,我知道有一个警告:这不是正确意义上的装饰器模式,因为您不能在使用它的代码中只用一个 PostServiceDecorator 代替 PostService。它们将不同的对象传递给回调,因此如果您替换它们,您的代码将会中断。该接口仅强制您实现两个类中的所有方法。

于 2011-05-25T09:07:00.393 回答