这个问题让我无法入睡,因为一年以来我一直在努力寻找解决方案,但是......我的脑海里仍然没有任何事情发生。也许你可以帮助我,因为我认为这是一个非常普遍的问题。
我有一个多层应用程序:表示层、业务逻辑层、模型层。为简单起见,假设我的应用程序在表示层中包含一个允许用户搜索客户的表单。现在用户通过 UI 填充过滤器并单击一个按钮。发生了一些事情,请求到达表示层的方法如CustomerSearch(CustomerFilter myFilter)
. 这个业务逻辑层现在保持简单:在模型上创建查询并返回结果。
现在的问题是:您如何面对加载数据的问题?我的意思是业务逻辑层不知道该特定方法将仅由该表单调用。所以我认为它不知道请求表单是否只需要返回 Customer 对象或带有链接 Order 实体的 Customer 对象。
我试图更好地解释:我们的表单只想列出按姓氏搜索的客户。它与订单无关。所以业务逻辑查询将类似于:
(from c in ctx.CustomerSet
where c.Name.Contains(strQry) select c).ToList();
现在这工作正常。两天后,您的老板要求您添加一个表格,让您可以像其他人一样搜索客户,并且您需要显示每个客户创建的订单总数。现在我想重用该查询并添加附加(包含)订单并取回该逻辑的部分。
你会如何处理这个请求?
这是我从现在开始的最好的(我认为)想法。我想听听您的意见:我在 BLL 中的 CustomerSearch 方法不会直接创建查询,而是通过组成 ObjectQuery 的私有扩展方法传递,例如:
private ObjectQuery<Customer> SearchCustomers(this ObjectQuery<Customer> qry, CustomerFilter myFilter)
和
private ObjectQuery<Customer> IncludeOrders(this ObjectQuery<Customer> qry)
但这并不能说服我,因为它看起来太复杂了。
谢谢,马可