도메인 객체란
Domain Object == Transfer Object == Value Object
이게 다 같은 의미 인가요?
저도 헷갈리네요
보통 도메인의 의미은 업무적의미를 갖는데 Business Domian Object
이런거입니다. facade object, value object 이 모두를 광의의미로 도메인
오브젝트를 칭하지 않나 하는 생각이 드네요 즉 스프링프레임워크의 클라이언트
입장의 업무클래스 전부를 ...
도메인 객체는 비즈니스 엔티티를 표현하는 녀속이고, TO는 계층간 데이터 전송, VO는 값이 한번 설정되면 변경될 수 없는 객체로 보는 게 맞는 것 같습니다.
도메인 객체가, TO가 되고, TO가 VO로 표현되기도 하고 TO랑 VO를 따로 용어구분하지 않고 섞어 쓰기도 하지만 구분해줘야 하지 싶네요.
도메인 객체, 비즈니스 엔티티 같은 단어 바꿔쓴 말장난 같아서 덧붙이면, 비즈니스에서 표현될 수 있는 어떤 성질을 객체로 표현한거라고(예: 계좌) 봐야겠지요
사실 Core J2EE Patterns, 2nd에 보면 VO랑 TO랑 구별하지 않고 사용합니다.
다만, 테스트 주도 개발(TDDBE) 책을 보면 뒷 부분에 Value Object Pattern을 설명하고 있고, 의도한 바는 한 가지 값을 나타내는 객체의 표현이라 값을 변경할 수 없습니다.
TO가 패턴 맞을거에요. 가물가물. 뷰랑 컨트롤러 단에 왔다리 갔다리 하는 녀석도 TO라고 하니 퍼시스턴스단에만 해당하지는 않는 듯 합니다.
Domain Object = Data + Control Logic
입니다..
Value Object에 handling할 수 있는 것이 필요하죠(VO=TO는 대략 일반적으로 같이 쓰죠)
Kent beck 같은 냥반(OOP를 매우 강조하는 사람들)은
데이터 있는 곳에 로직 있다고 하지만..
DB에 대한 제약 사항이 있는 웹 프로그래밍에서는
진정하게 데이터 있는 곳에 로직 있게 작성하는 게 힘들죠..
OR mapping에서 시도하고 있으나 아직은 완벽하지 못하고요..
그래서 VO + Transaction Script(이건 마틴 파울러 아저씨 용어고, 우리는 보통 DAO + SQL)이 일반적인 모델이라고 할 수 있습니다..
VO는 immutable하냐 안하냐의 문제도 이견이 있습니다만..
저 개인적으로는 도메인 모델 같이 logic이 같이 포함되는게 아니라면
immutable 한게 맞다고 생각합니다..
출처 - http://www.okjsp.pe.kr/seq/122225
===================================================================================
도메인 객체의 발전사
먼저 도메인 객체에 대해 잘 모르는 사람들을 위해 이 오브젝트를 조금 자세히 설명할 필요가 있다.과거 자바가 웹의 영역에 드러서기 시작하면서 다른 플랫폼들과 소통하기 위한 장치가 필요했는데 그것이 바로 JSR-000220, 자바빈즈였다. 자바빈은 본래 다양한 목적으로 설계되었으나 지금은 대부분이 외부 리소스를 담는 그릇같은 용도로 사용되고 있으며, 빈 생성자를 가지며 내부에 private로 설정된 프로퍼티에 get…, set…과 같은 명명규칙을 갖고 있는 클래스를 일컫는다.
public class User {
private String id;
private String password;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
…중략…
}
public class User {
private String id;
private String password;
private String name;
public int getToken() {
return getId() + getPassword();
}
… 중략…
}
public class User {
private String id;
private String password;
private String name;
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public int getToken() {
return getId() + getPassword();
}
public String getId() {
Assert.hasText(id);
return id;
}
public String getPassword() {
if(password==null) return userDao.getPassword(id);
else return password;
}
… 중략 …
}
출처 - http://springmvc.egloos.com/542467
'Framework & Platform > Spring' 카테고리의 다른 글
Spring Security 이해 (1) | 2012.05.23 |
---|---|
Spring - @mvc -@Pattern (0) | 2012.05.23 |
spring - @SessionAttributes 와 SessionStatus (0) | 2012.05.21 |
Spring - Validation (0) | 2012.05.21 |
spring - Validator (0) | 2012.05.21 |