1

我有一个接口 IDataProvider 只公开(为了讨论)3个操作:

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() { .. }
     // ...
}

这三种实现当然会在连接和实体状态方面表现得非常不同。既然接口“规则”没有对此强制执行规则,那么哪个实现更好?或者,如果我们应该执行其中一个或另一个,可以做到吗?

4

1 回答 1

0

假设这是在移动设备上(由于 SqlCE 引用,我相信是这种情况),我认为您可能会使您的生活比需要的稍微复杂一些。

没有理由不能在应用程序启动时打开连接并在应用程序的整个生命周期中保持打开状态,因为不应该有任何其他应用程序使用数据库。

多年来,我们一直在生产使用这种方法的 WinCE 应用程序,并且从未遇到过问题。

于 2011-12-24T19:02:24.620 回答