Я створив додаток з майже такою ж архітектурою даних за ним; у нас є локальна база даних SQL, що містить більшість автоматизованої та внутрішньої повсякденної інформації, а потім сторонній хмарний сервіс, який використовується для продажів, управління обліковими записами, персонал на місцях і т.д. і обладнання, і отримував його з двох різних застосувань, поки я не вступив.
Довго і коротко - це те, що одне джерело даних повинно мати посилання на записи іншого. У нашому випадку, дані сторонніх хмар містять посилання на дані на місці, тому що саме так ми мали контроль. Тепер, маючи ідентифікатор для запису з будь-якого джерела даних, ми можемо отримувати дані з обох; за допомогою ідентифікатора хмари ми витягуємо запис із хмари, отримуємо ідентифікатор на місці та витягуємо дані на місці. За допомогою ідентифікатора на місці ми опитуємо обидва джерела даних на основі цього ідентифікатора.
У моїй системі я не робив жодного об'єкта дочіркою іншого в доменному шарі; будь-яке використання даних із обох магазинів повинно підтримувати два екземпляри об'єкта. Жоден з них не гарантовано існує, тому я зробив це саме так; додаток може працювати лише з хмарними даними, або з даними на місці, або з обома, з більшими обмеженнями, чим меншими є дані.
Однак це не важко змінити, особливо якщо ви впевнені, що одна сторона завжди буде існувати; просто включіть в об’єкт властивість, що представляє сторону, для якої завжди будуть існувати дані, тобто тип об'єкта, що представляє запис іншого сховища даних. Можливе більш вдосконалене "злиття" двох графіків в один.
Цей тип домовленостей обов'язково повинен бути пов'язаний на якомусь рівні. Ви можете мати DAL, який може взаємодіяти з обома сховищами даних, або ви можете сегментувати DAL, по одному на сховище даних, і мати більш високий рівень, такий як контролер, отримувати дані від кожного і з'єднувати їх разом. Але, на певному рівні, у вашій програмі повинні бути розумні, щоб зібрати ці два різних даних джерел даних разом.
Ви можете зменшити з'єднання, необхідне в більшості випадків, абстрагуючи деталі того, звідки беруться дані. Якщо ви отримуєте дані від веб-служби, яка надається вам як екземпляри згенерованих класів, тоді поставте перетворювач, щоб зробити глибоку копію службового класу в те, що ви контролюєте, що не доведеться змінювати, якщо дані джерело робить (тільки якщо схема це робить).
Тепер це може бути величезним починанням; хмара, яку ми використовуємо, має десятки класів доменів, деякі з яких мають сотні полів даних, і - ось кікер - ви дуже легко зможете внести великі зміни в абстрактний тип даних, щоб розмістити перехід на іншу хмару чи інший віддалений джерело даних. З цієї причини я не турбувався; Я використовую згенерований домен веб-сервісу безпосередньо, і тепер, коли відбувається перехід від хмари до зовнішнього (але під нашим контролем) сховища даних, деталі якого я досі не знаю, я просто планую змінити форми та кодові програми програми, де дані "об'єднуються" для відображення нової схеми та / або об'єктів даних. Це велика робота в будь-який спосіб, коли ви її наріжте.