その背後にあるのとほとんど同じデータアーキテクチャでアプリを作成しました。自動化と内部の日々の情報のほとんどが含まれるオンサイトSQLデータベースがあり、次に販売、アカウント管理、現場担当者などに使用されるサードパーティのクラウドサービスがあります。ヘルプデスクはクライアントの物理的な場所に関する両方の情報を必要としていましたと機器、そして私が介入するまで2つの異なるアプリケーションからそれを得ていました。
長い点と短い点は、一方のデータソースが他方のレコードへの参照を持つ必要があるということです。私たちの場合、サードパーティのクラウドデータにはオンサイトデータへの参照が含まれています。これで、どちらかのデータソースからのレコードのIDを使用して、両方からデータを取得できます。クラウドIDを使用して、クラウドからレコードをプルし、オンサイトIDを取得して、オンサイトデータをプルします。オンサイトIDでは、そのIDに基づいて両方のデータソースをポーリングします。
私のシステムでは、ドメインレイヤーでどちらのオブジェクトも他方の子にすることはしませんでした。両方のストアのデータを使用する場合は、2つのオブジェクトインスタンスを維持する必要があります。どちらも存在することが保証されていないため、そのようにしたのです。アプリは、クラウドデータ、オンサイトデータ、またはその両方でのみ機能し、データが少ないほど制限が多くなります。
ただし、特に片側が常に存在することが確実な場合は、変更するのは難しくありません。データが常に存在する側を表すオブジェクトに、他のデータストアのレコードを表すオブジェクトタイプのプロパティを含めるだけです。2つのグラフを1つにさらに高度に「マージ」することが可能です。
この種の配置は、必ず何らかのレベルで結合する必要があります。両方のデータストアとインターフェイスできるDALを用意するか、データストアごとに1つずつDALをセグメント化して、コントローラーなどの上位レイヤーにそれぞれからデータを取得してスナップさせることができます。しかし、あるレベルでは、プログラムには、これら2つの異なるデータソースのデータをまとめる賢い機能が必要です。
ほとんどの場合に必要な結合を減らすには、データの取得元の詳細を抽象化します。生成されたクラスのインスタンスとして提供されるWebサービスからデータを取得する場合は、コンバーターを配置して、サービスクラスのディープコピーをユーザーが制御するものに作成します。データの場合、変更する必要はありません。ソースはそうします(スキーマがそうである場合のみ)。
さて、これは大きな仕事になる可能性があります。私たちが使用するクラウドには数十のドメインクラスがあり、そのうちのいくつかは数百のデータフィールドを持っています-ここでキッカーです-別のクラウドまたは他のリモートへの移動に対応するために、抽象データ型に大きな変更を加える必要があります情報元。そのため、私は気にしませんでした。生成されたWebサービスドメインを直接使用し、クラウドからオフサイト(ただし、私たちの管理下にある)データストアへの変更が迫っています。詳細はまだ不明ですが、フォームを変更することを計画しています。新しいスキーマやデータオブジェクトを反映するために、データが「結合」されるアプリの分離コード。それをどのようにスライスしても、それは大きな仕事です。