ユーザーによる変更の全履歴がアーカイブされるように、エンティティのバージョン管理を含むプロジェクトに取り組んでいます。
基本的には、エンティティが作成されると、その内容のバージョン 1 もアーカイブ テーブルに保存されるという考え方です。エンティティが変更されるたびに、増分バージョンも保存されます。
エンティティの状態のアーカイブ テーブルへの保存は、 によって処理されますArchiveService
。
エンティティが永続化されている場合、バージョン 1 を作成するために ArchiveService を呼び出す必要があるため、最も論理的な方法は、リポジトリからそれを呼び出して、サービスを依存関係としてリポジトリに渡すことです。
public class Repository {
private ArchiveService archiveService;
public Repository(ArchiveService service) {
this.archiveService = service;
}
public void add(Entity entity) {
// ... (persist the entity)
this.archiveService.createVersion(entity);
}
}
これは良い習慣ですか、それとも欠点はありますか? 私がこれまで見てきたのは、リポジトリに依存するサービスであり、その逆ではありません。