0

我是 jsf 和 spring 概念的新手。
我有一个 xhtml 页面,可以访问 bean 类中的自定义方法。
我使用了 Delegate(服务类)和 Dao 类。
我的问题是来自bean类我应该调用委托接口方法还是委托实现方法?

项目结构如下:

  • xhtml 页面
  • bean抽象类
  • bean实现类(扩展自bean抽象类)
  • 委托接口类
  • 委托实现类
  • dao接口类
  • dao实现类
4

1 回答 1

1

我应该调用委托接口方法还是委托实现方法?

您当然可以两者都做,但是依靠接口可以避免对象之间的紧密耦合。

将接口视为一般合同,将其具体实现视为包含合同所有细节的实例。

你可以想象一个简单的案例,那就是合同服务。您可以编写一个接口,强制所有实现只遵循一种方法:getAllContacts. 所以你的界面将是:

public interface ContactBookInterface {
    public List<Contact> getAllContacts ();
}

Interface 并不关心数据如何在内部存储或数据来自何处等细节。所有这些细节都存在于实现中。您可以考虑两种实现:

public class ContactBookService implements ContactBookInterface {
    private ContactDAO contactDAO;
    ...
    public List<Contact> getAllContacts() {
        return contactDAO.findAll();
    }
}

public class ContactBookMockService implements ContactBookInterface {
    private List<Contact> contacts;
    public ContactBookMockService() {
        contacts = populateMockContacts();
    }
    ...
    public List<Contact> getAllContacts() {
        return contacts;
    }
}

现在,从程序的角度来看,您可以拥有以下托管 bean:

@ManagedBean
...
public void ContactsBean {
    private ContactBookInterface cbi;
    ...
}

有了这样的设计,具体的实现并不重要,将通过正确的依赖注入来处理。重要的是要注意,您不会使用这种方法将自己束缚于实现设计,并且您可以轻松地用新的实现替换您的实现,因为您的代码是松散耦合的。

于 2013-05-11T11:30:21.393 回答