0

我正在 Spring 和休眠中开发一个 Web 应用程序。我在数据库中加载实体。作者、书籍、出版物等是我从 excel 中加载的实体。我有模式一实体加载服务接口,然后我有每个实体的实现。我的服务调用 DAO 实现。现在我正在努力寻找下面提到的代码是否违反了 SRP。 另外,我总是对如何确定类的责任感到困惑,因为任何类都可以有很多方法,并且每个方法都可以执行不同的操作。那么它们应该在不同的类中分开吗?. 以我为例,我有 4 种方法,每种方法执行不同的任务。因此,每种方法都有 4 个不同的类。如果我遵循这种方法(我知道这是错误的),那么我总是会在具有单一方法的类中结束。此外,有时我觉得我正在远离领域驱动设计,因为我在功能的基础上重构代码。

关于如何从班级的角度决定责任的任何建议?SRP 代表单一责任原则。我在确定这个责任时真的很困惑。

public interface EntitiesLoadService {

    public void loadEntities(Object o);
    public  void deleteEntities(Object o);
public List getEntities();
public Object getEntity(Object o);

}

服务实施

@Service("authorLoadService")
@Transactional
public class AuthorEntityLoadService implements EntitiesLoadService{

    private AuthorDAO authorDao;





    @Autowired
    @Qualifier("authorDAO")
    public void setAuthorDao(AuthorDAO authorDao) {
        this.authorDao = authorDao;
    }

    @Override
    public void deleteEntities(Object o) {
        // TODO Auto-generated method stub

    }

    @Override
    public void loadEntities(Object o) {
        Set<author_pojo> author=(Set<author_pojo>)o;
        Iterator<author_pojo> itr=author.iterator();

        while (itr.hasNext()) {
            author_pojo authorPojo = (author_pojo) itr.next();
            authorDao.save(authorPojo);

        }


    }

    @Override
    @Transactional(readOnly=true)
    public List getEntities() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    @Transactional(readOnly=true)
    public Object getEntity(Object o) {
        String author=(String)o;
    author_pojo fetAuthor=authorDao.findOneByName(author);

        return fetAuthor;
    }

}
4

2 回答 2

2

你有AuthorDAO哪个类应该与持久层进行所有交互,例如。一个数据库。

在您的示例中并不明显,因为您AuthorEntityLoadService有类似的方法,它们只是委托给 DAO 层。

随着您的项目和需求的增长,您将看到此类需要更多方法。这些方法将负责在 DAO 层上执行的不仅仅是 CRUD 操作。他们可能需要与其他内部或外部服务进行交互。他们可能需要进行多次 DAO 调用。

在这种情况下,单一职责是提供与AuthorEntity实例交互的服务。

它是实现您所提议的许多正确方法中的一种。


更具体地说,我对

另外,我总是对如何确定类的责任感到困惑,因为任何类都可以有很多方法,并且每个方法都可以执行不同的操作。那么它们应该在不同的类中分开吗?

仅仅因为你有很多方法做不同的事情,并不意味着责任没有分担。AuthorEntityLoadService我只是称之为AuthorEntityService管理AuthorEntity服务层的实例。图像,如果你有一个类,每个类都有一个方法用于创建、更新、检索、删除一个AuthorEntity. 那没有多大意义。

并且在

关于如何从班级的角度决定责任的任何建议?

作为进一步阅读,请尝试http://java.dzone.com/articles/defining-class-responsibility

于 2013-09-16T21:31:12.770 回答
2

通常,在这种类型的 n 层架构中,您的服务层旨在提供事务性(或其他依赖于资源的)操作的 API。每个服务的实现都可以使用它需要的任何特定于资源的依赖项(例如特定数据源的 DAO),但它允许服务使用者不知道这些特定的依赖项或资源。

因此,即使您的服务只是委托其特定于资源的依赖项,它也不会违反 SRP,因为它的职责是定义与资源无关的 API(这样消费者就不需要知道所有特定于资源的东西)指定原子操作(如有必要,事务性)。

于 2013-09-16T21:38:32.437 回答