问题标签 [invariants]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
330 浏览

architecture - “不变”属性是抽象定义的一部分吗?

作为我学习的一部分,我认为我发现的抽象定义的最佳答案(有意义)来自stackoverflow:

什么是抽象?

除此之外,

作为当前在线课程 cs61B 2006 年秋季伯克利的一部分,我学习了与上述定义相似的 ADT 的以下定义,但添加了一个额外的词“不变”。我应该认为这个词是上述定义的必然结果吗?或者这个词是定义的一部分吗?

_Abstract_Data_Type_ (ADT) 是一个具有良好定义接口的类,但它的实现细节对其他类是完全隐藏的。这样,您可以更改类的实现,而不会危及依赖它的程序。Date 类是一个 ADT。

ADT 允许您强制执行不变量。

变量是关于始终正确的数据结构的事实(假设代码没有错误),无论外部类调用什么方法。例如,Date ADT 强制执行 Date 对象始终表示有效日期的不变量。通过只允许通过方法调用访问某些字段来强制执行不变量。

0 投票
1 回答
624 浏览

validation - 不变量、验证和 DRY 原则

我目前正在尝试消化与 DDD 中的不变量和验证相关的信息。如果我得到正确验证不是域的问题,应该在外部完成以防止不变量发生。另一方面,必须在域中强制执行不变量,特别是在聚合中。

让我感到困惑的实际上是两件事:

  • 如何区分业务规则(不变量)与验证
  • 如何尊重 DRY 原则

让我详细说明一下。考虑我们有一个涵盖Tenders的领域模型。两个主要参与者是投标过程组织者(Organizer)和投标过程参与者(Participant)。主办方发布招标公告,其中包含有关阶段条款和要求的信息(例如起始最高价格)。招标是一个由几个阶段组成的过程。每个阶段都有它的条款。第一阶段是“招标”。在这个阶段参与者被允许发送他的提议(提案)。

有两个基本要求:

  1. 投标价格必须低于起始最高价格
  2. 参与者只能在“招标”阶段提交报价

从技术上讲,我们可以这样实现(细节省略):

考虑到上面提到的一切,在给定的上下文中,不变量和验证之间的细微差别是什么?代码是否应该在验证器和聚合中重复?(我不想将验证器注入实体)

非常感谢。

更新

我想我不够清楚。长话短说,我有两件事要考虑:

  1. 业务规则和不变量之间的区别。
  2. 坚持 DRY 违反 SRP,反之亦然。

我和另一位开发人员最近进行了讨论,我们得出的结论如下:

  • 不变量是必须独立于业务规则而遵守的一些规则。即使在概念上它们是两个不同的东西,代码也可能是相同的。
  • 为了遵守 SRP 原则,在这种情况下可能会违反 DRY 原则。

如果我错了,请纠正我。

0 投票
1 回答
92 浏览

java - 如何在 Daikon 不变检测器中省略程序点?

我正在使用Daikon(可能是程序不变量检测器)为具有不同方法的简单 java 类生成不变量。我想省略这个类中通过以​​下命令实现的几个方法:

该工具还提供了在某些点(如 ENTER、EXIT 等)跳过不变量的选项。现在我想跳过方法 EXIT 点。我将以下文本附加到命令中,但没有运气。

checkFirstAndLastValue():::EXIT

你能帮我如何从 Daikons 输出中省略以下方法吗?

C0.checkFirstAndLastValue(int, int):::EXIT

谢谢。

0 投票
1 回答
79 浏览

android - 使用不变矩进行形状识别的不良结果

我的项目是叶子的形状识别。我使用不变矩进行特征提取和城市街区距离来计算测试图像与数据库中图像之间的距离。胸围我得到的结果非常糟糕。我可以说识别率只有不到 50% 的匹配。例如:

这是测试图像

在此处输入图像描述

但这与这张图片相匹配:

在此处输入图像描述

我使用 otsu 阈值将该图像转换为二进制图像,因此图像的形状看起来不错。我的问题,这是正常的吗?还是我的编码有错误?这是我使用城市街区距离的编码:

如果我在该编码上使用相同的图像,则结果不会给出 0 值。为什么?是因为双数据类型吗?

0 投票
1 回答
1787 浏览

glsl - GLSL 中的不变和精确关键字

我试图理解这两个概念。我正在阅读的手册对它们非常简短,并且多通道算法之类的东西对我来说是新的。我想提供一些示例(不是代码),说明我需要在哪里使用不变量或精确变量,只是为了得到一个大致的想法,这样我就可以继续下去而不会留下任何东西。

当他们说

GLSL 不保证不同着色器中的两个相同计算将产生完全相同的值

我不知道如何以及何时需要在不同的着色器中进行 2 次相同的计算。

0 投票
2 回答
446 浏览

invariants - OCL 定义不变量

如果我必须定义一个不变量来说明请求贷款的人的年龄应该大于 18 的附加类图,这将是

或者

两者有什么区别?

在此处输入图像描述 感谢您的指导

0 投票
2 回答
6697 浏览

domain-driven-design - DDD 不变量业务规则和验证

我正在寻找有关在何处为域实体添加验证规则以及实施最佳实践的建议。我进行了搜索,但没有找到我想要的东西,或者我错过了它。

我想知道用于验证属性是否为空、在某个范围内或长度等方面的推荐方法是什么……我已经看到了几种使用 IsValid() 的方法以及其他关于在构造函数中强制执行的讨论,所以实体永远不会处于无效状态,或者使用预处理和后处理,以及使用 FluentValidation api 的其他人,不变量如何影响 DRY 和 SRP。

有人可以给我一个很好的例子,说明在使用应用服务、限界上下文、域服务、聚合根、实体分层时在哪里放置这些检查。这会去哪里,最好的方法是什么?

谢谢。

0 投票
1 回答
799 浏览

oop - 始终有效的实体

我有兴趣了解“始终有效”实体方法(稍后与 isValid 方法相比)的支持者如何建议使用集合对对象进行建模。我真的很喜欢这种方法背后的想法,但是我很难实现它,因为我的对象变得有点复杂。我想知道,我是否需要强制用户只使用一种更新方法,并指定所有字段?

例如:

那么,以下是否应该只向用户提供一个构造函数和一个指定所有字段的更新方法?还是应该使用多个构造函数?允许某些属性(可选)具有公共设置器会使事情变得不一致吗?

还是人们更喜欢使用稍后必须调用的 isValid 方法?

我必须说,我的偏好是进行不变检查,因为它感觉更安全,但是必须将每个属性都添加到构造函数和更新方法中,这使得在层之间调用甚至对象设置时的速度要慢得多。由始终有效的类组成的集合加剧了这一点。

0 投票
2 回答
1837 浏览

concurrency - 简单并发程序的归纳不变量是什么?

这是Leslie Lamport的文章教学并发中的一个简单的并发程序。

考虑N从 0 到N-1每个进程i执行的进程

并停止,每个x[i]初始等于 0。(每个的读取和写入x[i]都假定是原子的。)

该算法满足以下性质:在每个进程停止后,y[i]至少有一个进程等于 1 i。很容易验证:最后i写入的进程y[i]必须设置为 1。

然后,兰波特评论说

但是该进程没有设置y[i]为 1,因为它是最后一个 write 进程y

该算法满足此属性,因为它保持一个归纳不变量。你知道那个不变量是什么吗?如果不是,那么您并不完全理解该算法为什么满足此属性。

所以,

并发程序的归纳不变量是什么?

0 投票
2 回答
46 浏览

algorithm - 使用跟踪变量提高此代码的效率?

我写了下面的代码大纲,基本上是对一个数组 (a) 求和,其中每个元素都乘以一个值 x^i:

请注意,我不希望代码编译 - 它只是代码应该如何工作的合理概述。我需要通过使用跟踪变量来提高代码的效率,因此需要使用链接不变量将所述变量与代码的其余部分连接起来。这就是我卡住的地方。在这种情况下跟踪什么有用?我曾考虑在每次迭代中保留总和值,但我不确定这是否有效。如果我能弄清楚要跟踪什么,我很确定将它链接到空间将是微不足道的。谁能看到我的算法如何通过跟踪变量得到改进?