问题标签 [information-hiding]

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 回答
356 浏览

oop - 委托模式会破坏封装吗?

假设我有一个接受委托的类:

如您所见,委托的 doSomethingOnlyForThisPurpose() 方法仅存在以由委托类调用。但是,要求此方法是公共的,并且可以由任何东西执行。如果它绝对不应该由它所附加的委托类以外的任何东西执行(特别是如果委托类传递了依赖项),那么这不会破坏封装吗?我想解决这个问题的唯一方法是设计一个只能由传递给每个调用方法的委托类(内部类)实例化的对象。但是,这非常复杂,而且无论如何都不是水密的。有什么办法可以解决这个问题还是病态?

注意:我想坚持这种组合方法,所以我宁愿不求助于继承。

0 投票
1 回答
966 浏览

opencart - Opencart 信息页面不可见

我正在使用 opencart 1.5.3.1。网站上不显示任何信息页面。我可以在管理员中看到页面和文本。任何想法...请帮助。

谢谢

0 投票
4 回答
1508 浏览

java - 降低静态方法的可见性

我知道孩子不能降低非静态方法的可见性,并且我理解为什么会这样。

但是,我读过“静态方法可以通过重新声明来隐藏”。但是,我不明白如何在 Java 中实现这一点。

这真的可能吗?如果是,怎么做(代码示例)以及为什么引入它(这似乎与不降低界面可见性的原则相矛盾)?

0 投票
1 回答
352 浏览

javascript - 如何更改或伪装地址栏网址?

我们有一个专门针对遭受家庭暴力的人的网站。我们的首要任务是让使用该网站的人保持安全,避免他们被“暴力者”抓住。

一切都差不多解决了,但在“暴力者”瞥了一眼地址栏的情况下,仍有一件事无法阻止受害者被抓到。

您建议使用 Javascript 隐藏地址栏或伪装地址栏的策略是什么?

谢谢,阿尔文

0 投票
2 回答
67 浏览

oop - 为了简单起见,一个巨大的班级可以吗?

我正在开发与电影播放相关的应用程序,目前遇到了一些设计问题。

如您所料,我有一个包含文件路径、文件大小等属性的电影类。电影类对电影的内部结构一无所知,也不直接解码电影文件。

为了实现这一点,我还有另一个大类:解码器。此类了解所有电影内部信息,例如持续时间、帧速率等。它还提供从文件中检索视频或音频数据的方法。将解码器分成更小的块没有多大意义,因为解码器使用第三方库,并且需要传递大量 C 指针。为了简化内存管理等,我宁愿避免这种情况。

电影拥有一个具有明确定义接口的解码器,因为解码器本身是使用我的电影类中的策略模式实现的。

我想知道这种设计在信息隐藏和 SRP 方面是否良好。所有外部类都知道一部电影有一个带有一堆属性的解码器。让他们只知道有电影不是更好吗?但是电影类会变得非常庞大,并且会有很多只访问解码器属性的存根方法。

任何意见,将不胜感激。


编辑:

我深入研究了 Facade 模式(受@Erik 的回答启发),它看起来像这里的完美匹配。我可以进一步细分 Movie 类,但“外部世界”不需要了解细节以避免复杂性。但是,这将产生一个包含许多方法的 Facade 类。

因此,从外部看它是一个巨大的类,而从内部看它被很好地分成逻辑砖块。那你觉得还可以吗?

0 投票
2 回答
326 浏览

oop - 信息隐藏“更快”的方式?

我有一个关于面向对象设计原则和 Swift 的问题。我对 Java 非常熟悉,我目前正在学习 udacity 课程,以便在 Swift 中获得第一手经验。

在 Java 社区(基本上在每个遵循 OOP 的社区中),使用信息隐藏技术非常常见,例如在类中隐藏或封装数据以确保无法从外部对其进行操作。一个共同的原则是将类的所有属性声明为私有的,并使用 getter 来检索属性的值,并使用 setter 来进行操作。

在编写作为课程一部分的课程时,我尝试遵循这种方法,它看起来像这样:

该代码有效,并且无法从我的类外部访问我的私有属性,这正是我想要实现的行为。但是,我想到了以下问题:

1.) 课程讲师决定将属性的访问控制级别保留为默认的“内部”,并且不使用 getter/setter,而是直接从外部访问属性。关于为什么开发人员可能会迅速这样做的任何想法?我的方法不够“迅速”吗???

2.) 总之:在编写自己的类时,是否有一种“更快”的方式来实现封装?什么是 swift 的本机技术来实现我的目标信息隐藏?

0 投票
1 回答
896 浏览

c# - 如何在 C# 中使用函数隐藏带有随机数的敏感信息

我正在寻找一个函数,它可以接收如下示例中的一行客户信息:

然后,我将拆分该信息并使用此函数将其放入字符串数组中:

然后我需要另一个函数来执行以下操作:

用 1 到 9 之间的九个随机数字替换第一列数字,即社会安全号码。

然后第三列是客户的姓氏,我需要为姓氏的每个字符生成随机字母并替换它们。

在第 4 列中,这将是帐号,我需要将除最后 4 之外的所有数字替换为“X”。

在第 5 列中,即金额,我需要检查金额是否大于 100。如果是,我需要在信息行末尾创建一个新列,如果金额是,则说明是或否大于 100。

我将使用以下随机数生成器和随机字符生成器函数:

提前致谢!

0 投票
1 回答
1116 浏览

jquery - 在 FullCalendar + Google 日历中隐藏没有描述的事件

我正在使用 FullCalendar 2.3.1 和 Google 日历提要。

我知道您可以设置部分eventRender来显示/隐藏默认情况下未显示的事件的特定部分(例如在事件中添加事件描述)。我想知道是否可以使用回调函数作为“如果没有event.description,则不显示事件”。

这是我在查看时用于添加event.location和添加event.description到事件块的代码agendaDay

而且效果很好,那么是否可以对这种功能进行修改以隐藏当前在该领域中没有任何内容的事件event.description

非常感谢所有帮助!

0 投票
3 回答
20 浏览

encapsulation - 在某些情况下,对象应该知道他们的用户吗?

我正在为一个潜在的游戏奠定基础,但我在设计要封装但高效的类时遇到了麻烦。

通常,人们说对象应该很少相互依赖以保持模块化和封装性。

但是,有时让某个对象相互了解似乎很方便。

假设我们有一个名为 Dog 的类。

狗有主人,所以有一个狗主人类。

现在,如果我们有一个Dog,但我们没有它的所有者怎么办?getOwner()Dog. _

但是,这现在提供了Dog有关 的信息DogOwner,这似乎违反了信息隐藏。它似乎也造成了冗余,因为Dog有一个DogOwner,并且DogOwner有一个Dog

另一种寻找主人的方法是简单地浏览所有主人,找到对应的狗。虽然这不会产生 and 的依赖DogDogOwner但这似乎比它需要的要昂贵得多,因为我们必须循环遍历所有所有者。

那么,DoggetOwner()方法可以吗?如果不是,如果只知道 ,还有什么其他替代方法可以有效地访问所有者Dog

0 投票
0 回答
192 浏览

javascript - 在导出的闭包中隐藏 node.js 实现模块

我的 node.js 库中有一些“实现”(私有)模块,我不打算将它们导出给我的库的任何用户;但是,它required在 index.js 中。

一个简单的例子是:

我不想分发private_module_1private_module_2公开,只是来源index.js;但该代码依赖于私有模块。

是否有一个通用模式或工具可以用来在顶层放置/解决依赖关系index.js,以便我的库的用户无法直接访问私有模块?

更新(回应卢克在下面的评论):

我正在考虑在构建时转储顶级 index.js 中的所有内容,并在那里使用闭包 - 但我必须确保手动解决模块之间的排序/依赖关系,这似乎很痛苦。

需要明确的是,通过“隐藏”,我并不是指缩小/混淆的代码,只是清理命名空间和 API。