我对这个概念还不熟悉,所以我可能把它称为“多模块项目”是错误的。在我正在制作的软件中,有一个不同的单元,具有不同的输入和输出。我决定把它拉出来,作为一个单独的(web)服务运行,因为它在这个独立模式下还有其他的值。
但问题是,以前与此单元混合的应用程序现在也必须独立运行。这意味着应该有一种新的方法让它通过调用它的服务端点来与该单元通信,这会增加新的复杂性层(将不那么简单的数据序列化和反序列化成XML和JSON)。在软件工程中有这样的通用实践吗?我可以以任何其他方式传输数据吗?
该软件是用Scala编写的,它运行在JVM上,可能会也可能不会影响这个故事。
发布于 2011-05-18 04:42:09
如果你不能让你的原始客户端ap连接到服务器,那么我建议使用下面的模块分解:
使用Java/Scala API的
模块包装服务模块
发布于 2011-05-18 04:43:18
恐怕我不能在Scala方面提供任何东西,但是就Java而言,您应该认为新服务位于应用程序的服务层,而服务的REST/SOAP/任何接口都定义在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-18 04:37:30
嗯,这就是人们使用XML和JSON所做的事情,SOA的目标是什么,SOAP是为了什么而创建的,还有像JMS之类的东西。
https://stackoverflow.com/questions/6036267
复制相似问题