1

spring フレームワークと google app エンジンを使用して Web アプリケーションを開発しています。アプリケーションの機能をプラグ可能なモジュールとして開発できる設計パターンまたはフレームワークがあるかどうか疑問に思っています。たとえば、アプリケーションの 4 つの機能を特定しました。

  1. Oauth ログイン
  2. ユーザー プロファイル管理
  3. ユーザーグループの作成
  4. ユーザーファイル管理

今私が必要としているのは、これらすべての機能を独立したモジュールとして開発することです。これにより、それらの機能を動的に切り離し、可能な限り疎結合にすることができます。それらは、独自のデータベース実装、独自の一連のテクノロジーなどを持つことができます。そのような方法でモジュールを実装するための設計原則はありますか。

4

3 に答える 3

0

私の経験によると、MVC パターンを使用することをお勧めします。Servlet filtters1.Oauth ログインに使用します。2.ユーザー プロファイル管理 3.ユーザー グループの作成 4.ユーザー ファイル管理の要件に従って、サービス/POJO を作成し、相互に実装および注入します。

Spring AOP を知っている場合は、使用します。ポイント 2、3、および 4 の実装間でより動的な統合を実現できるようにします。

于 2014-12-01T11:27:08.370 に答える
0

MQ システム (RabbitMQ、ActiveMQ など) を見ることができます。MQ システムは中間層として機能し、疎結合を提供します。モジュール間の通信は、メッセージをキューに投稿し、投稿をリッスンすることで実装されます。

また、OSGI が役立つ場合があります。動的にロードされる可能性のあるプラグ可能なモジュールのセットとしてアプリケーションを作成する可能性を提供します。

于 2014-12-01T11:19:33.953 に答える
0

この機能は、API と実装の 2 つのコンポーネントに分割する必要があります。最初のものにはインターフェースが含まれ、2 番目にはその実装が含まれます。インターフェイスを Web アプリ コントローラーに渡し、Spring またはその他の依存性注入フレームワークを介して実装を注入します。例えば

クライアントからのリクエストを処理し、コンポーネントにデリゲートする web-app、UserController

@Component
public class UserController {
    private FileManager fileManager;

    @Autowired
    public UserController(FileManager fileManager) {
        this.fileManager = fileManager;
    }

    @GET("/user/{userId}/file/{fileId}")
    public File getUserFile(long userId, long fileId) {
        fileManager.getUserFile(userId, fileId);
    }
}

file-mgt-api では、Web アプリを実装から分離するためのインターフェイスを定義します。

public interface FileManager {
    File getUserFile(long userId, long fileId);
}

file-mgt-impl 要求されたファイルを取得する方法のすべての詳細

@Component
public class FileManagerImpl implements FileManager {
    @Override
    public File getUserFile(long userId, long fileId) {
        // get file by id from DB
        // verify that provided user is the file owner
        // do other useful stuff
        // return the file or throw exception if something wrong
    }
}

グループ、プロファイル管理、およびその他の機能についても同じことを行います。その後、単一のjarファイルを置き換えることで実装を簡単に置き換えることができます. あなたのウェブアプリは完全に切り離されており、実装の詳細については何も知らず、インターフェースのみに依存しています。

于 2014-12-01T11:54:39.007 に答える