Requirements 真实需求与业务需求

Requirements 真实需求与业务需求,requirements,business-logic,constraints,Requirements,Business Logic,Constraints,假设我有一个帐户创建表单,它填充了一个用户数据库。假设这个数据库表有6列:UserID、UserLogin、Password、Email、Demographic1、Demographic2 该程序确实需要用户ID、用户登录名和密码。没有它就不能工作。其余都是“业务需求”,公司想知道这些事情。它们是“必需的” 是更好地构造我的应用程序和数据库,使它们实际上是必需的,还是在业务逻辑中强制执行此约束 我的直觉告诉我第二种选择,但在我所看到的几乎所有生产代码中,第一种通常都是这样 是缺乏计划,还是业务/

假设我有一个帐户创建表单,它填充了一个用户数据库。假设这个数据库表有6列:UserID、UserLogin、Password、Email、Demographic1、Demographic2

该程序确实需要用户ID、用户登录名和密码。没有它就不能工作。其余都是“业务需求”,公司想知道这些事情。它们是“必需的”

是更好地构造我的应用程序和数据库,使它们实际上是必需的,还是在业务逻辑中强制执行此约束

我的直觉告诉我第二种选择,但在我所看到的几乎所有生产代码中,第一种通常都是这样


是缺乏计划,还是业务/项目经理给程序员留下了某种印象(他们告诉我这是必需的,我会让它成为必需的)。或者,有没有令人信服的理由?

你应该同时做这两件事。约束数据库以满足此要求,如果必要,还将引发异常。这样,如果您执行sql插入/更新,则该规则将存在


然而,在业务方面,这在表单上可视地表示为所需的验证逻辑,并弹出一条更好的错误消息。

选择您认为最好的;您是程序员-->一个具有用户ID、用户登录名和密码的数据库,并将其他数据库耦合到该数据库


问题是,就像生活中的许多事情一样,最终你将对自己的选择负责,你可以通过做出比客户更好的选择来区分自己。客户就像一个孩子,而你是家长。你希望孩子快乐,所以有时候你必须为孩子做出更可能让孩子长期快乐的选择。即使你的孩子(客户)和岳母(老板)在另一个方向上吸吮你……

我不确定我是否真的理解你的问题。如果您正在处理的域将用户定义为一个实体,并要求用户实体具有电子邮件、人口统计等,则这些字段是必需的,并且应保留在某种类型的永久存储(数据库、文件等)中

我们的实际要求通常指的是技术要求,这是项目运行所真正需要的。我们通常在结构设计中使用它们,例如在您的案例中使用DB约束

业务需求处理业务感知,以使应用程序可接受。在大多数情况下,但并非所有情况下,这通常涉及如何从我们开发的程序中生成ROI。在我们的项目中,人口统计信息通常与某种营销活动、一种可用于以后向用户推广的数据或类似的东西联系在一起

我发现,业务人员通常不会向我们充分解释业务需求的必要性,而只是简单地说它们是“必需的”。只是说如果不让我们理解上下文,我们就很难决定应该如何实施它。如果我们知道业务需求是业务的核心,如果我们不能正确地实现它,公司可能会损失很多,那么显然我们会选择一种更安全的方式来实现它。在您的例子中,这可能是通过将其嵌入结构约束本身来实现的

为了回答您的问题,理解业务/pm提出的业务需求的上下文和需求非常重要。由于您是同一个团队中的一员,您应该了解这一点,以便做出最佳的技术决策。作为个人信念,当我有疑问时,我总是会进行更有力的检查和验证(尽管这并不一定会导致最佳决策)


希望这有助于

通过将这些约束放在数据库中,您要求数据库帮助实施您的业务逻辑。有充分的理由在数据库中强制执行此类约束

  • 数据库是您的参考。它需要尽可能正确 可能的在数据库中放置NOTNULL约束有助于实现这一点。 它执行一些业务规则,即使它不是前端 结束正在插入数据的GUI,例如从 批处理或开发人员/dba使用SQL更改数据以“修复”错误 问题
  • 它确实帮助开发人员理解数据约束。在代码中查找某个值是否不能为null有时有点困难,但查看db很容易。类似地,如果您正在生成报告,并且知道列不是空的,那么就更容易了
  • 如果您知道某个值不应为null,并且如果为null则为错误,则允许快速失败行为。如果任何人在没有经过业务逻辑的情况下插入空值,或者由于错误,那么会比在数据库中允许空值更快地找到错误
  • 问自己这样一个问题:您是否也会删除外键约束?毕竟,它们只是业务约束。毕竟,您可以通过业务逻辑来实施它们

    对我来说,问题是要在数据库中设置多少约束。作为一般规则,我在数据库中创建两种类型的约束:外键约束和非空约束。这些都是快速的胜利,没有争议。关于代码复制的观点,你是正确的,理论上你是在复制一个检查,但是好处大于任何小问题。因此,我在业务逻辑中设置了检查,并在数据库中添加了NOTNULL约束

    您可以进一步使用不同类型的检查约束,但我通常不是这样,因为现在您真的开始复制代码了

    在数据库中强制执行外键和非空约束不是一个完美或完整的系统,但它确实可以发现错误,保护数据,并帮助您完成工作。

    是的,但该存储(比方说数据库)是否需要它们,或者这是应用程序的责任(应该是吗