首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计多模块项目

设计多模块项目
EN

Stack Overflow用户
提问于 2011-05-18 03:47:25
回答 3查看 265关注 0票数 0

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-18 04:42:09

如果你不能让你的原始客户端ap连接到服务器,那么我建议使用下面的模块分解:

使用Java/Scala API的

  • 服务模块
  • Web服务模块,它用直接调用Java/Scala API模块的

模块包装服务模块

票数 1
EN

Stack Overflow用户

发布于 2011-05-18 04:43:18

恐怕我不能在Scala方面提供任何东西,但是就Java而言,您应该认为新服务位于应用程序的服务层,而服务的REST/SOAP/任何接口都定义在Web/Servlet层中。

假设您的com.myco.services包中有一个如下所示的服务:

代码语言:javascript
复制
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时,请求的主体可以像这样传递给控制器:

代码语言:javascript
复制
public class PersonServiceController {
    private final PersonService personService; // Inject PersonServiceImpl in constructor
    ...

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

    ...
}
票数 1
EN

Stack Overflow用户

发布于 2011-05-18 04:37:30

嗯,这就是人们使用XML和JSON所做的事情,SOA的目标是什么,SOAP是为了什么而创建的,还有像JMS之类的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6036267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档