셋째날 첫 세션이다. 나도 다른 사람들처럼 실시간 블로깅을 해본다. 사실 계속 하고 싶지만 배터리가 딸리는게 문제다. 무선랜도 되면서 10시간 이상 가고 그러면서 폭발하지 않는 노트북은 과연 나올 수 없는 건가.

AOP는 Domain Objects에 technology serivce를 제공하는 역할을 한다.

그 유명한 Pure Domain Objects -> Crosscutting concerns -> Service layer -> AOP in service layer -> AOP as service layer  다이어그램이 나온다. Ramnivas는 그의 책 AsepctJ In Action에서도 그랬지만 참 알기 쉽게 설명을 잘 한다. 강한 인도억양을 가지고 있지만 그래도 이렇게 잘 하는 것을 보면 나도 희망이 없지는 않을거란 생각이 든다.

Service layer를 overuse하는 것은 다음의 세가지를 보면 알 수 있다.

  • DAO를 많이 inject하는 것. Service layer만이 tx를 관리하는 곳이라는 생각.
  • Business logic을 독점적으로 사용하는 것
  • Technology를 위해서 service layer를 사용하는 것

Fine grained DI가 필요하다. 내가 개발했던 시스템에는 Dao inejction이 10개 이상되는 service object도 많았다. POJO를 사용했지만 결국엔 복잡하고 지저분해지는 service layer가 된 것이다. Service layer는 domain object를 coordination하는 방식으로 사용해야 한다.

Services, Factories, Repositories를 DO에 inject할 수 있다.

  • Service object는 infrastructure service를 위해서
  • Factories는 domain object생성을 위해서
  • Repository는 persistent domain object의 reference를 얻기 위해서

Object와 Association기반의 rich behavior의 문제점

  • Cross aggregate
  • Computation efficiency
  • Clustering difficulties

대안은 repository에 의지하는 방법이라고 한다. 흠.. transparent persistent의 장점을 잃는 것이 아닌가 싶기도 하지만 성능이나 의존성, 분산등의 문제를 해결할 수 있는 방법일 것 같다. 특히 t.persistent를 지원하지 않는 jdbc, ibatis기반의 dao를 사용할 때는 유용한 모델이 될 것으로 보인다.

Ramnivas의 접근방법은 그래서 Keith와는 좀 다르다. Keith는 service layer만이 repository를 사용하는 구조고 domain layer는 pojo기반의 t.persistent를 이용하는 방법에 유용하다. Ramnivas의 방법은 좀 더 현실적인 것 같다. 하지만 순수한 unit test에는 어려움이 있을 것 같다.

Computation efficiency는 one-to-many에서 many쪽의 sum을 계산하는 경우를 생각해보면 알 수 있다. Association base에서는 모든 entity를 가져와 일일히 +연산을 해야한다. 하지만 Repository based인 경우라면 SQL의 sum()을 써서 바로 가져올 수 있다. 물론 Hibernate와 같은 고급ORM은 이런 문제에 대한 대안이 있긴하다. 역시 개념적으로는 repository based가 되지만 사용은 t. persistent방식으로 해결할 수 있다.

DDD의 매력중의 하나는 fluent interface를 잘 활용해서 DSL방식의 코드를 만들 수 있다는 점이다.

Order.newOrder().with(1, “TV”).with(2, “Monitor”); 같은 식이다.

DO에 services, factories, repositories를 삽입하는 가장 좋은 방법은 Spring AOP confiuration을 이용하는 것이다.

Alternative services라는 개념도 흥미롭다.

Around join point를 이용해서 여러개의 서비스를 retry하게 할 수 있다. 일반적이지는 않지만 응용가능한 분야가 있을 것 같다. HA시스템이나 MC시스템에 적용할 케이스가 있을 것 같다.

를 이용하면 손쉽게 alternative service list를 등록해서 사용할 수 있다.

하지만 자칫하면 business logic이 aspect에 들어갈 수 있는 위험이 있다고 생각된다. 잘 구분해서 사용하는 지혜가 필요하다.

하지만 Aspect자체를 serivce로 이용하는 방법도 생각해볼 수 있을 것 같다. Aspect를 꼭 crosscutting concern에만 적용할 이유는 없어보인다. 필요하면 intercepting을 통한 business logic의 삽입에 응용 할 수도 있을 것이다.

Policy enforcement는 또 다른 응용분야이다.

오브젝트의 생성을 factory만으로 제한하는 것도 쉽게 가능하다. 물론 생성자를 private로 만들고 내부에 factory method를 넣는 방법도 있지만 정책을 plugging할 수 있다는 면에서 aspect를 이용한 policy enforcement가 훨씬 더 효과적이다. 필요하면 코드의 변경 없이 정책을 쉽게 변경할 수 있으니까.

전에 물개가 질문해서 특정한 caller만 호출을 할 수 있게 제한하는 방법을 설명해준 적이 있다. 그때는 around interceptor를 써서 Thread의 call stack을 체크하는 방법을 알려줬는데. 이제보니 간단한 aspectj pointcut정의로 가능하다. 물론 Spring2.0을 쓰는 경우만 가능하고 SpringAOP만 써야 하는 경우라면 원래 방법뿐이겠다.

Aspect를 이용한 Domain object의 Acl기법은 정말 환상적이다. DO의 오염을 막을 수 있는 편리한 방법이다.

AbstractDetectAggregateContamination aspect를 확장해서 만들면 된다.

pointcut inCustomerRoot() : within(domaincustomer..*) 이런 식으로 정의한뒤 declare error문을 통해서 걸러낼 수 있다.

AspectJ5의 장점 중의 하나는 Annotation을 이용해서 pointcutting을 쉽게 할 수 있다는 것이다. 복잡한 pointcut expression을 쓸 필요가 없고 손쉽게 pointcutting이 가능하다. 예를 들어 DDD의 aggregate do라면 @AggregateRoot라는 annotation을 달고 AOP로 여러가지 기능을 적용하거나 사용의 제한을 가할 수 있다.

Intention-revealing interface라는 개념도 흥미롭다. 기존에 soft, document requirement를 enfoced, codded rules로 적용할 수 있다는 것이다.

Interface안에 static aspect를 삽입하는 방식으로 손쉽게 가능하다. 예를 들어 null collection을 허용하지 않는 rule을 일괄적으로 적용할 수 있다.

DDD에서 Service layer의 여할에 대해서도 다시 정리해주고 있다. 이제 좀 개념이 확실히 잡하는 것 같다.

Service layer는 infrastructure service를 위해서 쓰거나 multiple entity의 coordinating에 사용하면 된다.

DDD의 적용전략과 DDD가 아닌 시스템을 DDD로 refactoring하는 방법도 설명. 헉.. 너무 진도가 빠르다. 시간이 다 됐나보다.

DDD는 software complexity를 줄이기 위한 것이다. 대신 지식은 매우 complex해질 수 있겠지만.

 

 

 

 

Related posts:

  1. TSE2006 넷째날 두번째 세션 – ROO
  2. TSE2006 넷째날 세션1 – Meeting Requirements through Acceptance and Stress Testing
  3. Enterprise Wiki – Confluence 분석
  4. Spring ROO 대충대충 분석 (4) ROO의 미래와 의의
  5. J2EE Development without EJB (3) – Architecture
  6. The Spring Experience 둘째날
  7. Domain Model vs. DTO
  8. Spring 3.0 (11) Aspects 모듈의 선택 라이브러리 분석

Facebook comments:

to “TSE2006 셋째날 세션1 – Applying DDD int the Enterprise with AspectJ”

  1. DDD 에 관한 내용을 검색하다가… 글 남깁니다. 그런데 DDD에 관한 내용이 아니라.. -.-

    무선 LAN + 10시간 그기다 튼튼하고 가벼운 노트북 있습니다. 파나소닉 Lets note T5 시리즈..

  2. thank you for share!

  3. good articles

  4. You Can Find Out MORE
    [url=http://www.bright-union.com/member/nopicee.php?/how-to-tell-if-a-moncler-vest-is-fake-are-so-popular-with-so-many-women-2013.html]how to tell if a moncler vest is fake-Are so popular with so many women 2013[/url]
    how to tell if a moncler vest is fake-Are so popular with so many women 2013

  5. Why Not Look HERE
    [url=http://mensbootsoutlet.com]mens ugg slippers[/url]
    mens ugg slippers

  6. Have A Peek At THIS Web-Site
    [url=http://bootssaleukonline.com]ugg sale uk[/url]
    ugg sale uk

  7. cheap mbt shoes online TSE2006 셋째날 세션1 – Applying DDD int the Enterprise with AspectJ » Toby’s Epril

  8. Hello Web Admin, I noticed that your On-Page SEO is is missing a few factors, for one you do not use all three H tags in your post, also I notice that you are not using bold or italics properly in your SEO optimization. On-Page SEO means more now than ever since the new Google update: Panda. No longer are backlinks and simply pinging or sending out a RSS feed the key to getting Google PageRank or Alexa Rankings, You now NEED On-Page SEO. So what is good On-Page SEO?First your keyword must appear in the title.Then it must appear in the URL.You have to optimize your keyword and make sure that it has a nice keyword density of 3-5% in your article with relevant LSI (Latent Semantic Indexing). Then you should spread all H1,H2,H3 tags in your article.Your Keyword should appear in your first paragraph and in the last sentence of the page. You should have relevant usage of Bold and italics of your keyword.There should be one internal link to a page on your blog and you should have one image with an alt tag that has your keyword….wait there’s even more Now what if i told you there was a simple WordPress plugin that does all the On-Page SEO, and automatically for you? That’s right AUTOMATICALLY, just watch this 4minute video for more information at. Seo Plugin

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha