问题标签 [design-decisions]

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

c++ - 我在哪里可以存储用于可视化某个对象的加载纹理?

我有一个可绘制的类Button。是否应将其纹理存储并隐藏在内部:

...或者记住某种代理并提供一个没有灵魂的吸气剂供“更聪明”的抽象使用是否更明智?

第一种方法似乎表示Button为一个完全组成的对象,但知道绘图子模块。第二种设计摆脱了这种耦合,并且(可能)更容易并行化;然而,它Button看起来像一个愚蠢的 DTO,并且提供的界面不太方便(尽管在提供的示例中差异并不明显,但真正的例子很痛苦)。

通常首选哪个决定,为什么?是否有我没有注意到的任何可能的问题(或其他解决方案)?

0 投票
0 回答
17 浏览

c++ - 一个对象如何根据其状态等待不同的请求?

我的班级通过其公共方法Controller操纵一些。Object这就是问题所在: canObject请求的某些更改Controller在执行任何进一步的操作之前需要进行一些澄清。怎样才能干净利落地解决?这是一个简单的实现,可以使问题更容易理解:

是否有更清洁的设计决策?这是我的想法(如果您愿意,在提出自己的想法之前可能不应该阅读):

但是,它似乎仍然不是一个很好的解决方案。还有更好的吗?

0 投票
1 回答
50 浏览

c++ - 如何向我的班级提供有关其环境的一些信息?

这是我在考虑封装和组合的情况下编写的代码示例:

基本上,只有一个弹丸在无处移动。然而,子弹实际上可以例如从墙上弹跳,其speed发生显着变化。有没有考虑这种相互作用的好方法?我既不想让我Bullet知道“高级”类(应该自己使用它),也不想写一个像这样的一次性解决方案:

更新:如果你想缩小这个问题,值得一读。这是移动 s 的期望逻辑的简化示例Bullet(我并不是指Bullet::move()成员函数!)以及它们与其他实体的交互:

Creature所有由注释表示的代码都应该使用和Wall classes的一些属性。

0 投票
3 回答
220 浏览

c# - 我如何最好地将税级和收入写成要在代码中计算的变量?

我已经尝试了很多次,似乎只是在旋转我的轮子。我如何正确地将税级和金额写成人们可以输入不同收入金额的变量,并在代码中进行计算,而不是像我在代码中那样写出来?

我能够在我想要达到的目标方面取得更多进展。我需要有关如何分配这些变量以及如何正确编写输出的帮助。

0 投票
2 回答
666 浏览

java - 为什么 getMonth 在 java.sql.Date 和 java.util.Date 上被弃用

我应该以我使用 Apache Spark 作为开头,它使用java.sql.Date,以防有人建议我应该使用java.time. 下面的例子是在 Scala 中。

我使用(已弃用)获取日期月份的 API 如下:

但是,如果我看看我应该如何根据弃用来执行此操作,则上面的代码将被重写如下:

代码的简单性和可读性明显不同,从函数式编程的角度来看,日期作为日历的副作用并不是非常好。有人可以解释为什么他们认为做出了这种改变吗?

0 投票
0 回答
45 浏览

c++ - 设计决策:在浮点表示法类的辅助函数中确定适当的算法

我正在研究一个以科学计数法表示数字的类,并计划在数字计算中克服浮点精度......

通常,如果我们有两个浮点数,如图所示:

我们可能会遇到精度问题以及舍入误差。

为了尝试解决这个问题,我决定设计一个类,该类基于以科学计数法进行计算的原理。

这是我班级的主要结构:

现在我正在研究算术运算符:operator+(const &obj), operator+=(const &obj), operator-(const &obj), operator*, operator*=, operator/, operator/=...

现在,在我们可以Addor之前Subtract,它们必须具有相同的幂次...

+我正在考虑创建一个私有辅助函数来进行此转换,然后在 my , +=, -, &运算符中调用它-=...

在我的函数中,我正在考虑找出哪个具有更大的指数,然后我想将低阶对象转换为高阶对象......

如果LHS's 的指数大于RHS's 那么我想转换RHStoLHS并且如果RHS大于LHS...


请不要暗示std::scientific我知道存在,这不是我所追求的。


然后我是否必须使用另一个ternary运算符返回两者中较小的一个?或者,无需执行一堆条件检查......是否有任何可行的算法具有stl或某种类型的 lambda 表达式,这将有助于这部分过程?

另外,我正在计算它们之间的差异,然后检查该差异是负数还是正数......如果它是负数,那么我使用abs()from<cmath>否则如果它是正数,我不打电话abs()......现在,这只是一个附带问题,因为它与此功能及其设计有关......最好不要进行条件检查而只是调用abs(),还是在两者之间进行分支会更好?

我需要编写另一个函数,它将是另一个辅助函数,其中一些运算符在执行算术计算后将调用该函数以将最终结果转换为系数介于[1,10]if 之间的Base10,但该函数未编写但是因为我需要完成这个convert()功能。

我知道我想做什么,但是在尝试使用适当的技术和算法时,我在设计决策上有些挣扎。

我感谢任何和所有的反馈、提示、建议等。

0 投票
1 回答
30 浏览

java - 在java中声明自定义可配置应用程序的配置?

所以对于我的一个爱好项目,我想创建一个在两个服务之间转换 HTTP 调用和请求的应用程序。

应用程序根据用户可以设置的配置来执行此操作。这个想法是应用程序侦听传入的 API 调用,然后转换调用,然后转发它。

然后应用程序等待响应,然后翻译响应并将其发送回调用者。

翻译可以像重命名正文对象中的字段值或将标题字段替换为正文一样简单。

我认为翻译应该从映射正确的 URL 开始,所以这里有一个我认为配置应该如下所示的示例:

我在想配置应该放在一个 .txt 文件中并由应用程序读取。

我的问题是,还有其他类似的系统使用配置文件进行这样的配置吗?还有其他/更好的方法来声明配置吗?

0 投票
0 回答
77 浏览

javascript - 纸牌游戏的编程约束

我想实现一个纸牌游戏。我知道约束编程。但我认为它用于寻找问题的“解决方案”。特别是当有无数种可能的解决方案时。

就我而言,游戏有很多规则,但没有那么多。解决方案将是玩家可能采取的行动(有结果,我认为这是另一个问题)。其他操作根本不会被允许。

例如:

一局一局

  1. 规则 1:较高的点卡(数字)赢得另一张点卡
  2. 规则 2:一张脸较低的牌赢另一张

一轮多场比赛

  1. 规则 3:如果玩家 A 出示点卡,玩家 B 出示面卡,则为平局,需要再玩一次。

...

这些是基本规则,还有更多。我更擅长 Python、JavaScript 或 Java。

我真的不想用很多嵌入的 if-else 条件来解决这个问题。

我学习了语言理论,这似乎很合适。如果您不知道它是什么,您可以根据表达式(如正则表达式)在语言中设置可能的“单词”。

例如:

产量

将这些术语视为可能的操作,以这种方式实现游戏是可能的。但我会实现这样的解析器或从 String 到 Actions 的映射。这一切都是可能的,并不难。但是这种编程方式有没有可能(可能更容易)的实现?

我遇到了 Google 的 Or-tools,但它是一个约束求解器。它可以工作,但我不确定,我会在上面投入更多时间。

0 投票
1 回答
140 浏览

c# - 为什么是 ImmutableList一个类但 ImmutableArray一个结构?

当您阅读ImmutableArrayImmutableList的文档时,您可以看到:

  • ImmutableArray<T>已被实施为struct
  • ImmutableList<T>已被实施为class

问题:

你能解释为什么这样的设计决定吗?

特别是,为什么ImmutableArray<T>struct.

毕竟System.Arrayclass这样,为什么不是这样ImmutableArray<T>呢?

0 投票
1 回答
46 浏览

python - 根据数组中的对象做出条件决策

我目前有一个包含其他对象数组的对象

我需要根据子数组来决定如何处理 Object。使用上面的示例,如果对象中存在合格的 343 和 245,我想对对象做 X,但是,如果只存在合格的 343,我想对对象做 Y。

有没有一种有效的方法可以在没有对象多次迭代的情况下做到这一点?或者将数据转换为更易于访问的格式?