私は DDD を実践しようとしていますが、以下に書いたこのタイプのルールには疑問があります。
ドメイン層の下のクラス UserAggregator。
public class UserAggregator{
private UUID userId;
private String userName;
private String country;
//getter
boolean isUserNamePatternCorrect(){
return this.userName.startsWith("TOTO");
}
}
ドメイン層の下のリポジトリ インターフェイス。
public interface UserRepository {//User Table
public UserAggregator findUser(UUID id);
public void deleteUser(UserAggregator userToARchive);
}
public interface ArchiveUserRepository { //ArchiveUser Table
public archiveUser(UUID id);
}
UserRepository/ArchiveUserRepository は、Spring データを使用してインフラストラクチャ レイヤーの下に実装されます。
インフラ層の下のサービス。
public class MyService {
@Autowired
UserRepository userRepo;
@Autowired
ArchiveUserRepository archiveUserRepo;
public void updateUserName(UUID userId){
UserAggregator userAgg = userRepo.findUser(userId);
if(Objects.nonNull(userAgg)){
boolean isCorrect = userAgg.isUserNamePatternCorrect();
if(!isCorrect){//-----------------------------1
userRepo.deleteUser(userAgg);//-----------2
archiveUserRepo.archiveUser(userAgg);//---3
}
}
//....
}
}
私の管理ルールは、userNameがパターンと一致しない場合、ユーザーをアーカイブテーブルにアーカイブし、ユーザーテーブルから削除すると述べています。
お気づきのように、ルール (//1 から //3 まで) はサービス クラスに記述されており、アグリゲーターには記述されていません!
これは正しいです ?またはこれを管理する方法は?