2012-04-22 5 views
4

고객을위한 회계 시스템을 개발 중입니다. 이 응용 프로그램에는 몇 가지 특별한 요구 사항이 있습니다. 계정과 관련된 회계 시스템 세부 사항은 그대로 둡니다. 나는 나를 혼란스럽게하는 그 점을 언급한다.오프라인 + 온라인 데이터베이스 응용 프로그램

응용 프로그램은 온라인 및 오프라인 환경에서 작동해야합니다. 사용자가 작업 중이며 갑자기 응용 프로그램이 오프라인 상태가되는 경우 사용자가 오프라인으로 작업 할 수 있어야합니다. 모든 오프라인 작업은 로컬 데이터베이스에 저장되고 응용 프로그램이 인터넷에 연결될 때 다음 번에 중앙 데이터베이스와 동기화됩니다.이 응용 프로그램에는 많은 사용자가 있으며 모두 동일한 정보에서 동시에 작동합니다.

예 사용자가 재고 항목을 입력하면 다른 사용자가 그 당시 동일한 항목을 입력 할 수도 있습니다. 응용 프로그램은 올바른 정보의 유효성을 검사 할 수 있어야하며 사용자가 복제를 금지해야합니다.

사용자 로컬 데이터베이스는 다른 사용자가 작동하는지 항상 업데이 트해야합니다. 다른 사용자가 작업중인 경우 사용자가 오프라인 상태가 될 때 모든 정보가 업데이트되도록 모든 업데이트 된 정보를 로컬 데이터베이스에서 사용할 수 있어야합니다.

질문은 이런 종류의 응용 프로그램을 개발하는 방법입니까? 이 목표를 달성하기위한 표준 방법이 있습니까? 이러한 종류의 소프트웨어를 구축하기위한 표준 또는 비표준 패턴이 있습니까?

참고이 응용 프로그램에 .NET Remoting 또는 WCF 또는 ASP.NET MVC를 사용하려면 C# Dot Net 및 Intend를 사용하고 있습니다.

모든 종류의 도움을 주실 수 있습니다. 감사합니다. .

요약

답변

2

Tim McCarthy의 저서 .NET Domain-Driven Design with C#: Problem - Design - Solution은 비슷한 요구 사항을 가진 시스템을 설계하고 구현합니다. 그것은 약간 날짜지만, 나는 좋은 방향으로 당신을 가리킨 것이라고 생각합니다. (5 페이지에서 책이 디자인하는 시스템의 요구 사항을 나열하면 사용자의 것과 유사합니다.)

그는 C#, WCF, Microsoft의 Sync Framework, Smart Client 등을 사용합니다. 그는이 책을 인쇄 할 때 Entity Framework를 Visual Studio에서 사용할 수 없었기 때문에 자신 만의 프레임 워크를 만들었습니다 (괜찮 았지만 EF를 포함 할 수 있다면이 책이 훨씬 좋을 것이라고 생각합니다).

도움이 되었기를 바랍니다.

-1

:

  • 는 모든 데이터베이스와 클라이언트 프레임 워크는
  • 클라이언트 갈 좋은 연구

    • WCF 서버 측에 대한 지역 데이터베이스와 함께 작동하고 새로운 데이터를 동기화하고 편집을 얻을 수있는 백그라운드 프로세스가 사용 권한.
    • 서버 비즈니스 논리 수준은 충돌을 제어하고 자동으로이를 해결하거나 클라이언트에 알립니다.
    • 데이터베이스 수준에서 충돌을 해결하는 것이 더 나은 경우는 거의 없습니다.

    전체 대답은

    정말 어떤 이국적인 애드온의 모든 필요성을 해달라고.

    나는 서버 측 동기화로 클라이언트 측 응용 프로그램을 빌드하는 것을 보았습니다. WCF는 매우 좋은 선택이 될 것이며 어떤 응용 프로그램 프레임 워크라도 win8 메트로 응용 프로그램이라 할지라도 괜찮습니다.)

    물론 2 개의 데이터베이스 클라이언트 측과 서버 측이있을 것입니다. U는 최고의 응용 프로그램을 필요로하는 모든 데이터베이스를 선택할 수 있습니다. 다른 서버 및 클라이언트 측 데이터베이스가 될 수 있습니다.

    클라이언트는 서버에서 정보를 가져와 WCF API를 사용하여 서버에 새 데이터 (및 데이터 변경 요청)를 게시합니다.

    사용자가 로컬 데이터베이스로 직접 작업하고 서버 동기화에 비동기 요청을 사용하도록하는 것이 좋습니다. 그런 다음 응용 프로그램이 더 부드럽고 성가신 지연을 실행합니다.

    그래서 응용 프로그램의 두 가지 비즈니스 로직 부분이 있습니다. 하나는 사용자와 상호 작용하여 데이터를주고 저장하고 다른 하나는 백그라운드에서 모든 데이터를 동기화하는 것입니다.

    데이터의 충돌은 어떻게됩니까? 나는 그런 갈등을 해결하는 가장 좋은 방법은 너무 UR 서버의 비즈니스 로직 레벨에서 그들을 해결한다고 생각합니다. 데이터베이스 수준에서 충돌을 해결하는 것이 더 나은 경우는 거의 없습니다.

  • +0

    자세한 답변을 보내 주셔서 감사합니다.하지만이 애플리케이션을 작성하는 방법을 알고 싶습니다. 어떤 패턴을 사용하고 있습니까? 예제 응용 프로그램이 있습니까? 기본적으로 응용 프로그램을 작성하기 전에 이러한 종류의 응용 프로그램에 대한 아이디어를 얻고 싶습니다. –

    +0

    WCF 기반 클라이언트 응용 프로그램이나 서버 측 모바일 응용 프로그램을 살펴보십시오. 주요 아이디어는 악마가 세부 사항에서 아주 간단하다. –

    +0

    어떤 예를 들려 줄 수 있습니까? –

    -1

    이 링크 How to detect online/offline browser...은 브라우저의 온라인/오프라인 상태를 확인하여 연결 문자열을 전환하는 데 도움이 될 수 있습니다. 나머지는 일반적인 응용 프로그램으로 개발할 수 있습니다.

    연결 문자열을 온라인 모드와 오프라인 모드간에 전환하는 가장 쉬운 방법으로 변경하는 것이 좋습니다. 그렇다면 동기화를 처리해야합니다.

    0

    나는 두 가지 대답을드립니다. 백엔드에 웹 API 또는 Servicestack을 사용하고 클라이언트 측에 upshotjs와 함께 HTML5를 사용하는 경우. 그러면 브라우저에 데이터가 저장됩니다.

    하지만 중요한 계정 유형 항목으로 작업하는 경우 리치 클라이언트 유형 응용 프로그램을 사용할 것입니다. 백엔드는 동일하지만 이제는 서버와 클라이언트의 두 가지 데이터베이스를 갖게됩니다. 사용자가 클라이언트에 세부 정보를 입력하지만 해당 데이터가 서버와 동기화됩니다. 이를 위해 NoSQL 옵션도 확인할 수 있습니다.

    추가 세부 정보가 필요하면 알려주십시오.

    관련 문제