如何处理只能在 UI 中实现的业务逻辑?

How can I handle with business logic that only can be implemented in UI?

也许这个问题有点白痴,因为在业务层可以保证一切,但我不知道是否应该努力将这种保证带到业务逻辑层。

示例:

我在 ASP.NET 应用程序中有一个业务逻辑,用户只有在登录后才能访问产品列表的第二页。在 ASP.NET 应用程序中,WebSecurity 采用关心用户登录,所以我不能在业务层调用 WebSecurity 方法。我该如何处理它?仅在 UI 层保留此法则?

将 WebSecurity 调用放入您的业务逻辑中是错误的,正确的。然而,在您的控制器中使用 WebSecurity 调用并没有错。

在处理产品列表分页的操作中,您可以检查用户是否已登录,如果他们试图查看产品首页以外的任何内容,则将他们重定向到登录页面。

这个问题可以关闭以征求意见,因为有不止一种方法可以做你想做的事。例如,使用自定义 AuthorizeAttribute。

听起来您可能需要在业务层中使用更多业务逻辑来 return 基于一些额外参数的信息,例如

public List<Products> GetProductList(bool isAuthenticated = false)
{

}

然后您可以根据用户是否登录

从UI传递正确的值

业务逻辑是一个宽泛的术语,很容易使开发人员混淆他们所谈论的逻辑类型。人们认为"if its a client requirement then it must be a business logic"

  1. 应用程序逻辑 - 这些是专门为应用程序制作的逻辑种类。他们确保应用程序顺利运行,例如过滤掉垃圾输入。

    • UI 输入验证,就像电子邮件应该始终看起来像 user@domain.com
    • 应用程序安全,登录。
  2. 业务逻辑 - 这些逻辑来自问题域。这些是 现实世界 的业务规则。

    • 如果能只谈规则,不提申请,那还是不错的人选。

例子

这是一个简单的练习:以下项目是对用户年龄的验证。找出哪个属于应用逻辑或业务逻辑。

  1. 年龄应始终为数字,并且在 1 到 100 之间。
  2. 用户的年龄必须为 18 岁或以上。

提示:如果顾客想买啤酒,收银员永远不会询问顾客的年龄是否为数字或是否在 1 到 100 的范围内。

在现实世界中,收银员是业务的一部分,并执行规则。它假设客户的年龄是正常的,而不是1000。

The business does not care if you are authenticated or not. You are there to do business, that's it

我的小练习答案:

  1. 年龄应始终为数字,并且在 1 到 100 之间。 - 此验证是一个应用程序逻辑。确保用户输入的质量是应用程序的工作。没有垃圾输入。

  2. 用户年龄必须在18岁以上。这个验证是一个业务逻辑。业务假设输入的格式或范围总是正确的,它所要做的就是检查你是否被允许购买啤酒。