2010-02-09 2 views
2

핵심 회사 데이터는 물리적으로 분리 된 타사의 기간 업무 응용 프로그램 인 재무, 전송 관리에서 보관되고 관리됩니다. 고객은 Finance 응용 프로그램 (SQL Server)에서 생성되고 전달 정보는 전송 관리 응용 프로그램 (Oracle)에서 유지됩니다. 둘 사이의 통신은 지점 간 (point-to-point)입니다.여러 비즈니스 계열 데이터베이스를 사용하는 .NET 응용 프로그램 디자인

우리는 손상되거나 짧은 배송에 대한 고객의 청구를 처리하기 위해 새로운 애플리케이션을 구축해야합니다 (이전 버전을 잘 업그레이드해야하지만 기본적으로 처음부터 업그레이드해야합니다). 청구, 고객 및 배달 데이터는 현재 MS Access에 수동으로 입력됩니다. 이 작업은 SQL 서버 DB로 마이그레이션됩니다. 앱 개발 플랫폼은 VS2008 (C#)입니다.

우리는 이미 다른 곳에 보유하고 있으므로 클레임 데이터베이스에 모든 고객 및 배달 데이터가있는 것을 피하기 위해 LOB 시스템 (및 아마도 클레임 DB)에서 WCF 기반 피드를 생성 할 계획입니다. 그런 다음 고객 클레임 응용 프로그램의 데이터 소스로 사용됩니다. 소유권 주장 관련 데이터 항목이 있지만 핵심 고객 및 배달 데이터는 LOB 응용 프로그램에서 업데이트 할 필요가 없습니다.

지금까지 내가 마음에

데이터베이스가 -> ORM -> WCF \
데이터베이스 -> ORM -> WCF     ---> BLL -> UI
데이터베이스 -> ORM -> WCF/

고객, 배달 및 클레임 (객체 지향 서비스)에 대해 별도의 서비스 피드를 만들므로 잘못된 것 같습니다. 또한 내가 파악할 수없는 것은 고객이 제공하는 청구에 대한 주장을 보여주는 보고서 (예 : 전통적으로 쿼리 또는보기를 작성하여 모든 하나의 DB에있는 여러 테이블에서).

내가 올바른 방향으로 가고 있는지, 아니면 여기서 큰 그림을 놓치고 있는지 - 규칙적인 추출물을 클레임 데이터베이스로 실행하고 전통적인 n-tier/n-layer 아키텍처로 작업해야합니까?

+0

문제를 명확히하는 데 도움이되는 질문 중 하나 ... WCF 서비스 또는 클레임 ​​앱을 사용하여 금융 및 전송 앱을 볼 수 있습니까? – Walter

+0

서비스를 통해 핵심 LOB 시스템을 업데이트 할 가능성은 아직 멀었지만 다른 앱은 금융 및 전송 데이터를 사용해야합니다 (예 : 반품 앱, KPI 보고서, 고객 포털 앱. 이것은 실제로 비즈니스 내의 일반적인 상태의 한 예입니다. – friedX

답변

4

귀하의 디자인이 너무 멀리 떨어져 있다고 생각하지 않습니다.

WCF 서비스 또는 전송 서비스를 통해 재무 데이터에 액세스 할 수있는 앱이있는 경우 구축하는 것이 좋습니다. 또한 각 서비스가 단일 책임 원칙과 관련하여 알아야 할 것을 지원하기 때문에 구축하는 것이 좋습니다.

UI 애플 리케이션이 알아야 할 곳이 어디 있겠습니까? 3 개의 개별 서비스를 호출하여 작업을 완료하십시오. 그런 상황에서 우리는 종종 적절한 서비스를 호출하는 래퍼 서비스를 만들었습니다. UI 앱이 WCF 서비스를 참조하고 해당 서비스가 Finance 서비스 또는 전송 서비스 또는 Claims 서비스를 호출한다는 것을 의미합니다. 단점 - 각 통화로 인해 여러 통화가 ... 예. 그러나 UI 앱에서 논리를 추상화하고 다른 서비스의 데이터를 조작하거나 결합 할 수있는 기회를 제공하거나 앱에 적합한 다른 비즈니스 로직을 추가 할 수있는 이점을 제공합니다.또한 여전히 금융 서비스의 이점을 활용하여 UI 앱의 비즈니스 필요성이 없어지거나 재무 카드를 유용하게 활용할 필요없이 금융 애플리케이션을 계속 지원할 수 있습니다.

다른 솔루션 경로가 있다고 확신합니다. 이것은 우리가 두 가지 응용 프로그램에서 어떻게 처리했는지입니다.

EDIT (답변을 작성하는 데 너무 많은 공간이 필요하다.)

전송 서비스에서 가져올 수있는 데이터가 "getCustomerDelieveries"라고 묻는 질문을 만족시키기에 충분하다면 다른 래퍼 서비스로 분류하지 않아도됩니다. 더 많은 데이터가 필요한 경우 더 많은 고객 정보를 제공하는 다른 서비스가 해당 서비스로부터 이익을 얻을 수 있습니까? 해당 앱이 전송 서비스에 의존하고 있습니까? 이것은 당신이 당신의 시스템에 대해 가장 잘 알고 있기 때문에 대답이 당신에게 바로 "느껴져야하는"것 중 하나입니다.

아마도 SRP 규칙을 깨고 귀하의 운송 서비스가 금융 DB 또는 서비스에서 더 많은 고객 정보를 얻도록해야합니다. 또는 전송 서비스에 의존하는 앱이 더 많은 고객 데이터를 필요로한다면 전송 데이터베이스에서 고객 테이블을 확장 할 수 있다고 생각할 수 있습니다.

규칙, 원칙 또는 철학을 너무 엄격하게 적용해서 앱에 더 적합하다고 생각하면이를 깨뜨릴 수 없습니다. 그것은 균형이 될 것이고, 옳고 그른 대답은 없으며,이 상황에서 더 잘 작동합니다.

귀하는 귀하의 비즈니스의 클레임 부분을 지원할 새로운 UI 응용 프로그램에 대해 설명함으로써이 게시물을 시작했으며 재무 및 전송 데이터 (및 자체 데이터)가 모두 필요했습니다. 이것은 래퍼 서비스를 호출하기에 완벽한 후보입니다. 3 개의 구별되고 분리 된 데이터 소스의 데이터가 필요합니다. 귀하의 운송 서비스는 일부 애플 리케이션에서는 잘 작동하지만 제한된 고객 정보는 가지고 있습니다. 전송 서비스를 100 % 미러링하고 추가로 고객 데이터를 제공하는 래퍼 서비스를 작성한 경우 얻은 혜택은 무엇입니까? 이를 소비하는 앱에 대한 더 많은 데이터가 있지만 전송 서비스에 기능을 추가 할 때마다 유지 관리가 더 많습니다. 이 래퍼가 제공 할 수있는 다른 가치는 무엇입니까?

이 경우, 전송 서비스에서 재무 서비스의 고객 데이터를 더 많이 얻게하면 더 나을 것입니다. 전송 데이터베이스에 데이터가 있지만 충분하지 않습니다. 전송 서비스가 데이터 요구 자체를 채워서이 짧은 시간을 보충 할 필요가 거의 있습니다.

+0

OK, 전송 (배달) 및 금융 (고객) 서비스는 서비스의 혼잡에 대한 혼란을 도와줍니다. 고객을 전송 LOB에 추가하기 위해 이미 지점 간 통합이 있으므로 getCustomerDeliveries()를 순수한 전송 서비스 메소드로 취급 하시겠습니까? 아니면 SRP를 적용하고 다른 래퍼를 작성하여 고객에 참여하도록이 위치에서 벗어나겠습니다 Tranport Service의 배송 서비스를 제공하는 금융 서비스 – friedX

+0

좋은 질문입니다. 고객은 전송 데이터베이스에서 어떻게 처리됩니까? 그냥 키 또는 별도의 DB에 있기 때문에 중복되는 데이터입니까? – Walter

+0

전송 시스템에 대한 dbs 및 "충분한"중복 데이터의 공통점 (송장 발행, 본사 세부 정보 없음) - 지점 간 (Point-to-point)은 금융에서 운송으로가는 한 방법입니다. – friedX

0

보고서를 생성 할 때 대개 최신 데이터를 제공하지 않아도되므로 보고서 작성을위한 소스로 별도의 DB를 사용하는 것이 좋습니다. 마스터 DB는 UI (트랜잭션 및 충돌 탐지 기능 활용)에서 업데이트를 수신 한 다음보고 DB에 데이터를 복제합니다.

이 아키텍처 패턴을 CQS (명령 쿼리 분리)라고하며, Udi Dahan이이 great article을 읽습니다.

+0

좋은 지적 드미트리, 이것은 과거에 나에게 잘 돌아갔다.하지만 이것은 비즈니스 애플리케이션이다. 그 중 하나가 보고서 일 것이다. 다른 (CRUD) 기능도 필요합니다. – friedX

+0

이 방법을 사용하면 마스터 DB에서 간단한 쿼리를 실행할 수 있습니다. 보고 DB는 예를 들어 고객 테이블을 별도의 DB에 저장된 배달과 조인해야하는 경우에 사용됩니다. 서비스 계층에서이를 수행하는 것은 부자연스럽고 비용이 많이 듭니다. –

+0

당신이 언급 한 흥미로운 기사이지만,이 책의 깎아 지른 척도가 지금은 범위에서 벗어난 것 같습니다. 하나는 BI 프로젝트가 좀 더 성숙한 시점, 또는 아마도 고객에게 서비스 API를 제공하려고 할 때입니다. 의견을 보내 주셔서 감사합니다. – friedX

0

WWF (또는 다른 오케스트레이션 도구)와 함께 오케스트레이션 서비스를 사용해야합니다. -> WCf1 DAL, BLL, SIL -> WCF2

wcf1 및 wcf2 그들에 오케스트레이션 서비스가 결합 된

DAL, BLL, SIL :

나는이보기를 좋아한다. 이렇게하면 서비스가 자율적으로 분리되어 다른 오케스트레이션에서 재사용 할 수 있습니다.

+0

SIL - 서비스 통합 계층? 따라서 WCF1과 WCF2는 본질적으로 LOB 어댑터이며 소비 응용 프로그램 (이 경우 클레임)에는 오케스트레이션 계층이 있거나 미들웨어/ESB 유형 솔루션에 대해 이야기하고 있습니까? – friedX

+0

글쎄, 그것은 당신에게 달렸습니다. 응용 프로그램에서 MVC 계층을 사용할 수도 있고 오케스트레이션 서비스 (다른 서비스)를 수행하거나 중간에 전체 ESB를 넣을 수도 있습니다. 향후 확장성에 따라 시스템 연결이 달라집니다. –

관련 문제