问题标签 [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.
ruby - 为什么数字不支持.dup?
我知道每次将整数分配给新变量时,Ruby 都会进行复制,但为什么会Numeric#dup
引发错误?
这不会破坏抽象,因为所有对象都应该.dup
正确响应吗?
dup
据我所知,重写该方法将解决问题:
这有我没有看到的缺点吗?为什么这不是内置在 Ruby 中的?
java - 从 Java 中的两种方法中抽象代码,也许使用委托?
我有两种方法基本上做同样的事情,只是类型不同。我想将此功能抽象为一些通用方法,我想我可以在 C# 中使用委托轻松完成,但我不知道 Java 中的等价物。我在这里只展示了两种方法,但是有几种(比如八种)不同的makeWhateverRequest
方法。这是我的方法:
如果可能有一些类似委托的东西需要 aUser
和 a String
(如在每个方法的第一行中),那将使该行可抽象为泛型方法。但是,请注意,第一行返回一个不同的值(即,一个Get
或的实例Put
),并且该值在第二行中使用。每个方法的最后一行已经是一样的了,使用多态性来判断调用哪个版本getResponseType
,这样就可以了。
一个困难是每个方法的第二行我需要调用不同的方法。也许我可以有一些既可以实现又可以实现的接口Get
,Put
然后需要一个类似于委托的东西来获取该接口的实例。然后也许两者都GetResponse
可以PutResponse
实现不同的接口,我可以确保有一个getResponseType
采用该接口的实例。
Get
并Put
从一个公共基类继承,Request
. GetResponse
并PutResponse
从一个公共基类继承,Response
. 我可能可以将这些基类抽象化,然后,我可以只使用方法来获取必要的抽象基类的实例,而不是使用不同的接口。
我对 Java 不是很熟悉,所以我不知道在 C# 中做事的等效方法。谢谢您的帮助。
编辑: 这是我对可能需要哪些接口的想法:
然后我需要这些方法:
java - Java 1.6 抽象的随机访问
作为 Java 大师,您会建议如何抽象随机访问,以便代码可以不知道其访问的数据是在内存中还是在硬盘驱动器上的文件中?
(有问题的文件可能有几 GB 大小。随机访问是最重要的功能。)
asp.net - ASP.Net 页面抽象
我们有一个 win 应用程序,它在 Web 浏览器中显示 Web 表单。为了从这个 Web 表单中获取数据,我们使用了一个隐藏的文本框,并使用 Web 浏览器控件的 HtmlDocument 对象获取其文本。我想对具有此文本框元素的此 Web 表单进行抽象,以便其他表单可以使用此抽象。我制作了一个 Web 控件并将文本框放在上面。我想如果我把这个控件放在我的页面上,它就会有文本框。当我运行我的应用程序时,我注意到文本框已经呈现但有它的控件名称在它的名称 (WebControl$TextBoxName) 和它的 id(WebControl_TextBoxName) 中,win 应用程序抛出异常,因为它无法通过它的 id(TextBoxName) 找到元素。所以这是我的问题:如何制作一个包含一些元素的抽象 Web 表单/Web 控件,并且我可以使用它来使我的最终表单上包含这些元素?(他们的名字和身份证不应该改变)谢谢你的帮助
java - java泛型声明需要派生类
我遇到了一个棘手的问题,我似乎无法用 java 泛型解决。这有点复杂,但我想不出一个更简单的场景来说明这个问题......这里是:
我有一个需要上下文的处理器类。有不同类型的上下文;大多数处理器只需要任何抽象上下文,但其他处理器需要特定的子类。像这样:
好的,很酷:处理器可以声明他们需要的 Context 类型,并且他们可以假设正确的类型将被传递到 process() 而不进行强制转换。
现在,我有一个 Dispatcher 类,它拥有字符串到处理器的映射:
好的,到目前为止一切顺利!我可以为特定类型的 Context 创建一个 Dispatcher,然后注册一批处理器,这些处理器可能期望该 Context 类型的任何抽象。
现在,问题来了:我希望抽象的 Context 类型拥有 Dispatcher,并且派生的 Context 类型应该能够注册额外的处理器。这是我能找到的最接近有效解决方案的方法,但它并不完全有效:
问题是我需要在 Context 基类中声明一个泛型 Dispatcher,但我希望类型变量引用每个 Context 子类型的特定派生类型。如果不在每个 Context 子类中复制一些代码(特别是 Dispatcher 和 registerProcessor 方法的构造),我看不到这样做的方法。这就是我认为我真正想要的:
有没有办法用声明类的 SUBCLASS 类型声明对象的泛型类型?
是的,我可以通过一些低风险的铸造来解决这个问题,所以这主要是一个学术问题......但我很想找到一个从上到下的解决方案!你能帮我吗?您将如何处理这种架构?
更新:
这是完整的源代码,已更新以纳入 Andrzej Doyle 的使用建议<C extends Context<C>>
;它仍然不起作用,因为Context<C> != C
:
python - 从 Python 查看 vmdk 文件?
有没有办法从 Python 查看 vmdk 文件的内容,并能够从中读取文件?(我不需要写信给它)。如果没有,是否有任何方法可以在主机上挂载 vmdk 文件,或者通常有任何其他方式来查看 vmdk 文件而不将其附加到 VM 并运行它?
oop - 一个句子由什么组成?如何命名?
我正在设计文本解析器的架构。例句:Content here, content here.
整个句子是一个……句子,这很明显。The
等quick
是单词;,
和 .
是标点符号。但是一般来说,单词和标点符号是什么?它们只是符号吗?我根本不知道如何以最合理的抽象方式命名一个句子包含的内容(因为可能会写它由字母/元音等组成)。
谢谢你的帮助 :)
design-patterns - 这是 IOC 的典型用例吗?
我当前的应用程序允许用户通过一组管理屏幕定义自定义 Web 表单。它本质上是一个 EAV 类型的应用程序。因此,我不能硬编码 HTML 或 ASP.NET 标记来呈现给定页面。相反,UI 从服务层请求一个 Form 对象的实例,而后者又使用多个 RDMBS 表构造一个。表单包含您希望在这样的上下文中看到的类:Form
=> IEnumerable<FormSections>
=>IEnumerable<FormFields>
下面是服务层的样子:
一切都很好(一段时间)。UI 并不知道给定表单中存在哪些部分/字段:它很高兴地将接收到的 Form 对象呈现到功能性 ASP.NET 页面中。
几周后,我收到了业务的新要求:查看不可编辑(即只读)版本的表单时,应将某些字段值合并在一起,并添加其他人为/计算的字段。我说没问题。只需修改我的服务类,使其方法更明确:
再次一切正常,平衡已恢复到原力。UI 继续不知道表单中的内容,并且实现了我们的关注点分离。然而,仅仅短短几周后,业务就提出了一个新要求:在某些情况下,我们应该只应用我上面提到的一些表单转换。
在这一点上,感觉就像“显式方法”的方法已经走到了尽头,除非我想以爆炸式的方法结束(OpenFormViewingScenario1、OpenFormViewingScenario2等)。相反,我介绍了另一个级别的间接:
从表面上看,这似乎是可以接受的方法,但有一定的气味。也就是说,一直生活在对OpenFormForViewing的实现细节一无所知的UI中,必须拥有IFormViewCreator的知识并创建一个实例。
- 我的问题是双重的:有没有更好的方法来实现我所追求的可组合性?(也许通过使用 IoC 容器或家庭轧制工厂来创建具体的 IFormViewCreator)?
- 我从根本上搞砸了这里的抽象吗?
javascript - CommonJS 中的“承诺”抽象有什么好处?
我正在阅读这篇文章,关于承诺抽象的部分对我来说似乎有点过于复杂。下面给出一个例子:
在我看来,以下代码可以用更少的代码行提供相同的结果:
iphone - 抽象 NSManagedObject 和 NSDictionary
在我的项目中,我有一些从服务器显示的对象,我们称它们为 Foo。当我得到我的 Foo 提要时,我将它们解析为一个名为 RemoteFoo 的 NSMutableDictionary 子类,并将这些 RemoteFoo 对象传递到应用程序周围以显示数据。
如果用户最终想要下载 RemoteFoo,然后我创建一个名为 Foo 的核心数据 NSManagedObject 实体,并使用 RemoteFoo 中的值对其进行实例化。这一切都有效。
我遇到的问题是,如果我想要一个方法在 RemoteFoo 和 Foo 上运行,我必须在 RemoteFoo.m 和 Foo.m 中复制它。另外,如果我的应用程序充满了重复的 init,就像:
如何避免所有这些代码重复,同时仍将临时远程 RemoteFoo 与代表用户在本地保存的 Foo 的核心数据 Foo 实体分开?