问题标签 [design-choices]

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 投票
8 回答
203154 浏览

java - Java泛型-为什么允许“扩展T”但不允许“实现T”?

我想知道在 Java 中是否有特殊原因总是使用“ extends”而不是“ implements”来定义类型参数的边界。

例子:

被禁止但

是正确的。这是什么原因?

0 投票
3 回答
153 浏览

components - 提交 SmartGwt 或 Swing 等组件库有什么危险吗?

自今年 2 月以来,我一直在开发一个使用 SmartGWT 组件构建的应用程序。一般来说,我发现这些组件非常好用,而且它们是开源的并且可以免费使用的事实真是太棒了。但是,我似乎无法摆脱这不是一种持久的开发方式的感觉,但我无法解释为什么。也许是因为我知道开发它的团队现在随时可能决定停止,这会让我和我的团队陷入困境,但我相信肯定还有更多。

我一直在想办法向自己解释这种感觉,但无济于事。因此,亲爱的社区,我求助于您,询问您是否可以提出一个充分的理由,为什么承诺使用诸如 SmartGWT 之类的组件库来构建您的应用程序(这应该会存在很多年)是一个坏主意? 有什么理由我应该自己开发组件吗?还是在决定不重新发明轮子而只选择现成的东西时,我是否做出了正确的选择?

0 投票
4 回答
355 浏览

c++ - 为什么 STL 容器使用复制来填充调整大小?

所有实现的 STL 容器都resize使用副本来填充新元素,即使副本的源是默认构造的对象?

为什么这样做?

我认为没有优势和一些成本。


作为上下文,我在寻找无法复制的元素的随机访问容器时遇到了这个问题:

0 投票
2 回答
124 浏览

c# - 我们什么时候应该使用 Action并且不创建自定义委托

我们什么时候应该使用Action<T>而不是明确定义委托?

谢谢

0 投票
1 回答
1952 浏览

mongodb - MongoDB中的有向无环图设计模式

问题

像往常一样,问题是在数据库中显示有向无环图。我拥有的数据库选择是关系数据库,如mysqlmongodb。我选择 mongoDb 是因为关系数据库中的 DAG 很乱,但是如果有什么我没找到的技巧,请告诉我。

目标是将 DAG 映射到一个或多个 MongoDB 文档中。因为我们有多个孩子父母的子文档,这是不可能的。我遇到了多种设计模式,但不确定哪一种最适合。


具有祖先数组的树结构

Ancestors Array由 mongoDB docs 建议。而且很容易理解。据我了解,我的文档如下所示:

这使我可以find像这样的元素的所有子元素:

所有的父母都是这样的:

DBRefs 而不是字符串

我的第二种方法是用 s 替换字符串键DBRef。但除了更长的数据库记录之外,我看不到祖先数组有很多优势。

children带有和的基于字符串的数组parents

最后一个想法是不仅存储children每个文档的,而且还存储它parents。这将为我提供我想要的所有功能。缺点是我会通过两次存储所有关系来创建大量信息开销。此外,我担心管理的数量。例如,如果一个文档被删除,我必须检查所有其他文档以获取多个字段的参考。


我的问题

  • 出于此目的,MongoDb 是不是关系数据库的正确选择?
  • 我错过的任何模式是否有任何优点/缺点?
  • 你会建议哪种模式,为什么?您可能对其中之一有经验吗?
0 投票
2 回答
1792 浏览

c++ - Why do data() and c_str() return char const*, while operator[] returns char&?

Why do std::string::data and std::string::c_str() return pointers to const chars, while std::string::operator[] returns references to mutable chars?

Why don’t std::string::data() and std::string::c_str() return char*, or why doesn’t std::string::operator[] return char const&?

What is the rationale behind this?

0 投票
1 回答
565 浏览

haskell - 为什么 <$> 是左结合的?

fmap也是<$>因为它是$函子范畴中的函数应用( )。

然后我想,在那种情况下<*>是应用函子类别中的函数应用程序,这应该可以工作:

因此,<$>仅适用于因为fmapfor 函数恰好是后合成,所以(+5) <$> (*10)变成(+5) . (*10)然后应用于[1,2,3].

然而,在我看来,所有应用程序运算符(<<=包括)的左关联性似乎是一个糟糕的设计选择,尤其是在他们认识到与$已经右关联的相似性之后。还有其他原因吗?

0 投票
0 回答
10 浏览

json - JSON - 为单词着色或使列出的选项显示为可供查看者识别的不同选项

在 SharePoint 列表设置中,我有在选项中创建的主题(复选框 - 允许多项选择)。我在一个主题下一个接一个地列出了各种类型的不同选择(这是它在编辑模式下的外观),如下所示;

  • 不适用
  • 合格证书
  • 出生国家
  • 国家特定认证..

我的问题是;

  1. 我如何在 JSON 中编写格式化命令以启用选择的选项加下划线并显示为一个接一个地列出的不同行,因为它显示在上面的编辑模式中。
  2. 如果我上面的第一个问题在 JSON 格式中是不可行的,那么 JSON 是否可以具有仅对某些单词(如“*”)着色(红色)的命令能力。这至少会简化查看模式,以便查看者能够识别在一行文本中陈述的不同选择,如下所示。(这使得它很难遵循)
  • 不适用 * 合格证书 * 原产国 * 国家特定认证 ..

感谢您提供 JSON 完整命令,该命令将为上述两个问题提供解决方案。

0 投票
2 回答
48 浏览

c++ - 为什么是 reverse_iterator::base 偏移量?

(ASCII 从这个答案中复制和编辑,这实际上是提示我提出当前问题。)

我确实看到了它的好处&*rit == &*(rit.base() - 1),因为这样我可以将rit.base()用于任何反向迭代器rit,并且我总是会得到一个有效的迭代器。

但同时

  • 我不能取消引用v.rbegin().base();我必须记得先减去 1, *(v.rbegin().base() - 1),
  • 我不能完全取消引用v.rend().base() - 1,因为我不能取消引用v.rend()

如果设计就是这样&*rit == &*rit.base()呢?

  • 我们不能调用, 是的,但这只是对应于当前设计v.rend().base()中无法取消引用;v.rend().base() - 1
  • 我们将无法v.end()直接从反向迭代器中获取,甚至不能从最接近的迭代器中获取b.rbegin(),但- 1我们必须rit.base()在当前设计中添加到以获取与反向相同元素的正向迭代器。

我的意思是,在我看来,无论设计决定是那个&*rit == &*(rit.base() - 1)(原样)还是那个&*rit == &*rit.base(),我们都会有同样的便利

  • rit.base()在实际设计中总是可以的,
  • - 1在替代设计中通常不需要

和不便

  • 不能取消引用rit.base()实际设计中的所有有效 s,
  • 需要进入+1 v.rbegin()替代v.end()设计,

只是在相反的情况下。

所以我的问题是:做出确实已经做出的选择是否有明确的优势?或者它只是一枚翻转的硬币?