相关疑难解决方法(0)

为什么在服务和dao层中总是有单个实现接口?

我已经/看过一些spring-hibernate Web应用程序项目,它们具有与实际服务和dao类一样多的接口.

我一直认为这两个是这些单一实现接口的主要原因:

  1. Spring可以将实际实现作为给定类中的依赖项连接(松散耦合)

    public class Person { 
        @Autowired 
        private Address address;
    
        @Autowired 
        private AccountDetail accountDetail;
    
        public Person(Address address, AccountDetail accountDetail) 
        { // constructor
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在进行单元测试时,我可以创建模拟类并单独测试类.

    Address mockedAddress = mock(Address);
    AccountDetail mockedAccountDetail = mock(AccountDetail);
    Person underTestPerson = new Person(mockedAddress, mockedAccountDetail); 
    // unit test follows
    
    Run Code Online (Sandbox Code Playgroud)

但是,最近,我意识到:

Spring可以将具体实现类连接为依赖项:

public class Person { 

@Autowired 
private AddressImpl address;

@Autowired 
private AccountDetailImpl accountDetail;

public Person(AddressImpl address, AccountDetailImpl accountDetail) { 
// constructor
Run Code Online (Sandbox Code Playgroud)

像EasyMock这样的模拟框架也可以模拟具体的类

AddressImpl mockedAddress = mock(AddressImpl);
AccountDetailImpl mockedAccountDetail = mock(AccountDetailImpl);
Person underTestPerson = new Person(mockedAddress, mockedAccountDetail); …
Run Code Online (Sandbox Code Playgroud)

java spring design-patterns domain-driven-design mocking

33
推荐指数
2
解决办法
7088
查看次数

服务层接口的使用

在我们的项目架构中,我们使用经典的 MVC 模式,包括经典的服务层(打开事务并调用 DAO 层)。

对于每个服务,我们都有一个实现和他的接口。但说实话,我很确定对于一个服务和他的接口,我们永远不会有多个实现。好吧,也许在接口中声明公共方法有助于了解服务的作用更清楚,但是一个接口用于有多个实现,如果我们知道我们不会有多个实现,我们应该保持他们?

java model-view-controller

5
推荐指数
2
解决办法
2813
查看次数