2015-01-29 6 views
-5

동일한 데이터베이스를 사용하는 다른 클라이언트에 데스크톱 응용 프로그램이있는 경우 한 클라이언트가 데이터를 변경 한 경우 다른 클라이언트에 어떻게 알릴 수 있습니까? 고객 번호 1이 다른 고객이있는 DataGrid를보고 있고 고객 번호 2가 DataGrid에서보고있는 고객 중 한 고객의 이름을 업데이트한다고 가정 해보십시오. 클라이언트 1은 데이터베이스의 변경 사항을 어떻게 인식합니까? 나는 해결책이 매 초마다 서버로 갈 것이라고 생각하지 않는다. 그래서 선택은 무엇입니까?데이터가 변경되었는지 확인하는 방법

+1

이것은 매우 복잡한 애플리케이션 디자인으로, 새로운 사용자 수준 이상입니다. 우리가 webapi를 통해 업데이트하는 것에 대해 이야기하고 있다면 (asp.net을 사용하지만 데스크톱 응용 프로그램을 참조하십시오), 그러면 서버와 클라이언트 사이의 연결을 유지해야합니다 (예 : signalr). 좋은 결과 내길 바랄 게. – Will

+0

대체로 클라이언트의 편집을 통해 서버를 통해 데이터를 변경하고 서버가 일부 메시징 메커니즘 (예 : JMS, AMQP 등)을 통해 업데이트 알림을 브로드 캐스팅 할 것으로 기대합니다. 그러면 각 클라이언트에게 새로 고침 또는 유사하게 수행 할 것을 알립니다. –

+0

귀하의 질문은 너무 광범위합니다. 그러나 마틴 파울러 엔터프라이즈 아키텍쳐 (Martin Fowlers Enterprise Architecture)의 책을 읽는다면, 그는이 매우 복잡한 문제를 해결하기위한 기술을 가지고 토론하고 있습니다. 나는 또한 일치를 살펴볼 것입니다. 데이터베이스를 원격으로 저장하는 경우 소켓을 사용하여 연결을 폴링 할 수 있습니다. – Greg

답변

1

SignalR과 같은 기술을 사용하여 클라이언트에게 변경 사항이 있음을 알리고 새로 고침을 강제로 수행 할 수 있습니다 (또는 페이드 인하여 충돌을 일으키지 않으면 자동으로 테이블을 업데이트하십시오) 새 행).

이렇게하면 변경 사항에 대해 서버를 지속적으로 폴링 할 필요가 없습니다. 당신은 여전히 ​​갈등을 겪을 것입니다 (아마도 클라이언트의 연결이 끊어지고 변경됩니다). 그러나 당신은 당신의 필요에 따라 그것을 처리하는 가장 좋은 방법을 찾아 낼 수 있습니다.

How to implement real time data for a web page에서 웹 클라이언트를 사용하여이를 수행하는 몇 가지 방법에 대해 설명합니다. 이 기술은 JavaScript 외에 SignalR clients available for .NET이 있으므로 데스크톱 응용 프로그램과 비슷합니다.

이 기술은 SignalR에 국한되지 않음에 유의하십시오. Socket.IO과 같은 다른 기술 스택이 있지만 SignalR은 Microsoft의 기술이므로 .NET과의 긴밀한 통합이 이루어질 것입니다.

0

당신은 Observer Pattern 좀 걸릴 수 있습니다 :

객체 사이에 일대 다 의존성을 정의 하나 객체의 상태가 변경 될 때, 그에 의존하는 모든 통지 및 자동 업데이트되도록.

기본적으로 클라이언트가 저장 (또는 데이터를 변경하는 다른 작업)을 누를 때마다 서버는 클라이언트에 알림을 보냅니다. 그러면 클라이언트는이 변경이 사용자에게 영향을 미치는지 확인합니다. 그렇게되면 클라이언트는 서버에 새로운 데이터 사본을 요청할 수 있습니다 (이상적으로 사용자에게 새 데이터를 사용할 수 있음을 알리기 전에).

+0

이것은 새의 관점을 제외하고는 실제로 질문에 답하지 않습니다. 논리적 인 다음 질문은 _ "서버가없고 데이터베이스 만있는 데스크탑 응용 프로그램에서 관찰자 패턴을 구현하는 방법"입니다. – CodeCaster

+0

@CodeCaster : 서버에 대한 액세스가 가능하다고 가정하면 데이터베이스와 클라이언트 사이에 서버로 작동하는 얇은 레이어를 작성할 수 있습니다. 이렇게하면 클라이언트가 데이터베이스에 직접 액세스하지 못하게됩니다. – npinti

+0

CRUD 이상의 기능을하는 평균 응용 프로그램의 경우 해당 계층이 구현하기가 쉬우나 사소하지 않습니다. 내가 말하고있는 것은 당신의 대답이 대답하는 것보다 더 많은 질문을 제기한다는 것입니다. – CodeCaster

관련 문제