Web、モバイル(オフライン)とデスクトップ(オフライン)の3つのプレゼンテーション層に存在するアプリケーションがあります。コアビジネスオブジェクトは3つすべてで同じで、同じ検証およびビジネスルールを共有します。しかし、それらはすべて異なるデータベース(Web - SQL Server 2008、モバイル/デスクトップ - SQL Compact)を使用します。同期プロセスを通じて、デスクトップアプリケーションとモバイルアプリケーションは、サーバーのSQL 2008 dbからデータをプッシュして受信します。一般的なビジネス層のN層設計(異なるプレゼンテーションとデータ層)
私は最高のn層アプローチを思いついていると私はちょっと立ち往生しています。すべてのビジネスルールをカプセル化するビジネスオブジェクトのアセンブリを作成しました。このアセンブリの各オブジェクトにSave()メソッドを持たせたいと思います。しかし、私はこのレイヤーに特定のデータレイヤーを認識させたくありません。基本的には、これら3つのプレゼンテーションレイヤーにこれらのオブジェクトを設定し、Save()メソッドを呼び出すことが必要です。しかし、私はSave()メソッドの実装を呼び出すアプリケーションによって異なるものにしたいと思います。
最初にIDataAdapterというインターフェイスを作成し、IDataAdapterの各オブジェクトに静的プロパティを作成しました。 Save()メソッドは、これが設定されているかどうかをチェックしてから、BusinessオブジェクトをSave()メソッドに渡します。もちろん
public interface IDataAdapter
{
void Save(BusinessProxy proxy);
}
public class BusinessProxy
{
public IDataAdapter myAdapter { get; set; }
public bool Save()
{
if (myAdapter == null)
throw new Exception();
myAdapter.Save(this);
}
}
プレゼンテーション層は、アダプタのプロパティを設定するために、データ層への参照を持っている必要がありますので、これは理想的ではありません。私は本当にアプリケーションプラットフォームに応じてdata.dllをスワップするだけのプラグインシステムをいくつか持っているのが大好きです。
これを実装する方法について少しお勧めしますか?