2010-05-18 51 views
0

我正在从事web项目。我们使用flex作为UI层。我的问题经常是我们正在与web/UI层分开编写核心服务层,因此我们可以针对不同的UI层/技术重复使用相同的服务。因此,实际上可以重复使用相同的核心层服务,而不必在API中使用不同类型的UI技术/层进行任何更改/添加。对于例如支持同步请求响应(例如jsp等)和非同步或事件驱动的UI技术(例如Ajax,Flex,GWT等)或多个设备(如计算机,手机,PDA等)的UI技术相同的核心服务层。 。就我个人而言,我觉得编写核心服务层非常困难,没有任何UI知识。寻找其他人的想法。在web项目中,我们可以在不知道UI的情况下编写核心服务层吗?

回答

1

我的问题是很多时候我们都分开 网/ UI层写 核心服务层,所以我们可以重复使用不同的UI 层相同 服务/技术

服务层应该是不可知的UI,所以这实际上非常好。

例如,与支持 同步请求响应 UI技术相同的核心服务层(例如 JSP等)和非同步或事件驱动的 UI技术(例如Ajax的,柔性, GWT等)或与多个设备 像(计算机,手机,PDA等)。

在服务层中暴露的业务操作理论上应该不依赖于谁调用它以及哪种技术。但你似乎面临着常见的症状:

  1. 不同的UI做实际需要略有不同业务操作(如返回可用于移动和非移动呼叫者不同的数据量)
  2. 商业运营被加上远程技术(例如同步和异步)

对于1,你必须问自己的问题是你是否可以优雅地这些因素略有不同的操作,或者相反,如何优雅地暴露相同操作的变体。在这两种情况下,应该可以设计出一致的服务API并满足各种客户的需求。

对于2.您必须问自己的问题是如何将业务操作与远程技术分离。可以引入桥或适配器或额外的中介层,但不应导致过度工程设计。

我知道有时很难将业务操作与实际使用完全分离。让我们考虑一下分页:如果业务操作是“我想要查询X的数据”,那么具体的操作也会嵌入UI的一些知识,即分页。

我只能提供一般性建议:在数据,格式等方面争取明确区分UI和业务,如果不能,则尝试弄清楚最通用的API,所有客户。

我个人觉得它非常艰难的 写入核心服务层没有UI的任何 知识。

我同意这是很难的时候,但是你似乎是这样做的权利 - 所以继续这样:)

1

根本不了解UI就不难写出核心服务。

核心服务只需要知道需要什么数据来执行他们的任务(它来自哪里并不重要)。

一旦您设计了核心服务,您就可以在它们之上构建几个不同的UI,收集必要的数据并将其传递给服务......然后执行其特定的职责。

+0

假如我是个面向Flex编写核心服务(或任何UI技术,异步通信工程)那么由于异步性质,它期望原始VO返回响应,但是如果我正在为jsp编写核心服务(或者用于同步通信的任何UI技术),则由于同步通信原始VO不需要响应。这只是想。我面临同样的困难。所以如果我错了,你可以纠正我。 – 2010-05-18 15:59:11

+1

我已经写过我在jsp中使用的服务,flex应用程序和sharepoint。如果你正在围绕你的用户界面甚至用户界面技术设计你的基本服务,那么你做得不对。 ;) 即使我已经写了几个巨大的Flex项目,但我从未注意到它需要传回的相同数据结构,事实上我确定它不是。 – mezmo 2010-05-18 19:23:22

+1

我想对我之前说过的内容做一点点扩展。为了加快速度,我有时会在我的服务层中添加方法,以在某些情况下聚合服务调用。在我的情况下,这是一个Flex模块,必须填充25个组合框,BlazedDS将收集一定数量的呼叫并在后端一起发布,因为我的组合需要大约15秒。我添加了一个方法到我的服务层,它返回一个数组,其中包含所有25个组合结果,这需要3秒左右。所以核心服务并没有真正改变,但现在它变得更快了。 – mezmo 2010-05-19 13:28:09

2

这当然是可能的。服务层通常是无状态的,所以它只是提供了一些方法,用来自UI的参数来调用。您可以将其想象为您从UI层调用的API。重要的是而不是来传递任何与UI相关的参数。例如,不要通过HttpServletRequestHttpSession作为参数 - 获取所需的值并传递它们。

相关问题