유지보수를 어렵게 하는 것들

유지보수를 힘들게 하는 것들

 

아키텍쳐의 의도에 맞지 않는 코드

MVC의 역할에 맞지 않는 코드

 

web-tier에 business logic이 있을 경우 안 좋은점

  1. business component 만의 테스트가 어려워짐
  2. transaction 관리 등이 어려움
  3. 원격 EJB환경의 경우 원격호출의 비용을 증가시킴   (참고:session-facade pattern)

 

 In a well-designed J2EE Web application, the web tier will be very thin. It will only contain code that's necessary to invoke middle-tier business interfaces on user actions and to display the result.

-J2EE Design and Development, Rod Johnson

 

화면마다 중복된 로직이 들어가서 로직의 변경시에 관련 view layer를 모두 변경

 

Component간의 의존성을 심하게 만든  코드


부적절한 API 사용

 예시

  1. Systmier Query service : 동적쿼리나 페이징쿼리를 꼭 필요하지 않은 경우에도 사용   2.
  2. jstl: c:url 태그 미활용

  3. Struts: html태그 미활용
  4. 표준에서 jsp내에서 scriptlet (<% %>)을 사용하지 않기로 했으나 사용

 

Java 언어 자체의 부적절한 사용

객체를 항상 블럭 시작점에 선언

 참조: Effective java 항목29. 지역변수의 유효범위를 최소화하라,

 지역변수의 유효범위를 최소화하는 가장 좋은 방법은 쓰기 바로 전에 선언하는 것이다.

 

 

언어를 초월해서 바람직하지 못한 코드

 

중복된 코드

 

  1. 강요된 중복 - 표준이나 환경에 의한 중복
  2. 부주의한 중복 -  설계시 실수
  3. 참을성 없는 중복  - copy&paste가 편하다고 느꼈을때
  4. 개발자간의 중복 - 의사소통의 부족

 

상수 선언되어 있지 않은 코드값

 

자신이 쓴 코드를 한번 살펴보라. 0과 1을 제외한 숫자를 직접 사용한 곳이 있는가? 있다면 빨리 고치도록 하라.

- 김익환, 대한민국에서는 소프트웨어가 없다.

 

void method (PlanVO pvo){
  pvo.set(3); //? 무슨 코드라는 거지?
  dao.update(pvo);

}

 

 

마음에 안 드는 코딩콘벤션, 이름

JLS(Java Language Specification) 6.8
http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307

Code Conventions for the JavaTM Programming Language
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
Effective Java (Joshua Bloch) 항목 38 참조

예)영문약자를 쓰는 것이 표준인데 gubun, gbn과 같은 변수명

 

유지보수자에 마음가짐

내가 잘 못 짠 코드도 아닌데..


개선시도

 

완전한 테스트를 실행시키지 않는 것보다는 불완전한 테스트라도 작성하고 실행시키는 것이 더 낫다.

- Martin Flower, Refactoring