今天在看Hibernate的1对多关系的时候,发现了一些比较有意思的事情。
PersonOperator po = new PersonOperator();
Person p = new Person();
p.setName("AAAA");
p.setAddress(new HashSet());
Address a1 = new Address();
a1.setName("地址1");
a1.setPerson(p);
p.getAddress().add(a1);
Address a2 = new Address();
a2.setName("地址2");
a2.setPerson(p);
p.getAddress().add(a2);
Address a3 = new Address();
a3.setName("地址3");
a3.setPerson(p);
p.getAddress().add(a3);
po.add(p);
其中的Person类和Address类存在1对多的关系,属于POJO类
PersonOperator 属于控制类,应该也可以说是DAO类。
这里想讲的对代码书写的感悟:
PersonOperator po = new PersonOperator();
Person p = new Person();
p.setName("AAAA");
p.setAddress(new HashSet());
Address a = null;
a = new Address();
a.setName("海淀区");
a.setPerson(p);
p.getAddress().add(a);
a = new Address();
a.setName("朝阳区");
a.setPerson(p);
p.getAddress().add(a);
a = new Address();
a.setName("苏仙区");
a.setPerson(p);
p.getAddress().add(a);
po.add(p);
此代码和上面的代码从功能上看都是一样的。
不过上述代码让本人感觉有更深的含义,
使用同一个变量名,来初始化Address重某种意义上也可以说达到了复用的目的。
好处如下:
1.避免了对变量的取名。
2.在copy的时候是最直接有效的。
如使用
Address a1 = new Address();
a1.setName("地址1");
a1.setPerson(p);
p.getAddress().add(a1);
来copy很可能出现如下情况
Address a1 = new Address();
a1.setName("地址1");
a1.setPerson(p);
p.getAddress().add(a1);
Address a2 = new Address();
a1.setName("地址2");
a1.setPerson(p);
p.getAddress().add(a2);
如上情况就出现了a2没有设置name的和Person的情况。
以至于打开控制台来回的查找错误。
总结:
代码需要不断的重构,不仅仅是从设计还要从平时的写代码的习惯和书写方式上。要带有一种重构的思想去写代码。