2011-01-13 2 views
2

현재 CRUD 작업에 대한 실행 취소 및 알림을 지원해야하는 복잡한 웹 사이트를 디자인하고 있습니다. 실행 취소 및 알림 처리를위한 아키텍처

취소 , 나는 사용자가/수정/생성 항목을 삭제 한 다음 그는 따라서 수정 된 항목의 이전 상태를 복원, 생성 된 항목을 제거하거나 다시 가져 오는 (한 일을 취소하기로 결정할 수 있음을 의미 삭제 된 항목). 그는 작업을 수행 한 후 잠시 동안 그렇게 할 수 있습니다 (시스템이 상당히 복잡하고 사용자가 수정 사항이 잘못되었음을 알리는 데 약간의 시간이 걸릴 수 있으므로 제한 시간은 2 분입니다).

알림은 항목이 생성/수정/삭제 될 때 해당 항목에 관심이있는 다른 사용자에게 다음 번에 새 페이지를로드 할 때 사이트 알림을받으며 요청할 경우 전자 메일 또는 SMS 알림을 수신합니다.

실행 취소는 간단합니다. 실행 취소에는 수정 된 항목이나 삭제 된 항목의 대부분을 중심으로 실행 취소 정보를 유지하는 것이 포함되며 알림은 알림 개체를 적절한 테이블로 밀어 넣고 전자 메일/SMS를 보내는 것처럼 간단합니다 즉석에서.

둘 다 작동하게하면 실행 취소가 불가능해질 때까지 알림이 정지 상태로 유지되어야하므로 정상적으로 작동하도록 설계해야합니다.

이러한 시스템을 구축 할 때 패턴, 모범 사례 또는 함정은 피할 수 있습니까?

답변

0

생각과 코드 모두를 실험하면서 약간의 원칙을 바탕으로 일련의 원칙을 추출했습니다.

  • 사용자는 취소 버튼을 클릭하거나 주석을 삭제하는 등의 반대 작업을 수행하여 작업을 취소 할 수 있습니다. 통지의 관점에서,이 두 가지 상황을 다르게 대우 할 이유는 없습니다.
  • 동일한 시간대에 발생하는 동일한 개체에 대한 알림은 최대한 많이 그룹화해야합니다. "내 게시물에 댓글이 달린 항목"... "내 게시물에 댓글을 달았습니다."가 표시되지 않습니다. "A, B ... 그리고 Z 님이 귀하의 게시물에 댓글을 달았습니다". 따라서 생성 및 삭제 알림은 그룹화 규칙에 따라 그룹화해야합니다. 그룹이 서로 충분히 가깝다면 서로 취소합니다.
  • 취소 할 가능성이 있으므로 알림 전자 메일을 보내지 마십시오. 대신 2 분 동안 기다리십시오. 작업이 취소되면 생성 및 삭제 그룹 규칙에 의해 보류중인 알림이 삭제됩니다. 물론 사용자가 현재 연결되어있는 경우 전자 메일과 달리 실시간 알림을 "되돌릴 수"있기 때문에 실시간으로 알림을 표시 할 수 있습니다. 이러한 원칙을 바탕으로

, 나는 데이터 액세스 레이어 위에 아키텍처에 두 가지 레이어를 결정 :

  • 예 "또는"새 코멘트를 게시 "등의 의미 중요한 작업 세트 주석을 삭제하십시오 "라는 메시지가 표시됩니다.
  • 실행 취소 활성화 작업 쌍 정의 : "새 주석 게시"의 "실행 취소"측면은 "주석 삭제"입니다.

이 방법은 동작이 항상 연산의 기본 세트를 통과함으로써 이들이 이전의 동작을 취소 또는 시스템을 수동으로 역 동작을 실행 — 의해 발생 여부에 무관하다 알림을 실행 독창적 대한 복수의 통지를 처리 동일한 개체를 그룹화하고 서로 취소하도록합니다.

반대로 "취소"기능은 전송되는 알림에 대한 지식 없이도 의미 계층의 코드를 호출하기 만합니다.

분명히, 의미 연산이 기존 연산의 "실행 취소"역함이기 때문에 의미 론적 연산을 추가해야 할 필요가 있기 때문에 분명히 약간의 결합이있을 것입니다. 예를 들어, 토론의 생성을 취소 할 수 있지만 메시지가 전송되면 삭제할 수 없습니다 (응답이있을 수 있기 때문에). 따라서 deleteDiscussion을 사용할 수없는 경우 cancelDiscussion 함수가있을 수 있습니다. 나는 그런 상황이 안전 할 정도로 희소하다는 것을 의심한다.

0
내가 (만료 시간 제한까지 가능하게 지속되지 않음) Command Pattern 취소 에 대한 사용을 고려할 것

및 알림에 대한 Observer Pattern.

EDIT1 : 다시 생각해 보면, 나는 곧 지속될 것입니다. 그렇지 않으면 제한 시간이 만료되기 전에 사용자 세션의 종료 문제가 발생합니다.

EDIT2 : 다른 옵션은 Windows Workflow Foundation 4 (WF4) 및 Compensation을 사용하는 것입니다. 장기 실행, 지속적인 워크 플로를 WCF 서비스로 설정하십시오. 워크 플로는 시작하기위한 WCF Receive 활동, 지연 활동 및 알림을 보내는 사용자 지정 활동 일 수 있습니다. CompensableActivity가 필요하지 않을 수도 있습니다 (지연이 만료되지 않았고 알림이 전송되지 않은 경우 실행 취소 할 항목이 없습니다). 각 알림 요청은 새 워크 플로 인스턴스를 시작하기 위해 WCF 호출을 만듭니다. 사용자가 취소하면 인스턴스가 중단됩니다. (지연이있는 Pick 활동과 호출 될 경우 알림을 취소하는 또 다른 WCF Receive 활동이 더 쉬울 수도 있습니다.) 경고 : 이와 같은 시스템을 구현하지 않았습니다.

+0

실제로 이것은 어떻게 독립적으로 처리 할 수 ​​있습니까? 나는 동시에 둘 다를 할 수있는 특정 패턴을 찾고있다. –

+0

@Victor - 어떻게 SRP를 위반하지 않고? http://en.wikipedia.org/wiki/Single_responsibility_principle – TrueWill

+0

사용자 요구 사항에 따라 알림은 실행 취소 인식이어야하며 반대의 경우도 마찬가지입니다. SRP를 유지하는 것은 좋은 일이지만, 나는 사용자 경험을 희생하는 것보다 SRP를 희생하려고합니다. 가능한 한 SRP를 손상 시켜서이 작업을 수행 할 방법을 묻고 있습니다. –