- cyclic dependency
JDepend같은 툴은 그런면에서 많은 도움이 될 수 있는 분석도구이다. 그 사용법에 관한 좋은 아티클(Managing Your Dependencies with JDepend)도 여럿 찾아볼 수 있다.
의존관계 분석에서 중요한 것 중의 하나는 순환의존관계(Cyclic Dependency)이다. Cyclic Dependency는 많은 문제를 일으키는 안좋은 설계의 대표적인 예이다. Cyclic Dependency가 일으킬 수 있는 문제점은 매우 다양하다. 위에서 얘기한 OnJava의 아티클이나 Krkk의 블로그에 그 이유들이 잘 설명되어있다. 상식적으로도 컴포넌트나 패키지, 모듈이 순환적인 의존관계를 가지면 안된다는 것은 쉽게 이해할 수 있다.
Layered Architecture를 설계할 때에 주의 할 것이 바로 한 방향으만 의존관계를 가져야한다는 점이다. Isolation이니 Decoupling이니 하는 것들은 귀가 따갑도록 들어왔다. Service layer가 UI(MVC) layer에 의존적이거나 DAO layer가 Service Layer와 상호의존적이라는 것은 잘못된 Layered Architecture의 대표적인 사례이다. Spring이나 Ioc/DI를 지지하는 많은 사람들이 추구했던 것이 결국 잘못된 의존관계로 인해서 매우 지저분하게 coupling된 시스템을 피하자는 것이었다.
출처 :http://toby.epril.com/?p=263
- antipattern
"소프트웨어 공학에서, 안티-패턴이란 흔히 사용되기도 하는 패턴이지만 실무적으로는 비효율적인 그리고/또는 생산적이지 못한 패턴을 말한다."
(원문 URL: http://en.wikipedia.org/wiki/Anti-pattern)
잘 알려진 anti-pattern중 흥미가 가는 것 몇 개를 소개합니다.
1. God object: 하나의 클래스에 너무 많은 필드와 함수를 넣어서 너무 많은 것을 알고 너무 많은 것을 할 줄 아는 객체. 전지 전능한 object라고 비꼬는 의미에서 그러한 이름이 붙은 것으로 보임.
2. Spaghetti code: 이해하기 힘든 구조를 가진 프로그램. 예를 들어서, goto 가 남발한 code. code가 스파게티 면발같이 비비 꼬였다고 해서 붙여진 경멸적인 용어.
3. Hard code: 프로그램 소스 코드에 직접 설정 값이나 입력 값이 삽입된 code. 값들이 마치 hardware circuit처럼 고정되어 변경되지 않는다는 것에 유래된 용어.
4. Software bloat: 프로그램 새 버전이 나올 때마다 사용자에게 필요 없는 기능이 추가되거나 점점 더 많은 시스템 자원을 사용하는 경향을 이르는 용어. bloat는 부풀다는 뜻.
5. Database-as-IPC: database를 IPC(Inter-Process Communication)을 위한 message queue로 사용하는 것. 더 적절한 mechanism이 있음에도 불구하고
System Pattern
Design Pattern
Structural Pattern
Object-Oriented Pattern
Architectural Discovery
When you create an analysis configuration for architectural discovery, you can choose which patterns to look for in your Java™ source code.
- Design patterns, which include some of the classic Gang of Four patterns
- Object-oriented patterns, which include abstraction and inheritance trees
- Structural patterns, which include patterns based on irregular structural connectivity between components, including antipatterns such as cyclic dependencies
- System patterns, which detect all packages in the workspace
- ViewPoint(관점)
window - Preference - Modeling - viewpoint(관점)
- OCL(Object Contraint Language)
- «modelLibrary»
To indicate a Standard Stereotype (see Annex C, “Standard Stereotypes”). For example, the «modelLibrary»
keyword attached to a package identifies that the package contains a set of model elements intended to be shared by
multiple models.