블로그 이미지
초딩입맛제주아재
하고 싶은 것만 하며 살고 싶다

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
31

'queryCommand:'에 해당되는 글 1

  1. 2006.10.28 사용자의 실수를 막아주는 queryCommand:
2006. 10. 28. 00:57 Programing/Smalltalk
queryCommand:

개발자들이 쉽게 간과하는 엔드유저의 실수.
만드는 사람은 정상적인 입/출력 흐름을 알고 있기 때문에
정상적인 데이터로 테스트를 하는 경우가 많다.
하지만 만들어진 어플리케이션을 사용하는 실 사용자는 개발자가 아니라
불특정 다수이다.
이들은 좋아하는 색깔도 다르고,
자주가는 사이트도 다르며,
어떤 사람은 클릭이 어떤 행동을 말하는것인지조차 모른다.

개발자가 저들의 무서운(?) 특성을 감안하지 않고 어플리케이션을 개발한다면
분명 개발자는 리펙토링의 굴레에서 벗어 날 수 없을것이다.

흔히 웹에서 폼 입력 페이지에서 사용자의 실수를 미연에 방지하고
개발자의 의도대로 시스템에 마침맞은 데이터를 입력하도록 유도하기 위해
자바스크립트를 사용하여 사용자가 입력한 데이터를 점검한 후
서버로 전송하는 방식을 취한다.

if(document.forms[formname].element.value == ''){
   alert('element의 값을 입력하세요~');
   element.focus();
   return false;
}


자바에서는 캡슐화를 통해서 프로그램을 견고하게 한다.

class Test{
   private int x=0;

   public void setX(int num){
       x = num;
   }

   public int getX(){
       return x;
   }
}


보통의 OOP 에서는 캡슐화를 사용한다.
Smalltalk도 예외는 아니다.
안드레아님이 좋아하는 Kent할배가 엄청 강조한다고 했던가...

아무튼...

Smalltalk에서는 queryCommand: 라는 메서드가 프로그램을 견고하게 하는데 한몫 단단히 하고 있다.

queryCommand: aCommand
   super queryCommand: aCommand.

   (#(#method symbolic) includes: aCommand command) ifTrue: [
       aCommand isEnabled: enable condition].


#method symbolic 을 수행하기 이전에 enable condition을 체크하여
조건에 부합하면 #method를 수행한다.

쉬운 예로
Listbox에 선택된 항목을 삭제하는 push button과 button의 action method가 있을때
선택된 항목이 없으면 삭제가 될 수 없다.
이때 queryCommand: 를 활용하면 선택된 항목이 없는 상태에서는 삭제 버튼이 비활성화가 된어
불필요한 프로그램의 오류를 미연에 방지하게 해준다.


프로그램은 유연하게 만드는것이 좋지만
그보다 우선할 것이 견고하게 만드는것이다.
견고한 프로그램을 만들기 위해서는 개발자의 세세한 손길이 필요한것임을
늘 잊지 말아야한다....
설령 무서운 귀차니즘이 협박을 해 온다 해도 말이다...
posted by 초딩입맛제주아재
prev 1 next