我是jsf和spring概念的新手 我有一个xhtml页面,可以访问bean类中的自定义方法 我使用过Delegate(服务类)和Dao类 我的问题是来自bean类,我应该调用委托接口方法还是委托实现方法?
项目结构如下:
答案 0 :(得分:1)
我应该调用委托接口方法还是委托实现方法?
你当然可以同时做两件事,但依靠你避免在对象之间紧密耦合的界面。
将接口视为一般合同及其具体实现,将其视为包含合同所有细节的实例。
你可以想象一个简单的案例,那就是合同服务。您可以编写一个界面来强制所有实现仅遵循一种方法:getAllContacts
。所以你的界面将是:
public interface ContactBookInterface {
public List<Contact> getAllContacts ();
}
接口并不关心数据如何在内部存储或者来自何处等细节。所有这些细节都存在于实现中。您可以考虑两种实现:
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;
...
}
通过这样的设计,具体实现并不重要,并且将通过依赖注入正确的实现来处理。重要的是要注意,您并没有将自己与实现设计联系起来,并且您可以轻松地将您的实现替换为新实现,因为您的代码松散耦合。