날짜 (코드 냄새)에 따라 UI (또는 기타) 기능을 켜고 끌 수 있습니까?


11

ASP.NET 2.0으로 작성된 끔찍한 시스템에 일부 기능을 추가해야합니다. 문제는 특정 제품에 특정 날짜 이후에 시작된 비즈니스에 대해 설정해야하는 UI 기능이 있고 (다른 제품이 꺼진 경우) 페이지가 기존 비즈니스에 대해 동일하게 표시되어야한다는 것입니다.

날짜 기반 JavaScript UI 스위치에 대한 아이디어를 본능적으로 찾고 구 비즈니스와 신 비즈니스에 대한 웹 컨트롤을 "비수용 적"으로 만들기 위해 새로운 비즈니스를위한 페이지를 다시 작성하려고합니다. ).

시간 기반 UI 기능을 사용하는 관행이 널리 수용되고 있습니까? 그렇지 않은 경우 해당 행동을 추구하는 데 알려진 위험은 무엇입니까?


13
비즈니스 도메인 요구 사항에서 특정 시간 범위를 제외하고 일부 기능을 사용자가 사용할 수 없도록 지정하면 "설계 상"입니다. ux 컨트롤이 사라지고 사라지는 아이디어가 마음에 들지 않으면 숨기지 말고 비활성화하십시오. 어쨌든이 기술은 완벽하게 유효합니다.
Robert Harvey

1
"특정 날짜 이후에 시작된 사업"이라는 문구가 명확하지 않습니다. 귀하의 회사와 당신의 평균 사업을 수행 또는 사업 (특정 날짜 이후 가입 고객)으로 시작 클라이언트 (경우 클라이언트 그래서 그들의 응용 프로그램의 데이터에 어떤 일을 할 수만 있습니다 자신의 클라이언트가 특정 날짜 이후 가입)? 전자의 경우 고객이 사용할 수있는 기능에 대해 이야기하고 있습니다. 후자의 경우 특정 데이터에 대한 잘못된 작업 제한 (데이터 자체의 조건에 따라)에 대해 이야기합니다. 그러한 상황에서는 답이 매우 다를 수 있습니다 .
jpmc26 2016 년

답변:


22

고객이 사용할 수있는 기능 또는 선택한 배포 유형에 따라 UI를 조정하는 데 아무런 문제가 없지만 변경해야합니다.

  1. 이상한 날짜 비교가 아니라 내보내기 옵션을 활성화 / 비활성화하기 위해 "HAVE_EXPORT"와 같은 의미있는 플래그에 의존합니다. UI에는 게시 된 내용에 대한 비즈니스 규칙을 알고있는 비즈니스가 없으며 UI 작업 만 수행하고 UI 관련 지침을 준수해야합니다.
  2. 고객이 비용을 지불하지 않은 기능을 명백하게 활성화 할 수 없도록 서버 측에서 제어하십시오.

(참고 반대 있음 - DIS 일정 시간 후 abling 기능 - 더 - 더 당신이 명확하게 시간 제한 평가판을 판매하고 있음을 전달하지 않는 한 주요없는 등 만들기. 시한 폭탄을 사람들이 싫어하게됩니다 다른 상황에서 거의 다른 것보다 빠릅니다.)


2
The UI has no business knowing the business rule about what was published when-물론, Exchange Exchange에도 그러한 UI 규칙이 있습니다. 예를 들어, 이틀이 지날 때까지 다른 사용자에게는 "삭제"링크가 나타나지 않으며 60 일 후에는 마이그레이션 옵션이 비활성화됩니다.
Robert Harvey

이 답변을 기반으로 질문을 명확히했습니다. 일부 컨트롤은 제거되고 다른 컨트롤은 날짜에 따라 추가됩니다.
NMrt

13
@RobertHarvey,하지만보기에서 어떻게 프로그래밍됩니까? if (showDelete) { <button>delete</button> }또는 같은 것 if ((post.date - today).days > 2) { <button>delete</button> }입니까?
Arturo Torres Sánchez 2016 년

@ ArturoTorresSánchez : 전자의 전체 아이디어는 비즈니스 로직 (예 : 날짜 계산)을 서버에 넣는 것입니다. 어쨌든, 이것은 그 자체로 좋은 질문을 할 것입니다 :-).
sleske

11

요구 사항 자체는 문제가되지 않지만이를 구현 하는 좋은 방법과 나쁜 방법이 있습니다. 다음과 같은 장소에 코드를 복사하여 붙여 넣은 경우 :

if (businessInitiationDate > cutoffDate)
  enableNewControlsForThisOneLittlePiece();
else
  enableOldControlsForThisOneLittlePiece();

지금은 더 빠르더라도 유지 관리하기가 어려울 것입니다. 예를 들어, 어떤 시점에서는 일부 오래된 고객이 새로운 모습을 원할 것입니다. 언젠가 자체 컷오프 날짜가있는 세 번째 구성이있을 수 있습니다.

이상적으로는이 if 문이 코드에서 정확히 한 번 , 바람직하게는 서버 측에 나타나기를 원합니다 . 그러나 전체 응용 프로그램을 복제하고 변경하는 것을 피하고 싶을 수도 있습니다. 공통 코드를 찾아서 제거한 다음 다른 부분에 대해서만 작은 개별 함수를 만듭니다. 그런 다음 하나의 중앙 위치에서 해당 기능을 활성화 또는 비활성화하십시오.


6

요구 사항이며 냄새가 나는 것처럼 보이지만 (기본적으로 날짜 시간 값을 기반으로 한 구성) UI를 변경하는 데 시간을 사용할 수없는 이유는 없습니다. 클래식 한 케이스는 낮에는 밝은 색상에서 밤에는 어두운 테마로 바뀌는 satnav 디스플레이입니다 (정말 전용 인 경우 그 사이에 음소거 된 색상).

그러나 개선으로 제안 할 수있는 한 가지는 컨트롤을 사용할 수있는 날짜 개념을 제거하고 버전 번호를 제거하는 것입니다. 이 버전은 UI 구성을 설정합니다 (즉, NewCustomer에 대해 구성 할 플래그가 있으며 나중에 NewNewCustomer가 원하는 추가 제어를 제공하도록 확장 될 수 있음). 이것은 코드에서 다루기가 훨씬 쉽고 냄새가 훨씬 좋습니다.

그런 다음 몇 가지 기준에 따라 버전 번호를 설정하는 1 가지 문제 만 있으며 오늘 날짜 확인, 나중에 서버 측 구성 옵션 또는 사용자 로그인으로 설정된 쿠키로 확인할 수 있습니다. 미래.


5

이것은 더 일반적인 질문의 특별한 경우처럼 느껴집니다. 미리 정의 된 규칙에 따라 특정 이유로 UI 기능을 비활성화하는 것은 나쁜 습관입니까? 그러므로 대답은 "물론 아닙니다"입니다. 날짜 와 시간이 어려우 므로 날짜 처리 가 까다로울 수 있지만 일반적으로 비즈니스 요구 사항이 요구하는 경우이를 수행하지 않을 이유는 없습니다.


3

변경 사항이 날짜에 민감한 특정 비즈니스 목적과 관련이있는 경우 필요한 악의입니다.

프로그램을 영구적으로 변경하는 수정 프로그램을 프로그램에 배포하는 것과 관련이 있으며 이전 디자인을 다시 사용하지 않는 경우 올바른 시간에 업데이트를 간단하게 배포하는 것이 좋습니다.


1
"적절한 시간에 단순히 업데이트를 배포하는 것이 좋습니다"Nitpick : 반드시 그런 것은 아닙니다 .... 예를 들어 배포시 다운 타임이 필요할 수 있으며, 전환 시점에는 실용적이지 않습니다. 또는 병행 사용 기간이있을 수 있습니다. 실제로 다릅니다.
sleske

아니면 당신은 크리스마스에 "플레이 징글 벨"버튼을 갖고 싶어. 매 크리스마스마다 이것을 배포하고 싶지 않을 수도 있습니다.
sixtyfootersdude

2

괜찮아 UI가 다른 사용자에게 적용되는 것이 일반적입니다. 예를 들어 여기에서 스택 오버 플로우에서 개별 사용자의 업장에 따라 다른 기능이 활성화 또는 비활성화됩니다.

마음에 들지 않는 이유는 모두가 동일한 UI를 보는 솔루션에 비해 복잡성을 추가하기 때문입니다. 그러나 복잡성은 본질적인 복잡성으로 보인다 . 그것은 나쁜 건축 결정의 유물이 아닌 비즈니스 요구 사항입니다. 물론 비용이 들지만 (비즈니스와 통신해야 함), 비즈니스가 비용을 지불 할 가치가 있다고 판단하면 구현하십시오.

알려진 위험 : 가장 큰 위험은 다양한 구성에서 UI를 테스트하는 것입니다. 다양한 사용자 그룹에 대해 UI 기능을 활성화 / 비활성화하는 과정을 시작하면 가능한 많은 구성을 빠르게 얻을 수 있습니다.

또한 비즈니스 로직 계층에서 제한 사항을 구현해야합니다. 따라서 UI가 처음에는 가능하지 않아야하더라도 고객이 허용되지 않은 조작을 수행 할 수 없는지 확인하십시오.


예, UI가 다양한 요소에 따라 변경 될 수 있다면 테스트는 정말 까다 롭습니다. 수행해야 할 경우 수행해야하지만 변형을 최소화하는 데 도움이되며 현재 날짜와 같은 것에 관계없이 테스트를 위해 UI를 전환하는 방법을 제공합니다.
sleske

2

당신이 묘사하는 것은 효과적인 데이트 의 개념입니다 . 그것은 결코 새로운 아이디어가 아니며 그 핵심에는 일시적인 패턴을 적용 할 수있는 일시적인 문제의 한 유형입니다 .

기본적으로 데이터베이스에서 수행 할 작업은 구성 요소 또는 구성 요소라고하는 모듈 또는 양식 버전에 유효 날짜를 적용하여 해당 구성 요소에 대한 일부 메타 데이터와 유효 시작 / 종료 날짜를 저장하는 것입니다. 물론 응용 프로그램의 사용자에 대한 일부 데이터가 필요합니다.

이 응용 프로그램을 다시 작성해야하는 다른 더 강력한 이유가있는 것 같습니다. 효과적인 데이트 문제가 유일한 문제라면 효과적인 데이트를 구현하는 것이 더 나은 방법이라고 제안합니다. 그렇지 않은 경우 시나리오에 따라이를 평가해야합니다.


1

날짜를 기준으로 활성화 된 기능 토글입니다. 이는 완벽하게 유효합니다. 이 기능이 프로모션 기간 동안 만 사용되었거나 특정 날짜에 새로운 정부 규제가 시작되면 종료되어야한다고 상상해보십시오.

APS.NET 및 JavaScript에서 작업하고 있지만 Java 기능 토글 프레임 작업 Togglz에는 특히 날짜 및 시간 기반 활성화 규칙이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.