问题标签 [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.
wireshark - 像 Wireshark 这样的应用程序是如何工作的?
我想知道wireshark的功能。可以监听给定机器的所有端口上的流量的应用程序的设计是什么?这样的应用程序会产生什么样的偷听?编写监控流量的应用程序的好方法是什么?
谢谢
software-design - 在选择正确的工具时需要帮助
我有一个客户,他用某种 AI 语言建立了一个测试环境。它基本上运行一些预定义的测试用例并将结果存储为日志文件(逗号分隔的 txt 文件)。我的工作是确定和建议一个报告系统,我有这些选择。要么
1. 将日志导入 MSSQL 并使用它使用的报告(SSRS)
2. 或者我们将日志导入 MySQL 并使用 PHP 开发自定义报告。
我认为使用 option2 会更好。这样做的原因是,日志不一致并且包含通常 DB 不接受的意外通配符。所以,我可以在将它们加载到数据库之前在 php 中编写一些脚本。
任何人都可以建议如果这是您的问题,您会建议做什么?
c# - 为 Scrabble 的游戏实施设计一个灵活且可扩展的奖励系统
假设我正在实现我自己的 Scrabble 版本。我目前有一个Board
包含大量Squares
. ASquare
又由 aIBonus
和 a组成Piece
。奖金实现实际上是 Scrabble 的通常奖金,但我可能会尝试添加一些新的和扭曲的奖金来为游戏增添趣味——这里的灵活性是最重要的!
经过一段时间的思考,我得出的结论是IBonus
,要让实现工作,他们需要知道整体Board
及其当前位置(在 上Board
,所以它知道它在哪里,它可以检查相同的部分正方形作为奖金)。这让我感到很糟糕,因为它基本上需要知道很多信息。
所以,我的幼稚实现是将Board
as 参数传递给IBonus.calculate()
方法,IBonus.calculate(Board board, Point position)
即。
此外,它似乎创建了一个循环引用。还是我错了?
我不是特别喜欢这种方法,所以我正在寻找其他可能的方法。我知道我可以calculate
接受一个接口而不是一个具体的类,即,calculate(IBoard board)
但我 IMO 并不比第一种情况好。
我担心过于专注于我当前的实现,以至于无法想到至少可以适应这个问题的完全不同的设计以及解决方案。也许我可以重新设计整个游戏并将奖金放在其他地方,这样可以方便计算?也许我太专注于让他们上Board
?我当然希望有其他方法可以解决这个问题!
谢谢
database-design - 使用 MongoDB 的类似 Twitter 的应用程序
我正在制作一个使用经典“关注”机制的应用程序(Twitter 和网络上的许多其他应用程序都使用这种机制)。我正在使用 MongoDB。不过,我的系统有一点不同:用户可以关注用户组。这意味着,如果您关注一个群组,您将自动关注属于该群组的所有用户。当然,用户可以属于多个组。
这就是我想出的:
- 当用户 A跟随用户 B
following
时,用户 B 的 id 被添加到用户 A 文档中的嵌入数组(称为)中 following
对于取消关注,我从数组中删除关注用户的 id组以相同的方式工作:当用户 A跟随组 X时,组 X 的 id 被添加到
following
数组中。(我实际上添加了一个DBRef
,所以我知道连接是针对用户还是组。)当我必须检查用户 A是否跟随组 X时,我只需在用户 A的以下数组中搜索组的 ID 。
- 当我必须检查用户 A是否跟随用户 B时,事情变得有点棘手。每个用户的文档都有一个嵌入式数组,列出了用户所属的所有组。因此,我使用
$or
条件来检查用户 A 是直接关注用户 B 还是通过群组关注用户 B。像这样:db.users.find({'$or':{'following.ref.$id':$user_id,'following.ref.$ref','users'},{'following.ref.$id':{'$in':$group_ids},'following.ref.$ref':'groups'}}})
这很好用,但我认为我有一些问题。例如,如何显示特定用户的关注者列表,包括分页?我不能在嵌入文档上使用 skip() 和 limit()。
我可以更改设计并使用一个userfollow
集合,它可以完成与嵌入following
文档相同的工作。我尝试过的这种方法的问题在于,在$or
我之前使用的条件下,关注包含同一用户的两个组的用户将被列出两次。为了避免这种情况,我可以使用 group 或 MapReduce,我确实这样做了并且它有效,但我很想避免这种情况以使事情变得更简单。也许我只需要跳出框框思考。或者,也许我两次尝试都采取了错误的方法。任何人都必须做类似的事情并提出更好的解决方案?
(这实际上是我这个老问题的后续。我决定发布一个新问题来更好地解释我的新情况;我希望这不是问题。)
performance - 科学计算中网格数据的内存布局
我正在开发一个有限元系统。像往常一样,模拟由一组网格节点组成,每个节点都有一组属性(浮点),例如随时间演变的几个材料属性、坐标或物理量。
您可以采用两种极端方法:
属性方面:为每个属性维护一个数组:
double* x, *y, *z, *e_field, *b_field, *conductivity;
入口方式:维护一个数组,其中每个数组都是 struct
struct { double x, y, z, e_field, b_field, conductivity; } *meshnodedata;
在这些之间,可以混合使用,例如仅对坐标 x、y、z 应用第二种方法,而对其余属性使用第一种方法。您的模拟为每个网格节点维护的属性越多,混合的可能性就越大。
一方面,我有一个经典问题,就程序性能和代码可维护性而言,这些方法(及其组合)中的哪一种最适合科学计算。另一方面,我想知道如何以使不同方法之间的迁移变得容易的方式来实现代码。此外,它甚至可能是在程序不同部分的不同内存布局之间迁移的解决方案。
言归正传:
- 您对这些不同的方法有何经验?
- 这些差异有多大?
- 您是否获得了在这两种布局之间迁移的经验?
.net - 永远不要扔掉软件?
扔掉软件永远不会好吗?
Joel得出结论,公司永远不应该抛弃软件。
我努力成为一个优秀的小程序员并遵循这个规则。我参加了一个由一个人经营的五年历史的项目。它充满了反模式,通常设计不佳。大多数问题都来自使用内联动态 SQL 的数据层。
- 专业人士:用户熟悉这个应用程序的工作方式并且对它的错误感到满意。需求是构建出来的,但是有一些潜在的问题导致用户质疑应用程序的整体可靠性。
- 缺点:反模式、强耦合、内联 SQL、不可能的数据层。
我可以重新收集需求并使用 OO、设计模式和现代 .NET 技术构建这个应用程序。易于管理和团队合作。
在小型应用程序中,遇到诸如此类的问题,我们应该听从 Joel 的建议吗?
这个问题可能会因为主观而被抛出,但我发现这对我作为程序员的工作至关重要。
.net - 为不同版本的 3rd 方库设计实用程序
我继承了一个应用这种解决方案的项目:
有 5 个版本的 3rd 方库。解决方案中有 5 个项目,其中包含相应版本的 3rd 方库的实用程序。
解决方案中的很多实用程序类对于所有版本的 3rd 方库都有相同的代码。重复问题以这种方式解决 - 所有项目需要相同的代码文件存储在某个公共文件夹中,并作为链接添加到所有项目。
我不认为使用链接来共享代码是最好的方法。你能告诉我这是否是一种不好的方法,如果是这样,请告诉我.resolve这种代码重复的正确方法是什么?
提前致谢。
software-design - 有哪些学习软件设计/架构的好书?
不是一本讨论如何编码的书,而是更高级的软件组织。
design-patterns - 设计模式?我怎么理解他们
大家好,我是软件工程师。我三年级的学生现在我正在“软件设计”课程中学习设计模式问题是这些东西真的很难获得你知道任何简化的指南或视频来理解这些概念吗?!我的专业是下周考试,我需要早点准备,希望你能给出最简单的参考来理解它们
design-patterns - 为数据库模型建模是设计复杂和大型企业应用程序的好方法吗?
我们正在开发一个怪异的大型面向服务的多层应用程序,它必须从头开始设计。现在我们需要开始编程,并尝试组装第一块砖。
问题是从哪里开始?有些人建议我们应该从设计持久数据模型开始,这样可以提供更清晰的视图。这是一个好方法吗?
为 Suirtimed 编辑
这里没有太多的敏捷文化。这是一个 SOA 风格的项目,使用 WCF、SQL Server、实体框架(使用域对象的 POCO 生成器)、ASP MVC 和 Workflow Foundation。我们是一个由 4 名开发人员组成的团队;相当熟练(但不是专家)。