【发布时间】:2011-09-12 17:10:48
【问题描述】:
我正在编写一个控制台应用程序,它可以从存储过程记录集中进行大量数据检索。对于我正在使用的每种记录集类型,我都有一个使用 EF 和自定义复杂类型来检索数据的存储库:
public interface IBalanceSheetRepository
{
IEnumerable<BalanceSheetRecordDTO> GetBalanceSheetRecords();
}
public class BalanceSheetRepository : IBalanceSheetRepository
{
DBContext _context;
...
public IEnumerable<BalanceSheetRecordDTO> GetBalanceSheetRecords()
{
ObjectResult<BalanceSheetRecord> results = _context.GetBalanceSheet();
return results.Select(CreateBalanceSheetDTOFromDAO);
}
private static BalanceSheetRecordDTO CreateBalanceSheetDTOFromDAO(BalanceSheetRecord dao)
{
return new BalanceSheetRecordDTO { ... };
}
}
这里,BalanceSheetRecord 是我在设计器中创建的复杂数据类型。我创建了一个 DTO 以避免耦合,因为 BLL 不应该知道 BalanceSheetRecord 类型。
这是我的问题:由于 DTO 类型用于存储库接口的方法签名中,并且由于我的 BLL 最终将使用存储库并返回 DTO 的集合,因此这似乎是一个横切关注点。因此,我将 DTO 与 repo 接口一起生活在一个单独的“基础设施”程序集中。这是我想要实现的目标的好做法,还是我在某个地方走错了路?
另外:在我的存储库中更新数据上下文是不好的做法吗?当两个组件都属于 DAL 时,一定数量的耦合是否可以?我想使用 DI,但它似乎更有用,例如将 repo 的 DBContext 实现换成TestBalanceSheetRepository。
【问题讨论】:
标签: c# .net entity-framework domain-driven-design dto