【发布时间】:2018-06-15 13:55:15
【问题描述】:
鉴于以下情况...
我担心两件事......
1) 可以将提供者注入业务模型对象吗? - 就像我对文件夹实现所做的那样,因为我想按需加载子文件夹。
2) 由于我在 IFolderDataProvider 的 Sql 实现中注入 DbContext,上下文可以被释放或者它可以永远存在,因此我应该在构造函数中实例化上下文吗?
如果这个设计不正确,那么请告诉我应该如何加载商业模型。
//Business model.
interface IFolder
{
int Id { get; }
IEnumerable<IFolder> GetSubFolders();
}
class Folder : IFolder
{
private readonly int id_;
private readonly IFolderDataProvider provider_;
public Folder(int id, IFolderDataProvider provider)
{
id_ = id;
provider_ = provider;
}
public int Id { get; }
public IEnumerable<IFolder> GetSubFolders()
{
return provider_.GetSubFoldersByParentFolderId(id_);
}
}
interface IFolderDataProvider
{
IFolder GetById(int id);
IEnumerable<IFolder> GetSubFoldersByParentFolderId(int id);
}
class SqlFolderDataProvider : IFolderDataProvider
{
private readonly DbContext context_;
public SqlFolderDataProvider(DbContext context)
{
context_ = context;
}
public IFolder GetById(int id)
{
//uses the context to fetch the required folder entity and translates it to the business object.
return new Folder(id, this);
}
public IEnumerable<IFolder> GetSubFoldersByParentFolderId(int id)
{
//uses the context to fetch the required subfolders entities and translates it to the business objects.
}
}
【问题讨论】:
-
您项目的是 .Net Core 吗?您应该添加标签。
-
附注:我们在类私有变量的开头而不是结尾使用下划线。
标签: c# .net entity-framework data-access-layer business-logic-layer