问题标签 [software-design]
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.
javascript - 收藏品知道它所包含的收藏品——有这种气味吗?
好吧,这可能是一个奇怪的问题,也许我走错了方向,但这是我的问题:
我有一个 SearchForm 对象,其中包含一组 Tag 对象。当用户单击 Tag 对象时,它会突出显示自身并触发事件。SearchForm 类监听这个事件并提交自己。Tag 对象与 SearchForm 无关。
到现在为止还挺好。
现在一些标签在点击时必须激活其他标签。每个标签都知道它必须激活哪些其他标签。但为了做到这一点,它必须知道搜索表单持有的整个标签集合。
如果一个标签实例(=集合项)引用了所有其他标签的完整列表(=集合),那会是“坏”吗?
当然,这样的一些事情是可行的:
Tag is clicked -> SearchForm is notified -> checks if the clicked tag must activate some others -> SearchForm activates the needed Tags itself
.
但这似乎有点尴尬,或者不是?
software-design - 目前推荐哪些好的“软件设计”书籍/资源?
我最近申请了一些科技巨头的几个全职职位,这是我收到的一些反馈之一。
我知道良好的编码实践通常需要什么,但我不太确定大型软件设计不仅融合了创造力,还融合了敏锐的技术焦点。
大家有什么推荐的?
user-interface - 过度控制是不好的。但当?
我记得读过一条法律(好吧,也许不完全是法律),但在软件设计中,为用户提供大量控制权而没有真正让他选择基本模式和高级模式有时会适得其反并使用户最终首先不使用任何选项,因为它们太多了。我读对了吗?如果是这样,有人可以指出我更正式的来源吗?
python - 如何以模块化的方式设计应用程序?
我正在寻找关于“如何以模块化方式设计应用程序”的指针、建议、链接、警告、想法甚至轶事。我打算在这个项目中使用python,但是建议不一定要引用这种语言,尽管我只愿意实现基于OOP的设计。
这里有一些上下文来了解我来自哪里以及我想要实现的目标......
我的项目将是一个小型应用程序,它将使用 Web 服务并以多种方式显示结果,包括:
- 仅包含呼叫结果的通知弹出窗口
- 应用程序主窗口中的选项卡,其中包含从检索到的原始数据绘制的图形
- 消息缓冲区(在域上可见),来自各种服务的结果将堆积起来
该应用程序将作为免费(as-in-speech)软件发布,因此我想让其他开发人员非常容易编写插件/模块,这些插件/模块将扩展主应用程序的功能而无需更改核心代码。
此时,插件本质上应该使开发人员能够通过定义提供者、数据操作(如果有的话)以及将数据呈现给用户的方式来激活新的 Web 服务。
我在使用具有强大模块化方法的drupal进行开发方面拥有丰富的经验,但它也遵循非面向对象的设计,因此我怀疑对于 python,drupal 设计可能不是最佳解决方案。
如果这很重要 - 核心将为 GNU/Linux 原生开发。
提前感谢您的宝贵时间!
python - 完整菜鸟的设计原则?
我已经编程了大约一年,而且我写的所有东西都有效——从我的角度来看,它写得非常糟糕。我想知道是否有任何(免费)关于软件设计的好书可以为初学者提供一些指导?如果我对软件设计的思维过程有一点了解,我认为我不会遇到那么多问题。
java - Java内部类迭代器问题
我在使用 inner 时遇到了困难Iterator
。
然后,我尝试迭代它:
但它不起作用。(请参阅有问题的行上注释的编译器错误)。我在这里做错了什么?
在工程笔记上,解决我的问题的正确方法是什么?我有一堆这种形式的循环:
所以我决定一个Iterator
会更干净。这是矫枉过正,还是有其他方法可以做到?
c# - 使用常量字段与初始数据
我正在设计一些新的类图来扩展现有的办公自动化应用程序。在特殊情况下,我可以选择使用 Entity1 上的额外字段来确定某些内容,或者使用 Entity2 中的其他数据行来确定。我相信第一种方法更好,因为它不会强迫我们在新安装中部署我们的应用程序时插入初始数据,但 BOSS 坚持认为第二种方法更好,因为它不会向当前类图注入任何更改(Entity1 和 Entity2 现在都存在并且正在使用中)。
我想知道哪一个真的更好,如果我是对的,那么我怎样才能让他相信我的方法更好呢?
更新:在下面的类图中,SendingInforamtion 是 Entity1,LetterStatus 是 Entity2。
java - 平衡设计原则:单元测试
我正在编写香蕉图的模拟。目前,我有一个GameMaster
类来维护共同的作品集合。该deal(Player)
方法将一定数量的棋子发给该玩家。
我想为此编写单元测试。但是,此时我没有 getter,因此无法检查对象的状态。
为什么不添加吸气剂?我不想将代码添加到公共接口仅用于测试。现在,没有其他理由公开这些功能。
我应该在这里做什么?无论如何都要添加 getter,弄乱公共 API(或者希望将来需要它们)?放弃单元测试?(听起来是个坏主意。)
或者,这是否表明我的公共接口存在缺陷?
java - 最小的 API v. 便利性
我正在尝试设计将在内部用于我的应用程序的界面。效仿 Google 的例子,我努力减少公共 API 的混乱。但是,有一些便利方法是根据最小方法定义的。当我在方便和整洁之间寻求平衡时,我应该考虑哪些因素?
谷歌示例:在HashBiMap
(文档)中:
为什么 BiMap 没有 getKeyForValue() 方法?
我们确实考虑过(Doug Lea 甚至半开玩笑地建议将其命名为 teg()!)。但你并不真的需要它;只需调用 inverse().get()。
接口上的一个例子Set
:add()
andremove()
是最小的方法,而addAll()
andremoveAll()
是为了方便起见。addAll()
可以add()
根据Set
. 但它确实清理了客户端代码。
我考虑过创建一个Utility
包含更多便利方法的类。但是后来我离开了 OOP,我必须在每次调用中包含正在操作的对象作为参数。虽然我猜这遵循 JavaCollections
类的例子。
design-patterns - 如何解释具有复杂限制的操作失败
我正在实施一个系统,客户可以使用优惠券获得购买折扣。代金券是否可用于特定购买取决于多种情况。
例如:
- 正确的优惠券代码 - 代码是否正确?
- 有效期 - 凭证是否仍然有效?
- 优惠券可以与购买的类型一起使用吗?
- 允许组合 - 优惠券可以与其他优惠券组合使用吗?
- 还有很多 ...
还有一些更复杂的限制需要检查。如果不满足一项或多项限制,则客户无法使用优惠券,我想告知他/她有关失败的原因,并解释“为什么”他无法使用此优惠券,例如:
“你不能使用这张凭证,因为它已经过时了。”
我现在的问题是:您将如何实施检查?
在自己的类中实现每个限制,将它们链接起来并抛出异常?(这里的问题,可能会执行几个相同的数据库查询)在一个方法中实现所有限制?(真的,为什么?)一般来说,如果对操作应用了复杂的限制,您如何实现必须通知客户端有关失败细节的机制?
谢谢,