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