天天看点

优化的领域模型

//两个模型数据访问层的定义部分都是一样的

//假定getFriends()方法要访问数据库,可以用JDBC,Hibernate等不同的方法实现

//在这里为了说明方便,硬编码,实现方法如下

[code]

public interface PersonBo {

public List getFriends();

}

[/code]

[code]

public class PersonBoImpl implements PersonBo{

public List getFriends(){

List friends = new ArrayList();

friends.add(new Person("york",27));

friends.add(new Person("wyork",28));

friends.add(new Person("勇",27));

return friends;

}

}[/code]

[code]

public class PersonBoFactory{

public static PersonBo getPersonBo(){

return new PersonBoImpl();

}

}[/code]

// 第一种模型:失血模型?

[code]

public class Person {

private String name = "";

private int age = 0;

public Person(String name, int age) {

setName(name);

setAge(age);

}

public void setName(String name) {

this.name = name;

}

public String getName() {

return this.name;

}

public void setAge(int age) {

this.age = age;

}

public int getAge() {

return this.age;

}

public String toString() {

return "name= "+getName()+";age="+getAge();

}

}[/code]

[code]

public class testPerson{

public static void main(String[] args){

System.out.println(">>>>>begin");

// 如果外部BO,可以在Factory里面声明protected类型

// 如PersonBoFactory.getBookBo().getBooks();

List friends = PersonBoFactory.getPersonBo().getFriends();

if(friends!=null)

for(int i=0;i<friends.size();i++){

Person friend = (Person)friends.get(i);

System.out.println(i+".friend "+friend.toString());

}

System.out.println("<<<<<end");

}

}[/code]

//第二种模型:贫血模型?

//这个抽象类似乎是失血模型,但是多了一个方法声明

[code]

public abstract class AbstractPerson {

private String name = "";

private int age = 0;

public AbstractPerson() {

}

public AbstractPerson(String name, int age) {

setName(name);

setAge(age);

}

public void setName(String name) {

this.name = name;

}

public String getName() {

return this.name;

}

public void setAge(int age) {

this.age = age;

}

public int getAge() {

return this.age;

}

public String toString() {

return "name= "+getName()+";age="+getAge();

}

//注意啦!!!

public abstract List getFriends();

}

[/code]

//似乎是贫血模型的一部分,但是又继承了失血模型

[code]

public class Person extends AbstractPerson {

public Person(){

super("",0);

}

public Person(String name, int age) {

super(name, age);

}

public List getFriends() {

return PersonBoFactory.getPersonBo().getFriends();

}

}

[/code]

[code]

public class testPerson{

public static void main(String[] args){

System.out.println(">>>>>begin");

// 不用调用BO,业务测是透明的,只知道Person中有这个方法

List friends = (List)(new Person()).getFriends();

if(friends!=null)

for(int i=0;i<friends.size();i++){

Person friend = (Person)friends.get(i);

System.out.println(i+".friend "+friend.toString());

}

System.out.println("<<<<<end");

}

}

[/code]

//很久以前就看过Robbin关于领域模型的讨论了,不知道第二种模型是不是贫血模型?

继续阅读