Archive for the ‘ Software Development ’ Category

MVC2 패턴

## MVC 2 pattern
* 요청
–> http://localhost:port/memberInsert/memberinserts?name=”홍길동”&age=20
ftp://
* 뷰(JSP)
–> 1. 읽기
2. 쓰기/수정/삭제

* 컨트롤러(Servlet)
–> 1. 값 추출
2. 값 변환(form으로부터 넘어오는 모든 값의 default는 문자열)
3. 값 검증
4. 비지니스 로직 호출
5. 뷰 선택
6. 예외처리

* 모델(JavaBeans)
–> 1. 서비스
: 비지니스 로직 구현
2. 엔티티
2-1. 드라이버로딩
Class.forName(com.mysql.jdbc.Driver);
2-2. 커넥션 획득
Connection con = DriverManager.getConnection(url, user, passwd);
2-3. Statement 객체 생성
Statement stmt = con.createsStatement();
2-4. 쿼리실행
select 문
ResultSet rs = stmt.executeQuery(“select * from member”);

update, insert, delete 문
int result = stmt.executeUpdate(“insert into values()”);

2-5. ResultSet 결과 처리 (executeQuery() 쿼리 경우에만)
while(rs.next()) {

}
2-6. 자원반납
rs.close(); (executeQuery() 쿼리 경우에만)
stmt.close();
con.close();

* 응답
–> <html>
<head></head>

<body>

홍길동님 가입을 환영합니다.

</body>

</html>

**
low coupling : 결합도를 낮추고
high cohesion : 높은 응집력

J2EE 디자인 패턴

## 라이브러리 vs 컴포넌트
–> 라이브러리 : 재사용성의 의미만 가지고 있음
–> 컴포넌트 : 재사용성은 기본이고, MVC에 대한 역할이 들어감

## 컴포넌트 5가지
1. 클라이언트(.jar)
–> Model(JavaBeans)  ㅏ
2. 웹컴포넌트(.war)
–> View + Controller
3. EJB 컴포넌트(.jar)
–> Model(SessionBean + EntityBean)
4. J2EE 애플리케이션 컴포넌트(.ear)
–> 웹컴포넌트(View + Controller) + EJB 컴포넌트 (Model)
5. 리소스 컴포넌트(.rar)
–> 이미지, 오디오, 플래쉬, 기타..

## EJB 2.1
–> SessionBean(StateFull SessionBean 상대유지 세션빈, Stateless SessionBean 무상태 세션빈) + EntityBean(CMP container managements persistance (CMR) / BMP) + MessageDrivenBean
–> ejbLoad(){ }
–> ejbStore(){ }

## EJB 3.0
–> SessionBean + (JPA + JavaBeans) + MessageDrivenBean

## J2EE 패턴
Controller           –>         Business Delegate –> Session  Facade –> Model      Service

Service Locator
## OR mapping
Class :    Table = 1 : 1
Object : Record = 1 : 1
Field : Column = 1: 1


## 정리

-Presentation Tier
-Business Tier
-Integration Tier

## Presentation Tier
Intercepting Filter – http 요청을 가로채서 사전 동작 처리 후 이후 진행 여부를 판단
Front Controller – 보안, 검증 등 공통된 로직을 한 장소에서 핸들링한다.
Context Object – 상태를 여러 애플리케이션에서 공유할 수 있도록 특정 프로토콜에 한정되지 않는  방식으로 캡슐화
Application Controller – 액션과 뷰 관리를 중앙 집중하고 모듈화
View helper – 프레젠테이션 티어 로직과 관련 없는 로직을 Helper 컴포넌트로 캡슐화
Composite View – 최소 단위의 하위 컴포넌트를 집합 뷰로 생성
Service to Workers – Front Controller 와 view Helper 패턴을 혼합 형태로 Controller 가 비즈니스 처리를 요청
Dispatcher View – Front Controller 와 view Helper 패턴을 혼합 형태로 view 컴포넌트가 디스패처 역할을 하고 비즈니스 처리를 요청한다.

## Business Tier
Business Delegate – 비즈니스 서비스 접근을 캡슐화. 프레젠테이션 클라이언트와 비즈니스 서비스 간의 커플링을 줄여준다.
Service Locator – 컴포넌트 룩업과 생성을 위한 오퍼레이션을 하나의 컴포넌트에 정의함으로 코드 중복을 많이 줄이고 캐쉬 기능을 제공한다.
Session Facade – 복잡한 비즈니스 티어 컴포넌트를 캡슐화하고 원격 클라이언트에게 인터페이스를 제공한다.
Application Service – 비즈니스 로직을 Session Facade 와 Business Object 사이에 놓기 위한 중심점 제공
Business Object – 비즈니스 데이터와 로직을 서로 분리
Composite Entity – 로컬 엔티티 빈과 POJO를 이용하여 하나의 Persistent Business Objetc 로 구현
Transfer Object – 여러 개의 값을 하나의 오브젝트로 캡슐화 함으로 리모트 호출 횟수를 줄일 수 있다.
Transfer Object Assembler – 복합 Transfer Objetc 를 만든다.
Value List Handler – 클라이언트의 요구사항에 따라 쿼리 결과를 관리한다. Iterator 패턴과 유사

## Integration Tier
Data Access Object – 데이터 액세스 로직을 캡슐화한다.
Service Activator – 비즈니스 컴포넌트에게 비동기 방식으로 메시지를 전달하는 방법을 제공
Domain Store – Entity Bean 을 사용하지 않으면서 비즈니스 오브젝트에게 투명한 퍼시스턴스 메커니즘을 제공한다.
Web Service Broker – 비즈니스 서비스를 웹 서비스 형태로도 서비스 할 때 이를 유연하게 처리할 수 있는 방법을 제공

디자인 패턴 정리 1

## 객체 지향 디자인 패턴
응집도 – 하나의 클래스가 하나의 목적에 얼마나 충실하느냐를 가늠하는 척도
캡슐화 – 자료은닉,
결합도 – 하나의 클래스가 하나의 응답을 만들어내는데 있어서 몇 개의 클래스와 연동하느냐를 가늠하는 척도
구현상속 – is-a 관계에서 extends
인터페이스상속 – implements
composition – has-a 관계,
다형성 -

//Tight Coupling
class Service {
    String name = “홍길동”;
    String doService() {
        return name;
    }
}
class Client extends Service {

}

class TestClient {
    public static void main(String[] args) {
        Client c = new Client();
        System.out.println(c.doService());
    }
}

//Looser Coupling
class Service {
    String name = “홍길동”;
    String doService() {
        return name;
    }
}

class Client {
    // 클라이언트가 직접 구현하지 않고  분리
    Service s = new Service();    
    String doService() {
        return s.doService();
    }
}

class TestClient {
    public static void main(String[] args) {
        Client c = new Client();
        System.out.println(c.doService());
    }
}

//Looser Abstract Coupling
interface Service {
    String doService();
}
class ServiceImpl implements Service {
    String name = “홍길동”;
    String doService() {
        return name;
    }
}

class Client {
    // 클라이언트가 직접 구현하지 않고  분리
    Service s = new ServiceImpl();
    String doService() {
        return s.doService();
    }
}

class TestClient {
    public static void main(String[] args) {
        Client c = new Client();
        System.out.println(c.doService());
    }
}
//No Coupling

## 객체지향 디자인 패턴(Object-Oriented Design Patterns)
디자인 패턴 – 자주 발생되는 문제들을 해결할 때 일정하게 반복되는 솔루션

-디자인을 통해 얻을 수 있는 특성들

  • 유연성
  • 기능확장성
  • 시스템확장성
  • 개발효율성
  • 유지보수성
  • 안정성
  • 성능
  • 재사용성

## Object 중심의 디자인 개념

  • 응집력 – 하나의 클래스가 하나의 목적을 얼마나 충실하느냐를 가늠하는 척도
  • 캡슐화 – 자료은닉
  • 결합도 – 하나의 클래스가 하나의 응답을 만들어내는데 있어서
  • 구현상속 – is-a 관계에서 extends
  • 인터페이스상속 – implements
  • 합성 – has-a 관계에서
  • 다형성 -

## 오브젝트 중심의 디자인 원칙
Favoring Composition – 구현상속보다는 Object Composition 선호
Programming to an Interface
Designing for Change – “OCP(Open-Closed Principle)” – 기존의 소스나 구현부에 영향을 덜 주면서 새로운 기능 추가

## GoF 디자인 패턴

  • 동작(Behavioral) 패턴
  • 생성(Creational) 패턴
  • 구조(Structural) 패턴

## 동작 패턴
-오브젝트가 어떻게 상호작용하고 기능을 분할하는가에 대한 방법 종류
Strategy – 클래스 내에 관련된 알고리즘이 캡슐화되어 필요에 따라 교환
Command – 명령어들이 캡슐화 되어 명령어를 선택하여 실행한다. 실행 순서 및 방법을 별도로 관리
Iterator – 집합 객체를 종류에 관계없이 동일한 방법으로 접근
Observer – polling 방식을 사용하지 않고 관찰 대상의 상태를 관찰자에게 통지

## 생성 패턴
- 좀 더 견고한 방법으로 오브젝트를 생성하는 방법
Factory Method – 생성할 클래스를 서브 클래스에서 결정
Abstract Factory – 생성할 인터페이스를 제공하고 관련된 객체들의 여러군을 반환
Singleton – 하나의 객체만 메모리에 생성
Builder – 객체의 내용과 형태를 지정하면 복잡한 객체를 구성
Prototype – 프로토타입의 객체를 생성 후 그것을 복사하여 원하는 객체를 생성

## 구조 패턴
-객체가 서로 어떻게 연결하는가에 대한 방법
Facade – 단일 객체가 전체 하위 객체를 표현할 수 있다. 즉 서브  클래스에 대한 인터페이스 제공
Proxy – 나중에 호출될 수 있는 복합 객체를 대신하는 단순 객체를 생성한다. 즉 객체의 대리자 역할을 하는 객체를 사용한다.
Adapter – 클래스를 확장할 때 상속받는 ClassAdapter 와 연관관계를 맺는 ObjectAdapter로 구분된다.
Composite – 객체를 생성하여 단순 객체와 합성 객체로 관리될 수 있다.
Decorate – 객체의 책임을 동적으로 추가할 수 있다.