我试图创建一个模型结构,访问数据库,灵感来自Laravel的Eloquent(PHP)。
基本上我有一个名为Model
的课程,现在它只是空的。
然后我又找到了另一个名为User
的课程,该课程扩展了Model
public class User extends Model {
private String table = "users";
}
正如您所看到的,User类还有一个名为table的属性,它引用模型所代表的数据库上的表。
在Model.java
我的内部,然后尝试获取表格的名称。
到目前为止,我在我的Model.java
构造函数上运行了一些代码,我在该实例上遍历了所有字段。这给了我一个Field对象,但是我无法从Model.java
Model.java
:
public abstract class Model {
public Model()
{
List<Field> fields = new ArrayList<>();
for (Class<?> c = this.getClass(); c != null; c = c.getSuperclass()) {
fields.addAll(Arrays.asList(c.getDeclaredFields()));
}
for (Field field : fields)
{
String name = field.getName(); //returns "table"
}
}
}
总而言之,我需要的是从类扩展模型中获取表名。
有什么想法吗?或者这是一种不好的做法?
答案 0 :(得分:2)
模型应该有一个抽象方法getTableName
是的,这是不好的做法,因为一个类不应该知道继承它的类的细节。
你这样做的方式,没有合同规定子类必须实现那个字段。
通过创建一个必须由子类实现的方法,有一个明确的契约,并且您正在应用依赖项反转原则。见https://en.m.wikipedia.org/wiki/Dependency_inversion_principle
public abstract class Model {
public Model() {}
abstract String getTableName();
}
public class User extends Model() {
public String getTableName(){
return "users";
}
}