1

(議論のために) 3 つの操作のみを公開するインターフェイス IDataProvider があります。

public interface IDataProvider
{
    // get a list of projects (just metadata)
    List<Project> ListProjects();

    // load the Project by its GUID which we got from the metadata.
    Project LoadProject(Guid id);

    // save the project. underlying provider should determine to insert or update accordingly.
    void SaveProject(Project data);
}

私は DBContext を使用して SQL CE にアクセスし、下にあるデータ アクセス層のデータ プロバイダーとして実装できます。

public DataProvider : SqlCeDbContext, IDataProvider { ... }

また

public DataProvider : IDataProvider
{
    List<Project> ListProjects()
    {
        using(var ctx = new SqlCeContext())
        {
            //... manage the life of the context for the API user.
        }
    }
    // ...
}

また

public DataProvider : IDataProvider
{
     SqlCeContext _mSqlCeContext = new SqlCeContext();

     List<Project> ListProjects() { .. }
     // ...
}

もちろん、3 つの実装は、接続とエンティティの状態に関して非常に異なる動作をします。インターフェイス「ルール」はこれにルールを適用しないため、どの実装が優れていますか? または、どちらか一方を強制する必要がある場合、それを実行できますか?

4

1 に答える 1

0

これがモバイル デバイス上にあると仮定すると (SqlCE 参照が原因であると私は信じています)、生活を必要以上に複雑にしている可能性があると思います。

データベースを使用する他のアプリケーションが存在してはならないため、アプリケーションの起動時に接続を開いて、アプリケーションの存続期間中開いたままにしておくことができない理由はありません。

このアプローチを使用する製品 WinCE アプリを何年も使用してきましたが、問題が発生したことはありません。

于 2011-12-24T19:02:24.620 に答える