【发布时间】:2015-02-09 05:06:11
【问题描述】:
这是关于将DTO的接口传递给DAO。
例如我有以下代码
public interface User {
String getName();
}
public class SimpleUser implements User {
protected String name;
public SimpleUser(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
}
// Mapped by Hibernate
public class PersistentUser extends SimpleUser {
private Long id;
// Constructor
// Getters for id and name
// Setters for id and name
}
我正在使用通用 DAO。如果我使用界面 User 而不是 PersistentUser 创建 DAO 可以吗?
User user = new PersistentUser(name);
UserDao.create(user);
我在堆栈上阅读了很多主题,但没有弄清楚这种方法是否可行。请帮我。也许这很愚蠢,我只能解决问题。
关于分离豆子。 我这样做是因为我想通过 API 模块共享一些类,这些类可以在外部用于创建实体并将它们传递给我的应用程序。因为它们使用我开发的接口,所以我可以将它们传递给我的 DAO 进行持久化。
【问题讨论】:
-
为什么将 DTO 用作接口而不是直接类?
-
因为当我想以最小的更改存储外部实体时,它会很有用。例如,某人可以拥有自己的用户实现,并且只传递给我的接口。
-
我仍然不明白你的确切目的。编程的一个原则是 YAGNI:你不需要它。如果您不确定这是否有用,或者它是否可以支持未计划且可能还没有必要实施的未来更改,请不要这样做。再说一次,我仍然不明白您将接口用作 DTO。使用 DTO 的直接类在您的层之间进行基本通信,对特定情况使用接口(我目前在您的问题描述中找不到)。
-
好吧,也许你是对的。如果我想隐藏从 DAO 返回的实体的 setter 方法呢?
-
如果你不打算在 DAO 调用者中使用 setter,那么就不要在那里调用它们。我仍然没有找到为 getter 创建接口的好点。