gpt4 book ai didi

java - Spring项目冗余类

转载 作者:行者123 更新时间:2023-11-29 03:45:05 25 4
gpt4 key购买 nike

我是第一次构建 SpringMVC 项目,只是想得到一些关于我的设计的反馈。

目前我有以下 UserDao

package org.myproj.com.dao;

import org.myproj.com.entity.User;

public interface UserDao {
public User getById(Long id);
}

这是由 UserDaoImpl 实现的

package org.myproj.com.dao;

import org.myproj.com.entity.User;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository("userDao")
public class UserDaoImpl implements UserDao{


@Autowired
private SessionFactory sessionFactory;

public User getById(Long id) {
return (User) sessionFactory.getCurrentSession().get(User.class, id);
}

}

然后我有一个服务层,UserService

package org.myproj.com.service;

import org.myproj.com.entity.User;

public interface UserService {
public User getById(Long id);
}

有了一个实现,UserServiceImpl

package org.myproj.com.service;

import org.myproj.com.dao.UserDao;
import org.myproj.com.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service("userService")
@Transactional
public class UserServiceImpl implements UserService {

@Autowired
private UserDao userDao;


public UserServiceImpl() {
}

@Transactional
public User getById(Long id) {
return userDao.getById(id);
}

}

然后我的 servlet 使用...访问它

@Autowired
private UserService userService;

User user = userService.getById(1L);

我不禁觉得我的Dao和我的Service复制了很多。我正在考虑使用服务层来添加角色等内容,而 Dao 负责业务逻辑。

你觉得这个设计怎么样?可以接受吗?

最佳答案

恕我直言,最好将业务事务的语义放入服务层,将数据端构建 block 放入 dao 层。 dao 层就是服务使用的数据 API。因此,虽然 dao 层可能有 UserDaofindByName(String username) 方法,但服务层不会。相反,服务层将有一个带有 authenticateUser(String username)SecurityService,除此之外,它会调用 userDao.findByName(username)。如果您有一个带有 addEmailAddressToUser(String username)UserDetailService,那将调用相同的 dao 方法。

关于java - Spring项目冗余类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11362306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com