0

私はこの概念に慣れていないので、「マルチモジュールプロジェクト」と呼ぶのは間違っているかもしれません。私が作成しているソフトウェアには、異なる入力と出力を持つ1つの異なるユニットがあります。このスタンドアロンモードでは他の値があるため、これを引き出して別の(Web)サービスとして実行することにしました。

ただし、以前はこのユニットとブレンドされていたアプリケーションもスタンドアロンで実行する必要があります。つまり、サービスエンドポイントを呼び出すことで、そのユニットと通信するための新しい方法が必要になります。これにより、複雑さの新しいレイヤーが追加されます(それほど単純ではないデータをXMLとJSONにシリアル化および逆シリアル化)。ソフトウェアエンジニアリングでこれに共通する慣習はありますか?他の方法でデータを送信できますか?

ソフトウェアはJVM上で実行されるScalaで書かれており、このストーリーに影響する場合と影響しない場合があります。

4

3 に答える 3

1

元のクライアントapをサーバーに接続できない場合は、次のモジュールの内訳をお勧めします。

  • Java /ScalaAPIを使用したサービスモジュール
  • サービスモジュールをRest/XML/JSONでラップするWebサービスモジュール
  • Java /ScalaAPIモジュールを直接呼び出すクライアントモジュール
于 2011-05-17T20:42:08.547 に答える
1

Scalaの面では何も提供できないのではないかと思いますが、Javaに関する限り、新しいサービスはアプリケーションのサービスレイヤーにあると考える必要がありますが、REST /SOAP/サービスへのインターフェイスはすべてWeb/サーブレット層で定義されています。

したがって、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レイヤーでは、サーブレットのURLにマップされる個別のPersonServiceControllerを使用できます。「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 に答える
0

ええと、それは人々がXMLとJSONで行うこと、SOAの目標、SOAPが作成された目的、そしてJMSなどとほぼ同じです。

于 2011-05-17T20:37:30.067 に答える