Я не вижу преимущества использования шаблона проектирования Command в этом случае.
1. Идея DAO - предоставить интерфейс, который абстрагирует механизм персистентности. Этот интерфейс традиционно определяет методы CRUD. Каждый конкретный класс DAO, как правило, реализует интерфейс DAO для определенного механизма персистентности. Например, у вас может быть одна реализация, которая хранит данные в реляционной базе данных, и другая, которая хранит данные в файле XML. Обе эти реализации могут быть взаимозаменяемыми, поскольку они реализуют один и тот же интерфейс.
2. Функциональные возможности службы могут быть разделены на отдельный уровень обслуживания. Обычно этот уровень зависит от уровня DAO (для сохранения). Интерфейс службы может быть похож на фасад, который предоставляет потенциальным клиентам бизнес-логику, реализованную в приложении (обычно логику на бизнес-уровне). Пример:
Пользовательский интерфейс DAO:
public interface UserDao {
void save(User user);
void delete(User user);
void update(User user);
User findByUsername(String username);
List findAll();
...
}
Интерфейс обслуживания пользователя:
public interface UserService {
void createUser(String username, String password);
boolean loginUser(String username, String password);
boolean isUsernameUnique(String username);
....
}
Реализация услуги:
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl(UserDao userDao){
this.userDao = userDao;
}
...
}