gpt4 book ai didi

validation - 关于软件设计: Where I must check parameters?

转载 作者:行者123 更新时间:2023-12-04 17:57:41 24 4
gpt4 key购买 nike

想象一下,我有一个向用户请求名称,类别列表的应用程序。当用户单击保存按钮时,应用程序会将名称和类别保存到数据库中。

我有一个从UI获取名称和类别的图层。该层检查是否有名称(长度> 0的字符串)。如果正确,它将名称命名传递给另一层。注意:category是一个单选按钮列表,其中始终选择一个项目。

在第二层,应用程序将根据类别选择合适的类来保存名称。

在最后一层,一个类会将这个名称保存在数据库中。在该类(class)中,我将检查名称是否为空。

我的问题是:检查方法的输入参数的正确位置在哪里?在每一层上?也许,我将在其他开发中使用这些层。

我的例子正确吗?也许,我可以离开数据库层的验证并向UI层提出异常(exception)。

最佳答案

通常,对于有关验证最终存在的输入的更大问题,最好是:

  • 将输入参数转换为
    完全封装的业务对象为
    收到后尽快
    它。
  • 尽早验证,然后快速失败,然后执行以下操作:
    等到你到达较低的层次
    -浪费资源,浪费时间,可能更复杂(
    回滚)。
  • 一次验证业务逻辑并将其作为
    您的对象实例化过程。 (但请注意, View 逻辑和持久性逻辑的验证可能需要在其他层进行,并且与业务逻辑分开)。
  • 模拟对象的持久化方式
    使用ORM(例如,休眠)
    你可以纯粹在
    内存中的对象级别并离开
    持久性作为一种实现
    细节。将业务逻辑重点放在
    对象层。

  • 就方法验证本身而言,我同意Oded的观点-在每一层上,都应在方法输入后立即进行。同样,这是快速失败方法的一部分。但是,如上所述,这并不意味着您可以在每种方法(或每一层)上验证业务逻辑。我只是指验证输入(通过断言或显式检查和引发的异常)的基本实践。

    关于validation - 关于软件设计: Where I must check parameters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134046/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com