최 적 화 된 영역 모델

/ / 두 모델 데이터 액세스 층 의 정의 부분 은 모두 같 습 니 다.
/ / getFriends () 방법 이 데이터 베 이 스 를 방문 하려 면 JDBC, Hibernate 등 서로 다른 방법 으로 이 루어 질 수 있다 고 가정 합 니 다.
/ / 여기 서 편리 함 을 설명 하기 위해 하 드 코딩 을 실현 하 는 방법 은 다음 과 같다.

/**
 *       (      DAO)
 */
public interface PersonBo {
      public List getFriends();
}

/**
 *      
 */
public class PersonBoImpl implements PersonBo{
    /**
     * or db operation
     * */
    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;
    }   
}

/**
 *         
 */
public class PersonBoFactory{
      public static PersonBo getPersonBo(){
          return new PersonBoImpl();
      }
}

/ / 첫 번 째 모델: 출혈 모델?

/*
 *            
 */
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();
    }

}

/*
 *     friends   
 */
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");
      }
}

/ / 두 번 째 모델: 빈혈 모델?
/ / 이 추상 은 출혈 모델 과 유사 하지만 한 가지 방법 이 더 있 습 니 다.

/*
 *    ,           ,      BO       
 */
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();
}

/ 빈혈 모델 의 일부분 인 것 같 지만 출혈 모델 을 계승 했다.

/*
 *            ,
 *        BO  ,     .
 *            ,      BO       
 */
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();
    }
}

/*
 *     friends   
 */
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");
    }
}

/**
상황 을 설명 하기 위해 서 두 가지 데이터 액세스 층 은 모두 같 습 니 다. 모델 Person 의 정의 가 다 르 기 때문에 testPerson 이 getFriends () 를 호출 하 는 작업 도 다 릅 니 다.
저 는 개인 적 으로 첫 번 째 Person 이 Action 이나 다른 조작 에서 PersonBoFactory 를 호출 하려 면 PersonBo 를 출력 해 야 한다 고 생각 합 니 다.
두 번 째 는 사용 하면 더욱 OO 이 고 Person 만 호출 하면 됩 니 다. 다른 BO 의 물건 은 고객 프로그래머 에 게 투명 합 니 다.
*/
/ / 오래전부터 Robbin 의 영역 모델 에 대한 토론 을 봤 는데 두 번 째 모델 이 빈혈 모델 인지 아 닌 지 모 르 겠 어 요.
/*
어떻게 보 시 는 지 모 르 겠 어 요.
업무 의 데이터 액세스 층 은 PersonBoFactory 로 격 리 되 어 어떤 위험 이 있 는 지 모 르 겠 습 니 다.
*/

좋은 웹페이지 즐겨찾기