问题标签 [leaky-abstraction]

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 投票
0 回答
799 浏览

jsf - 是否有证据表明 Thoughtworks 断言 JSF 是一个破碎的抽象?

Thoughtworks Technology 的雷达上——他们把Java Server Faces搁置 了——声明

我们继续看到团队在使用 JSF(JavaServer Faces)时遇到麻烦,并建议您避免使用这种技术。团队选择 JSF 似乎是因为它是 J2EE 标准,而没有真正评估编程模型是否适合他们。我们认为 JSF 是有缺陷的,因为它试图抽象出 HTML、CSS 和 HTTP,这与现代 Web 框架所做的完全相反。JSF 和 ASP.NET 网络表单一样,试图在无状态协议 HTTP 之上创建状态,最终导致了一系列涉及共享服务器端状态的问题。我们知道 JSF 2.0 中的改进,但认为该模型从根本上被破坏了。我们建议团队使用简单的框架,并接受和理解包括 HTTP、HTML 和 CSS 在内的 Web 技术。

据我了解,他们基本上是在说,如果您使用有状态抽象来包装像 http 这样的无状态协议,您可能会陷入陷阱。即一个团队可能会遇到麻烦围绕这个问题。

我的问题是:是否有证据表明 Thoughtworks 断言 JSF 是一个破碎的抽象?

0 投票
1 回答
115 浏览

javascript - ProcessingJS 和 PointerEvents

我已经阅读了 processing.js 库的最后一个稳定版本的代码,并且正如我想象的那样,由于端口是“处理”编程语言的端口,因此没有支持指针事件的迹象,这将是在网络草图中很有用。

经过长时间的搜索,我在 channel9 网站 ( http://channel9.msdn.com/Series/Sketchbooktutorial )上找到了一系列教程,名为“Creative Coding with Processing.js for Windows 8 JavaScript applications”。他们使用库的自定义版本:它被称为 processing_rt 并且它支持以下事件

是否有另一个实现这些事件的、较少自定义的 processing.js 库版本?如果不是,使用 processing_rt 库是否“生产安全”?

来自 W3C 指针事件草案

0 投票
1 回答
144 浏览

clojure - clojure.lang 真的只是实现细节吗?

在 Clojure 中,某些任务(例如实例化 aPersistentQueuedeftype用于实现与函数兼容的自定义数据类型clojure.core)需要了解clojure.lang.

但是,根据clojure.lang/package.html

唯一被视为公共 API 一部分的类是clojure.lang.IFn. 所有其他类都应该被视为实现细节。

这些陈述是错误的还是过时的?如果是这样,是否有计划在未来纠正它们?如果没有,是否有更优选的方式来执行上述任务,或者根本不应该在惯用的 Clojure 代码中完成它们?

0 投票
4 回答
662 浏览

c# - 当其中一个实现需要额外步骤时,用于避免泄漏抽象的 C# 模式

我正在实现一个ITracker看起来像这样的接口:

我最初创建了一个封装 Mixpanel.NET 的接口实现。然后,我创建了另一个包装 Application Insights 的产品。但是,Application Insights 需要Flush()将数据发送到服务器。

我不想仅仅因为其中一个实现需要一个方法而污染ITracker接口。Flush()感觉就像一个泄漏的抽象。

但是,我需要在某个时候调用此方法(可能在应用程序关闭时),并且不想每次Track调用时都这样做。

当 Tracker 在会话结束时被垃圾收集时,是否可以调用方法?这甚至是一个好方法吗?

我觉得我在这里错过了一个技巧!

0 投票
2 回答
6641 浏览

python - C ++:在迭代时将 std::vector 中的 push_back

以下代码片段提供了一个非常奇怪的输出。我期待一个溢出(Python 给出一个 MemoryError)

输出:1,2,3,1,0,3,

我如何解释这个结果?

如果您在 Python 中执行类似的操作,则会出现内存错误。

我想到了这个问题,因为上述编写代码的方式被认为是绑定安全的。并且对于绑定的安全容器不应在foreach type iteration. 所以,这是一个泄漏的抽象。

有没有一种方法可以包装这个foreach循环,以便在循环体中不允许任何导致大小修改/重新分配的操作。

0 投票
1 回答
43 浏览

idris - 为类型指定名称时,自动隐式 arg 停止工作

在写这个答案时,我注意到虽然这可以按预期工作:

但是一旦我给该属性起一个名字,它就会停止工作:

现在填充autoarg 失败

为什么伊德里斯看不透Divides的定义?

0 投票
1 回答
104 浏览

java - 访问返回到其 API 的对象上的实现特定方法

让我从抽象地表述问题开始:我有两种公共接口类型。其中一个包含一个方法,该方法至少接收另一个接口类型的两个实例。方法的实现取决于传递的对象的实现。

考虑以下公共 API,它由两个接口组成:

现在,我想实现该 API,如下所示:

我需要访问connect方法中的包装对象,这是不可能的,因为该getWrapped方法不是 API 的一部分。这是一个实现细节。

所以问题是:如何在connect不向 API 泄​​露实现细节的情况下实现该方法?

这是我到目前为止所尝试的:

  • connect方法放入Node接口并调用parent.connect(child). 这使我可以访问父对象的包装对象,但是子对象的包装对象仍然不可用。

  • 只需假设传递Node的是类型NodeImpl并使用向下转换。这对我来说似乎是错误的。可能还有其他Node实现。

  • 不要将包装的对象放在节点中,而是使用映射到对象的TreeImpl映射。NodeWrapped这与上面的基本相同。一旦将Node实例传递给connect没有关联映射的方法,它就会崩溃。

请注意,Node接口可能包含方法。但是,这对于这个问题并不重要。

另外,请注意我同时控制:接口声明和实现。


解决这个问题的另一个尝试是将connect方法转换为接口addChild中的方法Node并使Node接口通用:

Node并且createNode是公共 API 的一部分。NodeImpl并且Wrapped应该被隐藏。run是客户端代码。如您所见,NodeImpl必须对客户端可见,因此这仍然是一个泄漏的抽象。

0 投票
1 回答
695 浏览

c++ - 's' C++ 之前缺少模板参数

好吧,我正在做作业,但不确定我的问题是什么

这是我的任务

说明 这个作业有两个部分。这些部分是相关的,但它们的实现方式不同。为了更好地理解赋值本身,回顾书籍、幻灯片、笔记等并执行基于数组和基于链表的常规堆栈以及堆栈 ADT 可能会有所帮助。

第一部分 堆栈的一个广泛用途是提供撤消操作,我们在许多不同的应用程序中都很熟悉。虽然可以使用无界堆栈(只要内存允许,堆栈就会不断增长)来实现对撤消的支持,但许多应用程序仅对此类撤消历史记录提供有限的支持。换句话说,堆栈是固定容量的。当这样的堆栈已满并调用 push 时,而不是抛出异常,更典型的方法是在顶部接受已推送的元素,同时从堆栈底部移除最旧的元素以腾出空间。这被称为“泄漏”。请注意,这并不意味着 ADT 公开了一种允许直接从底部移除的方法。这仅在堆栈变满时执行。对于这一部分,您将使用一些基于数组的实现来实现这样的 LeakyStack 抽象。请注意,您必须创建一个 Leaky Stack 接口,然后使用 C++ : 运算符通过您的 LeakyArrayStack 实现来实现该接口(使用公共继承)。请参阅分配说明末尾附近指定的接口。

第二部分 重复第一部分,但使用单链表而不是数组来存储实际数据,并允许将最大容量指定为构造函数的参数。

注意: • 基于数组和基于链表的泄漏堆栈都应该使用相同的 LeakyStackInterface,如下所述。记住——这是一个 LeakyStack ADT。它指定了 LeakyStack 做什么,而不是如何。因此,为了提供实现,接口不应有所不同。• 在两个部分中使用公共继承 • 在尝试执行第二部分之前,您应该首先编写一个 SinglyLinkedList 类 o 然后,使用包含(聚合或组合,has-a 关系)来实现第二部分

我必须使用图片中的界面

这是我的代码

这是我的错误:错误:在's'之前缺少模板参数错误:预期';' before 's' ERROR:'s' is not delcared in this scope

请帮忙!谢谢你!

界面图片

0 投票
1 回答
13 浏览

asynchronous - 使用异步时防止泄漏抽象

我有一个控制器,假设运行import. 导入过程可能需要很长时间,所以我决定使用message queue(异步)。我创建了一个wrapper接口,该接口具有import封装实现的方法。从控制器的角度来看,它不应该关心它是如何导入的(无论是直接导入还是异步导入)。但是原始代码可能会抛出异常,如果它是异步的,则无法在控制器中捕获这些异常。

我的意思是问题在于,如果我将异步导入器与原始导入器交换,我们可以知道它是成功还是失败。但是当我们使用异步的时候,代码不能简单地输出“导入成功”,也不能输出“导入已经调度”,因为这是一个实现细节泄漏。

有关如何解决此问题的任何建议?

更新:我认为这是两个不同的职责:

  1. 进口
  2. 安排导入

所以我想它们根本不能互换。