我当前的架构基于我的实体,它们是数据的简单容器,其中很少或没有逻辑。任何业务决策都是由Service类做出的,它们将实体作为参数然后返回数据。但是,我发现随着系统规模的扩大,这种方法变得有点笨拙。
例如,我们有一个ASP.NET MVC Web应用程序,它显示了一个产品列表 - 其中一些产品可供当前用户订购,有些可能不是。在我们的控制器类中,我们获取要显示的产品,然后当每个产品显示在页面上时,我们必须调用我们的一个服务类,并确定该产品是否可供该客户订购。
<% For Each p In Model.Products %>
<%= Html.Encode(p.Title) %>
<% If AuthService.CanProductBeOrderedByUser(p, Model.CurrentUser) Then %>
<a href="#">Click here to order</a>
<% End If %>
<% Next %>
问题在于,这需要在页面中构建逻辑,并且还需要在每次迭代时调用服务。如果我在多个地方也需要这些信息,则需要大量重复。
是否有人对上述内容或任何有关如何改进的指导意见?
由于
詹姆斯
答案 0 :(得分:2)
示例可以是 ViewModel - 层次结构,其中产品的VM将具有Property IsOrderable 。
此属性如何变为true或false与视图无关。
答案 1 :(得分:2)
当您进行跨实体操作(涉及不同类型的实体)时,业务服务很少。如果您的业务操作仅与一个实体严格相关,那么将此操作放入实体类中会更好。
答案 2 :(得分:2)
让您的控制器在“产品”列表中执行客户相关过滤,让视图显示它们。 这可以通过多种方式实现:产品的扩展功能,ProductService或数据存储库参数化查询。
答案 3 :(得分:0)
我不能建议将CSLA用于智能实体。我和你一样,以前只使用数据对象来保存我的数据,但是自从交换到CSLA后,事情变得越来越好。
这是一个非常复杂的免费框架,拥有庞大的用户群。
它支持:
在这里查看:
和“入门”一书在这里: