Asp.net mvc ASP.NET MVC-具有内置逻辑的实体与业务服务
我当前的体系结构是基于实体的,实体是数据的简单容器,其中几乎没有逻辑。任何业务决策都是由服务类做出的,这些服务类将实体作为参数,然后返回数据。然而,我发现随着系统规模的增长,这种方法变得有点笨拙 例如,我们有一个ASP.NET MVC web应用程序,它显示一个产品列表-其中一些产品可能可供当前用户订购,而另一些可能无法订购。在我们的控制器类中,我们获取要显示的产品,然后在页面上显示每个产品时,我们必须调用我们的一个服务类,并确定该产品是否可供该客户订购Asp.net mvc ASP.NET MVC-具有内置逻辑的实体与业务服务,asp.net-mvc,design-patterns,Asp.net Mvc,Design Patterns,我当前的体系结构是基于实体的,实体是数据的简单容器,其中几乎没有逻辑。任何业务决策都是由服务类做出的,这些服务类将实体作为参数,然后返回数据。然而,我发现随着系统规模的增长,这种方法变得有点笨拙 例如,我们有一个ASP.NET MVC web应用程序,它显示一个产品列表-其中一些产品可能可供当前用户订购,而另一些可能无法订购。在我们的控制器类中,我们获取要显示的产品,然后在页面上显示每个产品时,我们必须调用我们的一个服务类,并确定该产品是否可供该客户订购 <% For Each p In
<% 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 %>
问题在于,这需要在页面中内置逻辑,还需要为每次迭代调用服务。如果我在多个地方也需要这些信息,则需要大量重复
是否有人对上述内容提出意见或就如何改进这一点提供指导
谢谢
James一个例子可以是一个ViewModel层次结构,其中一个产品的VM将具有IsOrderable属性
此属性如何为真或假与视图无关。一个示例可以是视图模型-层次结构,其中产品的VM将具有IsOrderable属性
此属性如何为真或假与视图无关。当您有跨实体操作(涉及不同类型的实体)时,业务服务是非常有限的。如果您的业务操作仅与一个实体严格相关,则最好将此操作放入实体类。当您有跨实体操作(涉及不同类型的实体)时,业务服务很少。如果您的业务操作仅与一个实体严格相关,则最好将此操作放入实体类。让您的控制器在产品列表上形成依赖于客户的筛选,让视图仅显示它们。
这可以通过多种方式实现:产品的扩展功能、ProductService或数据存储库参数化查询。让您的控制器在产品列表上形成依赖于客户的筛选,让视图仅显示它们。
这可以通过多种方式实现:产品的扩展功能、ProductService或数据存储库参数化查询。对于智能实体,我不推荐使用足够的CSLA。一、 和您一样,过去只使用数据对象来保存我的数据,但自从切换到CSLA后,情况变得越来越好 它是一个非常复杂的免费框架,拥有庞大的用户群 它支持:
- 集中式业务逻辑
- 交易
- 高达现场级别的安全
- 现场级验证
- 自动IsDirty功能
- 了解只读/可编辑/子/父数据对象和关系
- 多服务器
对于智能实体,我无法推荐足够多的使用CSLA。一、 和您一样,过去只使用数据对象来保存我的数据,但自从切换到CSLA后,情况变得越来越好 它是一个非常复杂的免费框架,拥有庞大的用户群 它支持:
- 集中式业务逻辑
- 交易
- 高达现场级别的安全
- 现场级验证
- 自动IsDirty功能
- 了解只读/可编辑/子/父数据对象和关系
- 多服务器
我看不到洛奇·洛特卡的名字,就会想起他的VB6 Business Objects书。不公平的偏见?大概但是不用了,谢谢。呵呵。。很公平。。在我看来,任何与Visual Basic有关的东西都会让我产生可怕的回忆。然而,CSLA for.net非常好。我看不到Rocky Lhotka的名字,就会想起他的VB6 Business Objects书。不公平的偏见?大概但是不用了,谢谢。呵呵。。很公平。。在我看来,任何与Visual Basic有关的东西都会让我产生可怕的回忆。然而.net的CSLA非常好。