매직 푸시 버튼
Magic pushbutton매직 푸시 버튼은 그래픽 [1][2]사용자 인터페이스의 일반적인 안티 패턴입니다.
안티패턴의 핵심은 사용자 인터페이스와 비즈니스 로직의 두 부분으로 분할된 시스템으로 구성되며, 단일 지점을 통해 결합되어 "매직 푸시 버튼"을 클릭하거나 데이터 형식을 제출합니다.이 인터페이스는 싱글포인트인터페이스이기 때문에 구현이 너무 복잡해집니다.이들 유닛의 일시적인 결합은 큰 문제입니다.사용자 인터페이스의 모든 상호작용은 푸시 버튼을 누르기 전에 이루어져야 하며 비즈니스 로직은 버튼을 누른 후에만 적용할 수 있습니다.각 유닛의 응집력도 떨어지는 경향이 있습니다.기능은 단순히 그것들을 배치할 수 있는 다른 구조적인 장소가 없기 때문에 이것이 보증되든 아니든 함께 번들되어 있습니다.
결점
사용자용
사용자에게 매직 푸시 버튼 시스템은 사용하기 서툴고 답답해 보인다.버튼을 누르기 전에는 비즈니스 로직을 사용할 수 없기 때문에 사용자 인터페이스는 단순한 폼 채우기 연습으로 나타납니다.필드 입력을 지원하거나 허용 가능한 값의 드롭다운 목록을 제공할 수 없습니다.특히 이전 필드에 이미 배치된 항목에 따라 이후 필드에 대한 지원을 제공할 수 없습니다.예를 들어, 사용자가 이미 주택/자동차/애완동물 보험을 선택했거나 이미 본인 확인을 입력했으며 시스템이 실제로 적용되는 위험 집합을 결정할 수 있는 경우, 보험 청구 코드의 매우 큰 목록에서 선택은 훨씬 작은 목록으로 필터링될 수 있습니다.e는 현재 이 거래와 무관하다고 알려져 있습니다.
매직 푸시 버튼의 가장 불쾌한 측면 중 하나는 대량의 데이터를 입력했다가 예기치 않은 이유로 거부함으로써 사용자 상호작용이 진행되는 경향입니다.이것은 오래된 시스템의 악명 높은 "Redo from the redo" 메시지와 결합했을 때 특히 디자인이 좋지 않습니다.입력된 데이터가 보존된 상태에서 폼이 반환되고 문제 필드가 강조 표시된 경우에도 사용자가 몇 분 전에 완료했다고 생각했던 필드로 돌아가야 하는 것은 여전히 불쾌합니다.
이러한 기능과 마법의 푸시 버튼이 없는 기능은 전문가나 시스템 자체 프로그래머에게는 별로 중요하지 않지만 실수할 가능성이 있는 순진한 사용자에게 특히 중요합니다.이러한 유형의 인터페이스 장애는 웹에서 강조되고 있으며, 같은 시스템에서 동일한 작업을 반복하여 수행하는 기존의 역할 기반 사무직 사용자 그룹이 아닌 더 많은 공용 사용자를 지원할 필요가 있습니다.시스템을 잘 알고 처음 데이터를 완벽하게 입력할 수 있는 개발자가 효율적으로 사용할 수 있다고 해도, 이러한 시스템이 실제 사용자가 사용하기에 적합한지는 알 수 없다.
구현용
매직 푸시 버튼은 프로젝트 완료에 비해 사용자 경험에 대한 중요성이 부족하고 설계 프로세스의 초기 관리 부실로 인해 자주 발생합니다.간단히 보면, 매직 푸시 버튼의 심플함은 사용자 인터페이스 모듈이 거의 없고 상호 작용도 단순해 보여집니다.이 뷰에서는 각 모듈 내의 복잡성이 숨겨져 있어 인터페이스 품질은 비용과 비교하여 평가절하됩니다.
대체 수단
최신 시스템(즉, 처리 비용이 저렴하고 경쟁 인터페이스 표준이 높은 시스템)에서는 사용자가 데이터를 장기간 입력하도록 내버려 두어서는 안 됩니다.사용자는 입력된 데이터의 개발 상태에 따라 시스템을 유도, 검증 또는 맞춤화할 수 있습니다.「그냥 계속」하도록 내버려 두고, 마지막에 모든 것을 검증하는 것은, 그 데이터가 입력된 시점으로부터, 필요한 수정이 한층 더 검출되는 것을 의미합니다.선험적 원칙으로서 필요한 보정은 입력된 시점이나 식별 가능한 시점에 즉시 강조 표시되어야 한다.
이벤트 구동 인터페이스에서는 필드의 "완료"에 의해 트리거되는 대부분의 이벤트는 해당 필드를 검증하거나 다음 필드 입력 선택을 안내할 수 있는 기회를 제공합니다.사용자가 다음에 어떤 필드로 이동할지 제어할 수도 있습니다.폼의 서브섹션은 처음에 입력된 값에 의해 관련되거나 관련이 없는 경우가 많습니다.또, 유저는, 이러한 항목을 수동으로 건너뛸 필요가 없습니다.
이 시나리오에서는 프로그래머가 먼저 사용자 인터페이스를 그린 후 자동으로 생성된 메서드로 비즈니스 로직을 작성합니다.
예
다음은 Borland Delphi의 매직 푸시 버튼의 전형적인 예입니다.
절차. TForm1.버튼 1클릭(송신자: 토브젝트); 변화하다 조정하다: 구조; 시작한다. 조정하다 := 구조.만들다; 해라 조정하다.루트 키 := HKey_Current_사용자; 한다면 조정하다.오픈키('\소프트웨어\MyCompany', 진실의) 그리고나서 시작한다. 조정하다.기입 문자열('파일명', 편집 1.본문); 끝.; 마침내. 조정하다.공짜; 끝.; 끝.; 이것을 실시하려면 , 비즈니스 로직(이 예에서는 파일명을 레지스트리에 격납)을 다른 클래스로 리팩터 하는 것이 좋습니다.
유형 TP 레퍼런스 = 학급 사적인 FFilename(FFilename): 스트링; 절차. Set Filename(설정 파일 이름)(컨스턴트 가치: 스트링); 일반의 소유물 파일명: 스트링 읽어주세요 FFilename(FFilename) 쓰다 Set Filename(설정 파일 이름); 절차. 로드; 절차. 절약하다; 끝.; Click 핸들러에서 다음 클래스를 호출합니다.저장 메서드는 다음과 같습니다.
절차. TForm1.버튼 1클릭(송신자: 토브젝트); 시작한다. 우선권.절약하다; 끝.; 절차. TForm1.편집 1변경(송신자: 토브젝트); 시작한다. 우선권.파일명 := 편집 1.본문; 끝.; 레퍼런스
- ^ "AntiPattern (by Indranil Nandy, IIT Kharagpur)".
- ^ Anders Toxboe (5 February 2009). "User Interface Anti-Patterns". UI Patterns.