2016-11-23 7 views
0

Я вижу несколько проектов Spring-MVC, которые имеют EntityDAO, EntityDAOImpl и EntityService. Я не понимаю, что между ними другое. Например, у меня есть объект user.Как разделить EntityDAO, EntityDAOImpl и EntityService весной Mybatis?

public Class UserEntity { 
    private int userId; 
    private String userName; 
    private String userInfo; 
    // getter and setter 
} 

UserDAO:

@Repository 
public interface UserDAO { 
    @Select({"SELECT * FROM user WHERE id=#{id};"}) 
    UserEntity getById(final int id); 
} 

UserDAOImpl:

@Repository 
public class UserDAOImpl implements UserDAO { 
    @Autowired 
    private UserDAO userDAO; 

    @Override 
    public UserEntity getById(int id) { 
     return userDAO.getById(id); 
    } 
} 

UserService:

@Service 
public class UserService { 
    @Autowired 
    private UserDAOImpl UserDAO; 

    public UserEntity getById(int id) { 
     return userDAO.getByid(id); 
    } 
} 

Так что, я думаю, с помощью UserDAOImpl достаточно, зачем мне нужен UserService?

ответ

0

Сервисный уровень - это шаблон разработки программного обеспечения, который пытается отделить существующие зависимости кода и направлен на создание высокосвязных слоев кода, что делает каждый класс несущим ответственность. This answer on SO и this other answer in SE предоставляют некоторые сведения о шаблоне MVCS (Model View Controller Service) и могут также применяться к вашему вопросу.

В этом случае интерфейс UserDao бы реализацию в UserDaoImpl, потому что это гораздо проще (и лучше), чтобы построить слабо связанную систему за счет использования интерфейсов (большая чтение по этому вопросу можно найти here).

Класс UserService предоставляет множество различных методов, которые работают на объекте UserEntity. В этом случае служба будет использовать DAO для выполнения любой операции, связанной с базой данных, но также может быть использована для обеспечения других функциональных возможностей, выходящих за рамки класса DAO.

В двух словах: DAO должен выполнять только операции, связанные с подключением к базе данных. Любая другая вещь, которую вы хотите сделать с результатами, полученными из вашей БД, будет нести ответственность за обслуживание.

Общепринято разделять эти слои таким образом, что Сервисы выставляют методы, которые выполняют дополнительные операции над сущностью (или объектами), предоставляемой более простыми интерфейсами, такими как DAO. Например, если вам нужно проанализировать результаты или выполнить любую операцию сокращения сверху, это не является ответственностью DAO, поэтому она будет назначена службе.

Другое замечательное чтение, которое выходит за рамки моих объяснений и обеспечивает отличный уровень детализации по этому вопросу: Service layer vs DAO — Why both?, на бирже стеков программного обеспечения.