受 DDD 炒作的启发,我设计了我的课程,假装根本没有数据库。然后使用 NHibernate 将类映射到数据库表。我的部分类图如下所示:Order (hasmany)--> Product (belongsto)-->Seller。检索为某个卖家下的所有订单。我有代码:
public class Order:ActiveRecordBase<Order>
{
[HasMany]
public ICollection<Product> Items{get;set;}
...
}
public class Product: Order:ActiveRecordBase<Product>
{
[BelongsTo]
public Seller Seller{get; set;}
...
}
public class OrderRepository:IOrderRepository
{
public IQuerable<Order> GetOrdersBySellerId(int sellerId)
{
return Order.FindAll().AsQuerable.Where(x=>x.Items.Count > 0 &&
x.Items.First().Seller.SellerID == sellerId).AsQuerable();
}
}
不漂亮,但它适用于我的单元测试。在我们开始将真实数据注入数据库之前,我很高兴。演技差到想吐。所以,我对我的存储库代码做了一些调查。毫不奇怪,为了找到我想要的订单,我必须从 Order 表中获取所有数据,从 Product 表中获取所有数据以及从 Seller 表中获取一些数据。
所以,我的问题来了。作为数据库领域的一个完全傻瓜,我不知道如何改进我的存储库代码,即使我知道它很臭。所以,我很想修改我的 Order 类以引用 Seller 类,这样我就可以使用 hql 添加 Where 子句来提高性能。但是由于数据库问题而修改类结构似乎违反了DDD原则。
您有什么建议,尤其是在改进我的存储库代码方面?我已经为 ActiveRecord 和 hql 尝试过 Linq。但无法让他们工作。