我使用GreenDao在Android上处理我的Dao。 GreenDao使用Java Application自动生成所有Dao类。因此,您不想修改类,因为您的自定义代码将在下一次运行Java App时被覆盖。
这是我目前的分离方法,似乎很接近,但非常多余:
Dao模型(自动生成):
public class Car() {
...
String mMake;
String mModel;
int mMilesDriven;
...
public String getMake() {
return mMake;
}
public String getModel() {
return mModel;
}
public int getMilesDriven() {
return mMilesDriven;
}
}
业务逻辑类:
public class CarUtil() {
Car mCar;
public CarUtil(Car car) {
mCar = car;
}
public String getName() {
return mCar.getMake() + " " + mCar.getModel();
}
public int getMilesDriven() {
return mCar.getMilesDriven();
}
}
然而,显然这看起来非常多余,因为Car()是自动生成的,并且不能拥有正确的业务逻辑(例如将汽车名称的品牌和型号组合在一起),我认为它和&# #39;必要的冗余?
我相信我的模型实现了对数据层和业务逻辑层的良好抽象,但是如何在更少的代码中使其更高效?
谢谢!
答案 0 :(得分:1)
您可以将业务逻辑放入KEEP-SECTION
- 块中。这些不会被覆盖。 (你必须告诉greendao发生器使用KEEP-SECTIONS
。)
如果您不想公开某些生成的public
方法,您还可以在生成的类上拥有一个接口,该接口只显示您想要的内容并在您的应用程序中使用该接口。
<强>更新强>
接口:
public interface CarUtil {
String getName();
int getMilesDriven();
}
实体(已生成);
public class Car() implements CarUtil {
...
String mMake;
String mModel;
int mMilesDriven;
...
public String getMake() {
return mMake;
}
public String getModel() {
return mModel;
}
public int getMilesDriven() {
return mMilesDriven;
}
// KEEP-SECTION-START
@Override
public String getName() {
return getMake() + " " + getModel();
}
}
通常你只是使用界面,所以界面和其他公共方法都被隐藏了。
根据您的需要,最好包装生成的DAO(而不是实体),以便只有DAO层知道实际的实现。