因此,我正在编写一个个人项目以了解Web编程,并且遇到了DAO模式。我已经构建了一些类(模型),并且像几乎所有程序一样,它们都是嵌套的(例如:Payment类引用了Author实例)。 仅供参考,我没有使用任何映射器(将在以后的迭代中添加它们,并且我使用的是JDBC,而不是JPA)。
我的问题是这个:
当我创建PaymentJdbcDao时,我有一个方法将返回一些Payment,但是为了从数据库存储的对象创建此付款,我还必须联系Author(存储在单独的表中)。
我应该从PaymentJdbcDao调用UserJdbcDao以获得付款的作者,还是应该更改联接以从两个实体中检索字段的查询,还是应该让PaymentJdbcDao调用UserService(我认为这样做不好,因为服务位于daos之上的那一层),还是应该删除作者引用作为对象,而只保留对author_id的引用?
哪个住所是实现此目的的更合适方法?还是有其他更好的做法?
谢谢。
答案 0 :(得分:1)
我将我的DAO(DataAccessObjects)称为“存储库”。
Spring Data JPA也这样做。
因此,我将创建一个UserRepository和PaymentRepository。
其他存储库或服务可以调用存储库。
存储库永远不能调用服务。
UI->服务->存储库。
您的PaymentRepository可以返回这样的实体
public class PaymentEntity{
private long id;
private DateTime dateTime;
private UserEntity user;
}
您的UserRepository可以返回这样的实体
public class UserEntity{
private long id;
private DateTime lastLogin;
private List<PaymentEntity> payments;
}
您的存储库可能看起来像这样。
public interface PaymentRepository{
PaymentEntity getPaymentById(long id);
List<PaymentEntity> getAllPayments();
}
public interface UserRepository{
UserEntity getUserById(long id);
List<UserEntity> getAllUsers();
}
因此,您的PaymentRepository会调用UserRepository来获取您的付款用户。
您的UserRepository会调用PaymentRepository来获取所有用户的付款
希望我能为您提供帮助