在目前的主流中对POJO是比较推荐的
但是pojo也是有一些无法克服的弱点,
1.无法知道 pojo中某个字段为Null的属性是否改变过,从非Null值改为Null值
2.POJO破坏重构
在POJO中没有Map中key的概念,只有值,所以在其他地方如果需要直接使用POJO中的key时,无从下手
例如public class A{
private String a="";
public void setA(String a){
this.a=a;
}
public void getA(){
return this.a;
}
}
如果想得到A.a对应的字段名称,就必须使用字符串"a"代替.而字符串"a",在A.a重构时字符串"a"不能随着重构,而且在做相关引用时
3.在函数传递过程中使用POJO传递方法不合适
例如如果要在函数A()中需要传递两个pojo对象,则需要添加两个pojo对象参数.需要传递3个就需要添加3个pojo对象参数,etc
随着对象的不断更改需要不断的对函数a添加参数进行重构
如果是Mpojo对象就能有效改善上述缺点
Mpojo对象是将pojo的key和值放入到Map中存储
大概就是这样子
public class A{
public static a="A.a";
private Map m=new HashMap();
public A(){}
public A(Map m){
this.m.putAll(m);
}
public void setA(String a){
m.put(this.a,a);
}
public string getA(){
return String.valueOf(m.get(a));
}
public Map getMap(){
return m;
}
}
首先,如果想使A.a为空,可要直接使用A.setA(null).在保存到数据库时A.a为空由于在A的Map中有key所以可以判定此值被修改过,所以可以同步到数据库中
其次,如果想得到A.a的字段名可要直接引用A.a来使用,Java在重构时可要直接将对A.a引用的地方进行重构
最后,如果使用 function B(Map m)传递参数,就很容易就可以通过Map传递多个POJO对象
例子如下
public class C(){
public static a="c.a"
....} C结构和A相同
将A和C的实例通过B传入
Map t=new HashMap();
t.putAll(a.getMap());
t.putAll(c.getMap());
B(t){
A a=new A(t);
C c=new C(t);
}
即可以在函数B中得到原有a和c中的值
博客指出目前主流推荐的POJO存在一些弱点,如无法判断字段为Null时属性是否改变、破坏重构、函数传递时需不断添加参数等。而Mpojo对象将pojo的key和值存入Map存储,能有效改善这些缺点,还举例说明了其在数据库同步、重构及参数传递方面的优势。
188

被折叠的 条评论
为什么被折叠?



