블로그 이미지
Max.

calendar

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

Notice

'ITDs'에 해당되는 글 1

  1. 2009.08.22 Spring Roo ITDs의 가독성
2009.08.22 14:48 개발관련

Spring Roo는 도메인 객체를 여러 ITDs로 분리함으로 도메인 객체의 복잡성을 체계화여 직관성을 높여줌으로써 개발의 효율성을 주고자 했던것이 ITDs를 이용하게된 Roo의 전략이라 할수 있습니다.

문제는 이런 복잡성은 사라지지 않고, 잘 조직되어 있다는게 문제입니다. ITDs로 조직됨으로써 필연적으로 Aspectj를 이용한 *.aj파일들이 생성되는데, 그 언어적 특성상 해당 소스코드는 일반 자바코드 보다 복잡하게 보입니다. 물론 자바를 알고 있으면 해독하는데 큰문제는 아니지만, 가독성에 직관화를 해치는건 어쩔수 없이 느껴지게 됩니다. 예를 들어 아래 코드는 일반자바 코드와 비교해도 사용되는 텍스트수가 좀 지나치다 싶은 생각을 지울수 없습니다.

Article_Roo_Entity.aj :

privileged aspect Article_Roo_Entity {
    @javax.persistence.PersistenceContext   
    transient javax.persistence.EntityManager Article.entityManager;    
    @javax.persistence.Id   
    @javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)   
    @javax.persistence.Column(name = "id")   
    private java.lang.Long Article.id;    

    ...(생략)....

    public static javax.persistence.EntityManager Article.entityManager() {   
        javax.persistence.EntityManager em = new Article().entityManager;       
        if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");       
        return em;       
    }   
   
    public static long Article.countArticles() {   
        return (Long) entityManager().createQuery("select count(o) from Article o").getSingleResult();       
    }   
   
    public static java.util.List<net.max.article.domain.Article> Article.findAllArticles() {   
        return entityManager().createQuery("select o from Article o").getResultList();       
    }   
   
    public static net.max.article.domain.Article Article.findArticle(java.lang.Long id) {   
        if (id == null) throw new IllegalArgumentException("An identifier is required to retrieve an instance of Article");       
        return entityManager().find(Article.class, id);       
    }   
   
    public static java.util.List<net.max.article.domain.Article> Article.findArticleEntries(int firstResult, int maxResults) {   
        return entityManager().createQuery("select o from Article o").setFirstResult(firstResult).setMaxResults(maxResults).getResultList();       
    }     
}

*.aj파일은 자동으로 생성되고, 관리되어 지기 때문에 직접 수정하는 일은 추천되지 않습니다. 그러나, 해당 소스를 들여다 볼일이 생기는건 어쩔수 없고, 그렇다면, 해당 코드를 좀더 직관적으로 이해할수 있게 하려는 노력이 필요할듯 합니다. (Roo로 몇가지 예제를 만들어 보면, aj파일을 안 볼수 없게 만듭니다.) 

다행히도 이러한 점에 대해 Tomas Salfischberger가 약간의 재미있는 아이디어를 냈습니다. 코드블럭({code})으로 감싸서 마치 자바코드 처럼 보이게 한다는 것 같은데요. 아직 10여일이 지나도록 멘트가 없는걸 보니 살짝 불안한데, 받아들여질지 지켜봐야 겠습니다. 그가 말한 코드는 아래처럼 한다는 것입니다.

Pizza_Roo_Entity.aj:

{code}
    private java.lang.Integer Pizza.version;

    public Integer Pizza.getVersion() {
        return this.version;
    }
    
    public void Pizza.setVersion(Integer version) {
        this.version = version;
    }
{code}

이정도면 가독성에 크게 문제가 없을듯 하니다.

그리고, 영어가 짧으면, 인내는 길어지는 법인가 봅니다.예전부터 Roo에 대한 버그를 많이 접했는데, 이를 알려줄 방법(?)이 없어서, 누군가 그 버그를 찾아내거나, 지적해 줄때까지 참고, 인내하는 것이 생활이 되는것을 느끼고 있습니다. 학원이라도 다녀야 할듯 합니다.
신고

'개발관련' 카테고리의 다른 글

Roo addon-web-mvc-jsp  (0) 2009.09.02
쉬운것 과 어려운것  (5) 2009.08.27
Spring Roo ITDs의 가독성  (0) 2009.08.22
김대중 전 대통령의 서거를 기록한다  (4) 2009.08.20
휴가  (2) 2009.08.07
Spring Roo 잡소식  (8) 2009.07.30
posted by Max.
TAG , , ,
prev 1 next

티스토리 툴바