软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

5
在API设计中,何时使用/避免临时多态性?
Sue正在设计一个JavaScript库Magician.js。它的关键是Rabbit从传递的参数中拉出一个函数。 她知道它的用户可能想从a String,a Number,a Function甚至甚至是a中拔出一只兔子HTMLElement。考虑到这一点,她可以这样设计API: 严格的界面 Magician.pullRabbitOutOfString = function(str) //... Magician.pullRabbitOutOfHTMLElement = function(htmlEl) //... 上面示例中的每个函数都知道如何处理函数名称/参数名称中指定的类型的参数。 或者,她可以这样设计: “临时”界面 Magician.pullRabbit = function(anything) //... pullRabbit必须考虑该anything参数可能具有的各种不同的预期类型,以及(当然)意外类型: Magician.pullRabbit = function(anything) { if (anything === undefined) { return new Rabbit(); // out of thin air } else if (isString(anything)) { // more } else if (isNumber(anything)) …

7
如果我的代码不能兼而有之,那么应该是DRY还是可读的?
我正在为一个简单的加密练习编写Ruby代码,并且经常遇到这个难题(如果您必须知道的话,该练习是单人密码)。这是一个问题,我是否应该使用使函数可读的描述性变量和单步语句来填充我的逻辑,而不是使用简洁,密集的语句来消除重复和/或最大程度地减少错误的机会,从而填充我的逻辑。 我最近的例子:我的程序接受输入,并且由于严格的格式准则,它可以轻松确定输入是否应该加密或解密。为简化起见,一旦加密密钥和消息被转换/生成为兼容,就可以从加密消息中减去密钥,或者将密钥添加到未加密消息中,以获得所需的输出(将密钥视为加密,消息+加密=代码;代码-加密=消息)。DRY位置告诉我,我应将加密的消息与未加密的消息进行不同的转换,这样就无需区分使用加密密钥并将其应用于消息的功能。我发现这意味着我需要在函数中嵌套一些if语句,但逻辑似乎很牢固。但是,此代码不容易阅读。 另一方面,我可以编写两个不同的函数,这些函数根据应用程序确定加密或解密时设置的标志来调用。这将更易于阅读,但会复制将加密密钥应用于消息的高级功能(导致对其进行加密或解密)。 我应该倾向于可读代码还是简洁代码?还是我错过了获得此功能并满足这两个原则的另一种方法?这是一个必须考虑项目目的并做出最佳决策以达到该目的的规模吗? 到目前为止,相对于可读代码,我倾向于强调简洁的DRY代码。

3
什么是测试中的开发人员?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我最近正在与一名招聘人员交谈,该人员希望将我安排在一家公司中担任Test Developer的职位。从本质上讲,他听起来像一个职位,您可以摆弄新的编程技术,测试软件中的错误和改进,但是不必担心标准截止日期。您将在工作中变得很有创造力。 但是这种描述对我来说还是有点模糊。我从事Web开发已经有很多年了,主要是使用PHP。所以我想知道社区中的其他人是否更多地了解这些职位通常需要做什么。 我知道这可能不是适合该论坛的主题,但是这是我在Stack Exchange中可以找到的最合适的东西,如果没有关闭,我将不胜感激,因为在这里实际上没有其他地方可以询问它了。 。 我已经尝试过Google搜索,但是那里没有很多信息。那么测试中的开发人员到底是什么?

1
Java版本之间的差异摘要?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 2年前关闭。 这个问题的答案是社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 在软件开发方面,Java版本之间的主要区别是什么?在哪里可以找到与编程相关的最重要变化的摘要? 诸如http://www.oracle.com/technetwork/java/javase/releasenotes-136954.html之类的发行说明可能很难阅读。 例如,Java 1.5中有一个“针对每个”的新代码结构。
14 java  versioning 

12
哪些技能不是学校通常不教授的专业编程必不可少的?[关闭]
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么您的答案正确的解释。答案不够详细的答案可能会被编辑或删除。 关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我是计算机科学专业的一年级学生。我参加了招聘会,分发了简历,令我惊讶的是,我接受了一次面试,最终获得了作为开发人员的实习机会。 我向面试官(将是我的老板)解释说,我只是第一年,没有大量的编程经验。他只是告诉我,因为我在数学方面有很强的背景(我的数学学士学位几乎已经完成,再加上我的一些研究生课程),所以他相信我会做得很好。 我在所有编程课程中都做得不错,但是我仍然觉得自己处于劣势。现在,我真的只是想在开始时做好这项工作。这项工作将主要使用C#,但是除了学习一些C#之外,您希望成为真正的程序员之前还应该学习哪些技能? 任何建议都将不胜感激,但是如果您有任何书籍请告诉。谢谢!
14 skills 

8
在面试中,为一个棘手的问题编写暴力解决方案还是花点时间仔细地检查问题是更好的选择吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 有时候,面试问题很难,无论面试官是否打算如此。可以选择使用有限的采访时间来编写丑陋,低效,蛮力的解决方案,还是花时间与采访者一起了解问题的各个方面。 例如,可以通过计算每个可能的三角形,编写isRightTriangle()测试并将通过测试的所有三角形弹出到集合中的不太困难的蛮力解决方案来解决Euler项目中的问题91。但是两对X / Y坐标使O(x ^ 4)解具有较高的恒定值。我和一个朋友提出了一个更加优雅,高效的解决方案,但是我们两个人花了3个小时在上面,绘制了数十张图表,测试了多种公式,研究了多种方法,等等。 并非每个面试问题都是公平的。同样,对一个人来说简单的事情对另一个人来说可能很难。如果有人在为一个问题而苦苦挣扎,那么有效的蛮力丑陋解决方案会让您印象深刻吗?还是出色的问题理解能力和无懈可击的解决方案,但却没有编码解决方案?是否有类似20分钟后的规则,无论如何都应该开始编码?

3
面向对象编程:为什么要“面向对象”?
我大部分时间都在学习游戏编程学位。这不是计算机科学学位,因此避开了许多理论,以建立实用的档案袋以及我认为的JIT学习,这显然在游戏行业中更为重要。第一个主题是“面向对象编程简介”。 直到我了解了不同的编程范例(我从https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms获得此列表)后,该短语才使我感到困扰: 势在必行 功能性 程序 结构化的 事件驱动 面向对象 陈述式 基于自动机 我知道这并不是一个详尽无遗的清单,并不是所有这些概念都是平等的,而且它们中的大多数甚至都不是排他性的,但是我不明白为什么其中大多数只用一个词-必要;功能 声明-但是当我们谈论使用对象编程中,我们必须澄清,我们面向围绕这些对象。我们不能只使用对象吗?我们就不能有对象吗?他们为什么要把我们定位为我们的指导明星? 在这里(https://en.wikipedia.org/wiki/Object-iented_programming),无处使用“定向”一词作为自己的术语。仅解释“对象”。 另外,出于实际原因,我可以看到使用事件驱动的原因,因为事件编程已经是您在运行会议时要做的事情,而自动机编程听起来就像您正在建立机器人生产线,因此,在此处添加其他澄清词会有所帮助。 是什么使“对象编程”作为一个短语不足以描述我们在编程中使用对象时所做的事情? 显然,从我的语气来看,我不太喜欢“面向”一词。这让我想起了我当法院记者的经历,是在律师使用“与……有关”这一短语作为一种口头记号之后,听听律师的话。没什么意思 这只是他们在尝试思考接下来要说的内容时常使用的术语。但是,我并不是要提倡改变语言,我只是在问为什么是这样。如果有人知道为什么纯粹出于历史,遗迹原因而被人们以这种方式知道,那就是答案。如果我决定浪费时间主张改变语言,那将是弹药。 另一方面,如果实际上有一种有用的原因,为什么某种语言或一段代码必须指向对象,而将所有其他方向都排除在外,而不是仅仅将它们作为工具放在工具带中,那我真的会有兴趣了解它。我喜欢学习有用的东西。

1
我是否应该编写测试以证明删除代码可修复错误?
有时候,我会遇到这样的情况:修复错误需要删除一段代码。TDD的纯粹主义者会(我认为)提倡编写一个失败的测试,删除代码,然后查看测试通过。 现在,有一个测试断言某些代码已被删除真是很奇怪。当然,我想它可以确保没有人去研究源代码控制并将该代码放回去,但这值得吗?如果值得的话,它似乎比为已添加的代码编写测试要有价值,对吧?
14 unit-testing  tdd  bug 

4
实现安全关闭是否需要垃圾收集?
我最近参加了有关编程语言的在线课程,其中介绍了闭包。我写下了两个受本课程启发的示例,以便在提出问题之前提供一些背景信息。 第一个示例是一个SML函数,该函数生成从1到x的数字列表,其中x是该函数的参数: fun countup_from1 (x: int) = let fun count (from: int) = if from = x then from :: [] else from :: count (from + 1) in count 1 end 在SML REPL中: val countup_from1 = fn : int -> int list - countup_from1 5; val it = [1,2,3,4,5] …

4
在流利的API中使用自然语言语法
我正在修改基于WebSQL / Phonegap数据库API的查询抽象,我发现自己既对定义一种模仿自然英语语法使用的流畅API感兴趣,又对此表示怀疑。 通过示例解释这可能是最简单的。以下是我语法中所有有效的查询,并且注释说明了预期的语义: //find user where name equals "foo" or email starts with "foo@" find("user").where("name").equals("foo").and("email").startsWith("foo@") //find user where name equals "foo" or "bar" find("user").where("name").equals("foo").or("bar"); //find user where name equals "foo" or ends with "bar" find("user").where("name").equals("foo").or().endsWith("bar"); //find user where name equals or ends with "foo" find("user").where("name").equals().or().endsWith("foo"); //find user where name …
14 javascript  api 

3
使用策略模式的Java通用文件解析器设计
我正在开发一种产品,其中一个模块的职责是解析XML文件并将所需内容转储到数据库中。即使目前的要求只是解析XML文件,我仍希望以一种将来可以支持任何类型文件的方式设计解析模块。采用这种方法的原因是,我们正在为特定客户生产该产品,但计划在不久的将来将其出售给其他客户。当前客户端的生态系统中的所有系统都会生成和使用XML文件,但其他客户端可能并非如此。 到目前为止,我尝试了什么?(现在) 我想到的是基于策略模式的以下设计。我很快就用eclipse编写了代码以传达我的设计,因此,如果暂时忽略其他方面(如正确的异常处理方式),那将是很好的选择。 Parser:公开解析方法的策略接口。 public interface Parser<T> { public T parse(String inputFile); } *使用泛型参数的原因是允许任何返回类型以及在编译时确保类型安全。 ProductDataXmlParser一个具体类,用于解析包含产品相关信息的product.xml文件。(使用XMLBeans) public class ProductDataXmlParser implements Parser<ProductDataTYPE> { public ProductDataTYPE parse(String inputFile) { ProductDataTYPE productDataDoc = null; File inputXMLFile = new File(inputFile); try { productDataDoc = ProductDataDocument.Factory.parse(inputXMLFile); } catch(XmlException e) { System.out.println("XmlException while parsing file : "+inputXMLFile); …
14 java  design  parsing  xml 

5
在离散数据结构中存储文本中的元数据
我正在开发一个应用程序,它将需要存储inline,intext元数据。我的意思是这样:假设我们有一个长文本,并且我们想存储一些与特定单词或文本句子相关的元数据。 存储此信息的最佳方法是什么? 我的第一个想法是在文本中包含某种Markdown语法,然后在检索时将对其进行解析。看起来像这样: Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam __nonummy nibh__[@note this sounds really funny latin] euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. 这会带来两个我想到的问题: 相对较小的是,如果所说的语法恰好在所说的文本上,它可能会使解析混乱。 最重要的是,这不会使此元数据与文本本身保持独立。 我想拥有一个离散的数据结构来保存这些数据,例如一个存储这些元数据的不同的DB表,这样我就可以以离散的方式使用它们:查询,统计信息,排序等等。 编辑:既然回答者删除了他的答案,我认为在这里添加他的建议可能是一件好事,因为这是在第一个概念上扩展的可行建议。海报建议使用类似的语法,但对元数据链接到PRIMARY KEY该的metadata数据库表。 看起来像这样的东西: Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam __nonummy nibh__[15432] euismod tincidunt …


1
我们使用存储库模式正确吗?
我们正在使用一堆带有后缀的独立类,-repository以从数据库中检索数据。每个表都有自己的存储库。 例如,我们有一个customerrepository具有各种方法来检索客户的类,并且具有一个vacancyrepository具有各种方法来检索空缺的类。 关于这种做事方式,我有两个问题: 如何获取跨越多个表的数据?例如,我有一个屏幕,显示所有尚未创建空缺的客户。可以customerrepository从中使用方法vacancyrespository,还是两个存储库都返回结果,并且层次结构中是否有更高的类(我们将其命名为a dataservice)从两个存储库中获取结果并将它们合并为1个结果? 这样的存储库可以处理多少逻辑? 我认为可以在存储库中实现“ where active == true”以仅检索活动记录,还是应该由层次结构中较高的类来处理简单的逻辑(将其命名为a dataservice)? 我现在遇到的示例是以下示例: 我们有一个问题列表,其中包含一个或多个问题。 问题可以有一个结果,该结果保存在单独的表中。 因此,当您要检索问题列表的总结果时,必须合并questionlist表,问题表和questionstatus表中的数据。 现在,我们为这些表提供3个不同的存储库。 如果我要问questionlistrepository清单12的总结果是什么,那将不得不从另外两个存储库中获取数据,因此其中有些逻辑,这是允许的吗? 还是有questionlistdataservice哪个知道要使用哪个存储库? 还有一件事:我们的存储库可以生成一个结果,IQueryable以便调用服务可以轻松地合并结果,但是如果不是这种情况,我认为从列表中检索所有三个表的所有内容不是一个好主意。数据库。

2
如何使ASP.NET MVC网站模块化
我正在计划用ASP.NET MVC 4构建的员工Intranet系统。我们希望该站点由单独的“模块”组成,每个模块都提供不同的功能:消息传递,薪资变更等我希望这些模块能够在编译时启用或禁用。主页将显示某种导航,该导航将链接到所加载的每个模块。 到目前为止,这很容易,但是我不希望导航功能必须事先了解模块。换句话说,我希望模块是动态可发现的。我希望能够为新模块编写代码,然后将链接添加到导航栏中,而源代码中其他任何地方都没有代码更改。每个模块都应该有某种向导航栏注册的方式,更重要的是,每个模块在加载时都应完成此操作。 我认为这排除了使用MVC的区域的能力,因为这些区域是针对事先知道站点布局的情况而设计的。尽管人们似乎已经成功地将MEF与MVC相结合,但MEF似乎是适当的。MEF实际上是到达这里的方法,还是有更好的方法来完成我需要的工作?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.