Saya membuat aplikasi dengan banyak arsitektur data yang sama di belakangnya; kami memiliki basis data SQL di tempat yang berisi sebagian besar informasi internal dan otomatisasi sehari-hari, dan kemudian layanan cloud pihak ketiga yang digunakan untuk penjualan, manajemen akun, personel lapangan, dll. Helpdesk memerlukan informasi dari keduanya mengenai lokasi fisik klien dan peralatan, dan telah mendapatkannya dari dua aplikasi yang berbeda sampai saya melangkah.
Yang panjang dan pendek adalah bahwa satu sumber data perlu memiliki referensi ke catatan yang lain. Dalam kasus kami, data cloud pihak ketiga berisi referensi ke data di tempat karena pengaturan itulah yang paling kami kontrol. Sekarang, dengan ID untuk catatan dari kedua sumber data, kita bisa mendapatkan data dari keduanya; dengan ID cloud, kami menarik catatan dari cloud, mendapatkan ID tamu, dan menarik data tamu. Dengan ID di tempat, kami menyurvei kedua sumber data berdasarkan ID itu.
Dalam sistem saya, saya tidak membuat salah satu objek menjadi anak lain di lapisan domain; setiap penggunaan data dari kedua toko harus mempertahankan dua instance objek. Tidak ada yang dijamin ada, itulah sebabnya saya melakukannya dengan cara itu; aplikasi hanya dapat bekerja dengan data cloud, atau dengan data di tempat, atau keduanya, dengan lebih banyak keterbatasan semakin sedikit data yang dimilikinya.
Namun, itu tidak sulit untuk diubah, terutama jika Anda yakin bahwa satu sisi akan selalu ada; cukup sertakan properti dalam objek yang mewakili sisi yang datanya akan selalu ada, yaitu tipe objek yang mewakili catatan penyimpanan data lainnya. "Penggabungan" yang lebih maju dari dua grafik menjadi satu adalah mungkin.
Pengaturan semacam ini tentu harus digabungkan pada tingkat tertentu. Anda dapat memiliki DAL yang dapat berinteraksi dengan kedua penyimpan data, atau Anda dapat mengelompokkan DAL, satu per penyimpanan data, dan memiliki lapisan yang lebih tinggi seperti Pengontrol mendapatkan data dari masing-masing dan menggabungkannya. Tetapi, pada tingkat tertentu, program Anda harus memiliki kecerdasan untuk menyatukan data dua sumber data yang berbeda ini.
Anda dapat mengurangi kopling yang dibutuhkan dalam kebanyakan kasus dengan mengabstraksikan detail dari mana data berasal. Jika Anda mendapatkan data dari layanan web, yang diberikan kepada Anda sebagai instance dari kelas yang dihasilkan, maka pasang konverter untuk membuat salinan mendalam dari kelas layanan menjadi sesuatu yang Anda kontrol, yang tidak perlu diubah jika data sumber tidak (hanya jika skema itu).
Sekarang, ini bisa menjadi usaha besar; cloud yang kami gunakan memiliki lusinan kelas domain, beberapa di antaranya memiliki ratusan bidang data, dan - inilah kicker - Anda bisa dengan mudah harus membuat perubahan besar pada tipe data abstrak untuk mengakomodasi perpindahan ke cloud yang berbeda atau remote lain sumber data. Untuk alasan itu, saya tidak repot-repot; Saya menggunakan domain layanan web yang dihasilkan secara langsung, dan sekarang setelah perubahan dari cloud ke data di luar kantor (tetapi di bawah kendali kami) menjulang, detail yang masih belum saya ketahui, saya hanya berencana untuk mengubah formulir dan kerangka kode aplikasi, yang merupakan tempat data "digabungkan", untuk mencerminkan skema baru dan / atau objek data. Ini adalah pekerjaan besar dengan cara apa pun Anda mengirisnya.