我现在花了一些时间来解决一个到目前为止我还没有解决方案的问题。我有一个预定义的非常庞大的数据库,其结构是固定的。我使用存储库模式在服务代码和数据库逻辑之间创建一个抽象层。问题是,我需要对数据库对象进行一些处理,然后再将它们传递出存储库。因此我不能直接使用 Linq 实体。
基本上,存储库方法如下所示:
public IList<Bookingcode> FindBookingcode(int id) {
return (from b in _db.BOOKINGCODE
where b.ID == id
select new Bookingcode {
Id = b.ID,
Name = b.NAME.Trim()
}).ToList();
}
到目前为止,这工作得很好。但是我有很多应该单独组合的对象。FindBookingcode() 应该返回一个几乎完整的对象以及目录等其他对象。我现在的问题是我必须多次重写映射,就像在这个例子中一样:
public IList<Bookingcode> FindBookingcode(int id) {
return (from b in _db.BOOKINGCODE
join c1 in _db.CATALOG on b.CATALOGID equals c1.ID
where b.ID == id
let refs = (
from bc1 in _db.BOOKINGCODE
join p in _db.PACKAGE on bc1.ID equals p.BOOKINGCODE
join bc2 in _db.BOOKINGCODE on p.PACKAGEREF equals bc2.ID
join c in _db.CATALOG on bc.CATALOGID on bc2.CATALOGID equals c.ID
where bc1.ID == b.ID
select new PackageInfo {
ID = p.ID
BookingcodeRef = new Bookingcode {
ID = bc2.ID,
Catalog = new Catalog { ID = c.ID }
}
})
select new Bookingcode {
ID = b.ID,
PackageInfo = refs.ToList()
}).ToList();
}
我还在存储库中进行了一些 L2O 处理,用于组装返回的对象。另一件事我没有很酷的解决方案,是一种告诉存储库它应该获取什么的方法,例如 FindBookingcode(id, includePackageInfo, includeCatalog)。
所以这里有问题:
1)这种方法完全愚蠢吗?
2)你能指导我找到一个使重新映射更简单的解决方案吗?
3)如何实现DDD的标准机制