0

複数のクライアント用のアプリケーションを作成していますが、各クライアントの実装には類似点と相違点があります。UI には Win Forms と WPF、ORM には Entity Framework を組み合わせて使用​​しています。私が必要としているのは、可能な限り共有コンポーネントを再利用できる機能です。

重要な問題の 1 つは、1 つのクライアントのデータベースが oracle であり、もう 1 つのクライアントが MS Sql であることです。現在、コンパイル時に要素を変更するだけで、両方が機能しています。これは、データ プロジェクトがわずかに異なるだけで、ほぼ同一のプロジェクトを 2 セット用意する必要があることを意味します。1 つの UI でバグが見つかった場合は、他のソリューションを開いてそこでも編集する必要があります。

以前のプロジェクトで Ninject を使用しましたが、UI が直接呼び出すのではなく、特定のプロジェクト/クラスを UI に挿入して、データ プロジェクトの制御を何らかの方法で反転することは可能かもしれません。

私が理解できないように見える問題は、プロジェクト全体を注入する方法です。db.Customers.ToList();UIで言って、注入したデータ プロジェクトから顧客を返すことができるようにしたいと考えています。両方のクライアントのデータベース モデルは、現時点では同じですが、将来変更される可能性があります。

これらのリソースを共有容量で使用できるパターンがあるはずです。

ありがとう

4

1 に答える 1

0

どのタイプの接続が必要かについて、どの時点で決定できますか?

これはひどくナイーブかもしれませんが、アプリの設定を使用して、実行時に適切なタイプの接続ファクトリまたはリポジトリを起動することはできませんか?その最も単純なバージョン:

public class MainWindow : Window
{
    private IRepository _repo;

    public MainWindow()
    {
        _repo = ServiceLocator.GetRepo();       
    }
}


public class ServiceLocator
{
    public static IRepository GetRepo()
    {
        var typeOfDb = AppSettings["TypeOfDb"]

        if(typeOfDb == "Oracle")
            return new OracleRepo();
        else
            return new SqlServerRepo();
    }
}

これは機能しますか?それとも私は完全に要点を逃しましたか?

于 2012-11-20T20:17:15.287 に答える