0

我是这个概念的新手,所以我将其称为“多模块项目”可能是错误的。在我正在制作的软件中,有一个具有不同输入和输出的不同单元。我决定将其拉出并将其作为单独的(Web)服务运行,因为它在此独立模式下具有其他值。

但问题是,以前与该单元混合的应用程序现在也必须独立运行。这意味着它应该有一种新的方式通过调用它的服务端点来与该单元通信,这增加了新的复杂层(将不太简单的数据序列化和反序列化为 XML 和 JSON)。在软件工程中是否有这种常见做法?我可以通过其他方式传输数据吗?

该软件是用 Scala 编写的,它在 JVM 上运行,可能会也可能不会影响这个故事。

4

3 回答 3

1

恐怕我无法在 Scala 前端提供任何东西,但就 Java 而言,您应该将新服务视为位于应用程序的服务层,而 REST/SOAP/Whatever 服务的接口是在 Web/Servlet 层中定义。

因此,假设您的 com.myco.services 包中有如下服务:

public interface PersonService {
    public Person createPerson(PersonIdentifier id, PersonType type);
    public Person retrievePerson(PersonIdentifier id);
    public void updatePerson(Person existingPerson);
    public void deletePerson(Person existingPerson);
    public boolean authenticatePerson(String personName, String password);
}

我们会认为你有一个 PersonServiceImpl 实现来更新你的数据库或其他任何东西。在同一 JVM 上的应用程序中,您可以将 PersonServiceImpl 注入代码并直接调用方法,而无需编组或解组参数。

在 Web 层中,您可以有一个单独的 PersonServiceController,它映射到您的 servlet 中的 URL。当像“http://myco.com/person/update”这样的 URL 被点击时,请求的主体可以像这样传递给控制器​​:

public class PersonServiceController {
    private final PersonService personService; // Inject PersonServiceImpl in constructor
    ...

    public void updatePerson(String requestBody) {
        Person updatedPerson = unmarshalPerson(requestBody);
        this.personService.updatePerson(updatedPerson);
    }

    ...
}
于 2011-05-17T20:43:17.987 回答
1

如果您无法让原始客户端 ap 连接到服务器,那么我建议您使用以下模块细分:

  • 带有 Java/Scala API 的服务模块
  • 使用 Rest/XML/JSON 包装服务模块的 Web 服务模块
  • 直接调用 Java/Scala API 模块的客户端模块
于 2011-05-17T20:42:08.547 回答
0

嗯,这几乎就是人们对 XML 和 JSON 所做的事情,SOA 的目标是什么,创建 SOAP 的目的,以及 JMS 之类的东西等等。

于 2011-05-17T20:37:30.067 回答