나는 거의 동일한 데이터 아키텍처를 가진 앱을 만들었습니다. 우리는 대부분의 자동화 및 내부 일상 정보를 포함하는 현장 SQL 데이터베이스를 보유한 다음 영업, 계정 관리, 현장 직원 등에 사용되는 타사 클라우드 서비스를 보유하고 있습니다. 헬프 데스크는 고객의 실제 위치와 관련된 정보를 모두 필요 장비를 사용하고 들어가기 전까지 두 개의 서로 다른 응용 프로그램에서 가져 왔습니다.
길고 짧은 것은 한 데이터 소스가 다른 데이터의 레코드를 참조해야한다는 것입니다. 우리의 경우, 타사 클라우드 데이터에는 온 사이트 데이터에 대한 참조가 포함되어 있습니다. 이것이 우리가 가장 많이 통제 한 배열이기 때문입니다. 이제 어느 한 데이터 소스의 레코드에 대한 ID로 두 데이터 모두에서 데이터를 얻을 수 있습니다. 클라우드 ID를 사용하면 클라우드에서 레코드를 가져 와서 현장 ID를 가져오고 현장 데이터를 가져옵니다. 온 사이트 ID를 사용하면 해당 ID를 기반으로 두 데이터 소스를 모두 폴링합니다.
내 시스템에서는 도메인 계층에서 두 개체를 다른 개체의 자식으로 만들지 않았습니다. 두 상점 모두에서 데이터를 사용하면 두 개의 오브젝트 인스턴스를 유지해야합니다. 어느 쪽도 존재하지 않을 수 있습니다. 그래서 제가 그렇게 했어요. 앱은 클라우드 데이터 또는 온 사이트 데이터 또는 둘 다와 만 작동하며 데이터가 적을수록 더 많은 제한이 있습니다.
그러나 특히 한쪽이 항상 존재한다고 확신하는 경우에는 변경하기가 어렵지 않습니다. 데이터가 항상 존재하는면, 즉 다른 데이터 저장소의 레코드를 나타내는 개체 유형을 나타내는 속성을 개체에 포함하기 만하면됩니다. 두 개의 그래프를 하나의 고급 "병합"할 수 있습니다.
이런 종류의 배열은 반드시 어떤 수준에서 연결되어야합니다. 두 데이터 저장소와 인터페이스 할 수있는 DAL이 있거나 데이터 저장소 당 하나씩 DAL을 세그먼트화할 수 있으며 Controller와 같은 상위 계층이 각 데이터를 가져 와서 함께 스냅 할 수 있습니다. 그러나 어떤 수준에서 프로그램은이 두 개의 서로 다른 데이터 소스의 데이터를 결합 할 수있는 영리한 능력을 갖추어야합니다.
대부분의 경우 데이터의 정확한 위치를 추상화하여 필요한 커플 링을 줄일 수 있습니다. 생성 된 클래스의 인스턴스로 제공되는 웹 서비스에서 데이터를 가져 오는 경우 서비스 클래스의 딥 카피를 사용자가 제어하는 대상으로 만들기 위해 변환기를 배치하십시오. 데이터의 경우 변경하지 않아도됩니다. 소스가 수행합니다 (스키마가 수행하는 경우에만).
이제 이것은 큰 사업이 될 수 있습니다. 우리가 사용하는 클라우드에는 수십 개의 도메인 클래스가 있으며 그중 일부에는 수백 개의 데이터 필드가 있으며 여기에는 키커가 있습니다. 다른 클라우드 또는 다른 원격으로의 이동을 수용하기 위해 추상 데이터 유형을 크게 변경해야 할 수 있습니다 데이터 소스. 그런 이유로, 나는 귀찮게하지 않았다; 생성 된 웹 서비스 도메인을 직접 사용하고 이제 클라우드에서 오프 사이트 (하지만 우리의 통제하에있는) 데이터 저장소로의 변경이 이루어지고 있습니다. 세부 정보는 아직 알지 못합니다. 단순히 양식을 변경하려고합니다. 새로운 스키마 및 / 또는 데이터 객체를 반영하기 위해 데이터가 "결합"되는 앱의 코드 숨김. 어떤 식 으로든 슬라이스하는 것은 큰 일입니다.