软件设计与Web服务设计

5
我即将设计我的Web服务API,我API的大部分功能基本上与我的Web应用程序非常相似。
现在的问题是,我应该创建一个单一的方法并重复使用它们用于Web应用程序和Web服务API吗?(这似乎是逻辑解决方案,然而它非常复杂;更容易的方式是复制Web应用程序使用的方法,并保持二者分开,即Web应用程序和Web服务各有一个方法。)
你们是如何做到的?
1) 重用:一个主要的方法并重用它们用于Web应用程序和Web服务应用程序(我喜欢这个方法但它很复杂)
- WebAppMethodX – 使用 –> COMMONFUNCTIONMETHOD_X - APIMethodX — 使用 –> COMMONFUNCTIONMETHOD_X
即Commonfunctionmethod_x 包含可重用的通用特性
优点:代码量少,维护成本低,bug较少。
缺点:非常复杂
2)复制:两种方法,一个方法用于Web应用程序,另一个方法用于Web服务。
- WebAppMethodX - APIMethodX
优点:简单
缺点:重复=更多的代码,更多的维护,更多的bug!
4个回答

3
您的公共 Web 服务 API 和内部应用程序 API 的使用情况很可能不同。创建一个通用的服务项目/层,并从您的 Web 应用程序和面向公众的 Web 服务 API 中使用相同的层。为您的 Web 应用程序和 Web 服务分别创建一个单独的可通过 HTTP 调用的方法。
这归结于存在以下两个问题:
1)不同的安全问题。例如,通常需要提供使用您的公共 API 的示例客户端应用程序,以便其他人可以轻松了解您提供的内容。该客户端 API 可能需要传递由您提供的已去除内部安全逻辑/内容的对象构造。 (请记住,编译后的 C# 就像反射器中的明文一样!)
2)不同的需求和限制。例如,在内部应用程序调用中,您有时会强制执行与面向公众的 Web 服务 API 不同的业务规则(通常后者的范围要受到更多限制)。
如果将业务逻辑设计到服务层中,并从您的 Web 项目和 Web 服务项目中良好地调用这些类/方法,则无需尝试混合使用情况即可实现大量代码重用。

1

一种方法是在Web服务中创建一个方法,并让您的Web应用程序调用它。

我不明白"一个主要方法"同时指什么。Web应用程序没有主方法;它们被部署到应用服务器上。

另一个需要注意的点是,您应该使用POCO接口编写您的服务。一旦这样做,部署就成为您做出的选择。


2
这是一个关于C#的问题,而不是Java,因此使用POCO而不是POJO是合适的,JAR是无关紧要的。 - Tahbaza
这些想法是一样的,但感谢您的编辑。JAR 可能不相关,但共享的 DLL 可能不是。 - duffymo

1

一种方法。否则,当你在一个中发现并修复了一个错误,然后忘记在另一个中修复它...你会哭的。


是的,这很好,需要较少的维护工作!但是它非常复杂 :( - 001
我曾经完成过非常类似的任务,而且确实需要更好的设计。我曾经在一个跨语言的云计算API上工作过。相信我,你真的想使用适配器模式。 - EnabrenTane
我正在思考现在该做什么... 这是个艰难的决定 :( - 001

0

这要看情况而定。

通常来说,我会将它们分开。这样可以消除两个高级进程之间的相互依赖性。在一个进程内重用代码是好的,但有时您希望能够在同一服务上使用不同的应用程序。

然而,如果两者高度依赖彼此,则需要重用相同的函数,以便在一个地方更改它将在另一个地方更改它。从而避免了开发过程中出现更多潜在问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接