Asp.net mvc ASP.NET MVC-具有内置逻辑的实体与业务服务

Asp.net mvc ASP.NET MVC-具有内置逻辑的实体与业务服务,asp.net-mvc,design-patterns,Asp.net Mvc,Design Patterns,我当前的体系结构是基于实体的,实体是数据的简单容器,其中几乎没有逻辑。任何业务决策都是由服务类做出的,这些服务类将实体作为参数,然后返回数据。然而,我发现随着系统规模的增长,这种方法变得有点笨拙 例如,我们有一个ASP.NET MVC web应用程序,它显示一个产品列表-其中一些产品可能可供当前用户订购,而另一些可能无法订购。在我们的控制器类中,我们获取要显示的产品,然后在页面上显示每个产品时,我们必须调用我们的一个服务类,并确定该产品是否可供该客户订购 <% For Each p In

我当前的体系结构是基于实体的,实体是数据的简单容器,其中几乎没有逻辑。任何业务决策都是由服务类做出的,这些服务类将实体作为参数,然后返回数据。然而,我发现随着系统规模的增长,这种方法变得有点笨拙

例如,我们有一个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 %>

问题在于,这需要在页面中内置逻辑,还需要为每次迭代调用服务。如果我在多个地方也需要这些信息,则需要大量重复

是否有人对上述内容提出意见或就如何改进这一点提供指导

谢谢


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非常好。