この機能は、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ファイルを置き換えることで実装を簡単に置き換えることができます. あなたのウェブアプリは完全に切り離されており、実装の詳細については何も知らず、インターフェースのみに依存しています。