软件工程

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

6
有效的try / catch块用法?
应该使用catch块来编写逻辑,即处理流控制等吗?还是仅仅为了抛出异常?它会影响代码的效率或可维护性吗? 在catch块中写逻辑有什么副作用(如果有)? 编辑: 我见过一个Java SDK类,其中他们在catch块内编写了逻辑。例如(摘录自java.lang.Integer课堂): try { result = Integer.valueOf(nm.substring(index), radix); result = negative ? new Integer(-result.intValue()) : result; } catch (NumberFormatException e) { String constant = negative ? new String("-" + nm.substring(index)) : nm.substring(index); result = Integer.valueOf(constant, radix); } 编辑2: 我正在阅读一个教程,他们将其视为在异常内编写例外情况逻辑的优势: 异常使您能够编写代码的主要流程,并处理其他地方的特殊情况。 有什么具体准则,何时在catch块中编写逻辑,何时不编写逻辑?

3
反思:使用反思仍然是“坏”还是“慢”?自2002年以来,反思发生了什么变化?
我已经注意到在处理表达式或表达式树时,我经常使用反射来设置和获取属性以及您所拥有的值。在我看来,反射的使用似乎越来越普遍。诸如用于验证的数据注释,属性繁重的ORM等之类的东西。我想知道:自从几年前和几年前我被告知尽可能避免反思以来,发生了什么变化? 那如果发生了什么变化呢?仅仅是机器的速度吗?是否对框架进行了更改以加快反思? 还是什么都没有真正改变?使用反射还是“不好”还是“慢”?
21 .net  reflection 

4
处理长期项目的产品版本控制和分支的最佳方法是什么?
一般而言,对于在产品生命周期中可能有多个版本并且需要先前产品支持的长期项目,处理产品版本和代码分支的最佳方法是什么? 从更具体的意义上说,假设适当的分布式版本控制在位(即git),并且团队的大小由小到大,并且开发人员可能同时从事多个项目。面临的主要问题是,有合同义务支持当时存在的旧版本,这意味着新开发无法修补旧代码(Microsoft Office产品可能就是其中的一个示例,您只能获得针对您拥有的功能年份)。 结果,当前的产品版本控制令人费解,因为每个主要产品都具有多个依赖项,每个依赖项都有其自己的版本,这些版本可能会在年度版本之间发生变化。同样,尽管每个产品都有其自己的存储库,但大部分工作不是在主要源主干上完成,而是在该年产品发布的分支上完成,而在发布产品时将创建一个新的分支,以便对其进行支持。反过来,这意味着获得产品的代码库并非易事,因为使用版本控制时可能会想到。

4
如何大幅提高代码覆盖率?
我的任务是让遗留应用程序处于单元测试之下。首先介绍一下应用程序的背景知识:这是一个600k LOC Java RCP代码库,存在以下主要问题 大量代码重复 没有封装,大多数私有数据都可以从外部访问,一些业务数据也成为单例,因此不仅可以从外部更改,而且可以从任何地方更改。 没有抽象(例如,没有业务模型,业务数据存储在Object []和double [] []中),因此没有OO。 有一个很好的回归测试套件,一个高效的质量检查团队正在测试和发现错误。我知道如何从经典书籍(例如Michael Feathers)中对其进行测试的技术,但这太慢了。由于存在工作正常的回归测试系统,因此我不怕积极地重构系统以允许编写单元测试。 我应该如何着手解决问题以快速获得覆盖范围,以便能够向管理人员展示进度(实际上是从JUnit测试的安全网中开始赚钱)?我不想使用工具来生成回归测试套件,例如AgitarOne,因为这些测试不会测试是否正确。


4
JavaScript的提示,确认和警报被认为是“过时的” [关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 最近,我一直在为体育馆开发基于Web的管理系统。他们以前的应用程序是用Visual Basic开发的。对于新应用程序,所有前端脚本都使用jQuery,服务器正在运行PHP和MySQL ...您知道,这是典型的基于el-cheapo linux的堆栈。 无论如何,我想知道为什么如今JavaScript的提示,确认和警报消息对话框没有得到充分利用。有很多用于模态窗口和警报消息的jQuery插件,它们试图模仿该语言已经提供的功能,并且每个浏览器都必须正确支持。 对于复杂的表单和特殊需求,可以使用手工制作或基于插件的解决方案,但是如果您只需要索取单个值或确认删除记录,为什么要将这样的开销添加到Web应用程序中?此外,当您使用提示,确认和警报时,iOS和Android提供了适应性强的消息对话框。

7
大型的基于Fortran的数字处理代码库如何现代化?
一个学术界的朋友向我征求意见(我是C#业务应用程序开发人员)。 他拥有一个遗留代码库,他在Fortran中编写了医学成像领域的代码。它使用向量进行大量的数字运算。他使用一个集群(30个核心),现在已转向拥有500个GPU的单个工作站。 但是,代码库的下一步是什么: 其他人可以在下一个10年周期内对其进行维护 更快地调整软件 可以在不同的基础架构上运行而无需重新编译 经过我的研究(这是一个非常有趣的领域),一些选择是: 使用Python和CUDA来自Nvidia的 用功能语言重写。例如,F#或Haskell 基于云并使用诸如Hadoop和Java之类的工具 学习C 您对此有何经验?我的朋友应该如何看待现代化的代码库? 更新:感谢@Mark和所有回答的人。我的朋友问这个问题的原因是,这是在项目生命周期中进行评估的最佳时机。在Fortran中提高研究助手的速度是需要时间的(我喜欢C#,尤其是工具,无法想象回到旧的语言!!) 我喜欢将纯数字格式保留在Fortran中的建议,但将其包装在较新的版本中。也许那样的Python似乎在学术界占有一席之地,这是一种相当容易掌握的通用编程语言。 请参阅Medical Imaging和为CUDA编写Fortran包装器的人,我可以将我的Fortran 90包装器合法发布到Nvidias的CUFFT库(来自CUDA SDK)吗?。
21 math  legacy  fortran 


2
处理程序,管理器和控制器之间的区别
命名类“ Handler”,“ Manager”或“ Controller”之间有什么区别吗?IE: ,PurchaseManager,。PurchaseHandlerPurchaseController 这些充分表达了相同的含义,还是它们之间有明显的区别? 如果没有与语言无关的答案,请考虑将Java作为语言。
21 java  naming 

14
对编程失去兴趣[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 我是本科二年级的计算机科学学生。我的问题很直截了当,但到目前为止仍然无法解决。仅仅是因为我对编程感到厌倦。我不知道为什么,但这只是发生了。 当我开始使用C ++开设第一门课程时,我感到非常兴奋。我非常激动,以至于我在2个月内完成了两本繁重的C ++书籍,远远超出了我的课堂和自己的期望。就像我可以轻松地开发算法并对其进行编码一样。我研究了很多C ++, 但是在过去的两个学期中,我几乎不喜欢编码,并且对此失去了很多兴趣或热情。 我也很喜欢CS学位的编程,但是即使这样我也无法设置。请告诉我该怎么办?我自己开始了C#和XNA Game的开发,但仍然就像我在推动自己。谁能给出建议,唤醒我内心的编码器?
21 motivation 



7
哪些命令式编程语言不支持递归?
据我所知,所有现代命令式编程语言都支持过程可以调用自身的递归。并非总是如此,但是我无法通过Google的快速搜索找到任何困难的事实。所以我的问题是: 哪些语言从一开始就不支持递归?何时添加了这种支持?

2
依赖注入与静态方法
今天,我与另一位开发人员进行了有趣的讨论,内容涉及如何使用接受字符串并输出字符串的方法处理类。 想象一下以下内容,它完全是出于示例目的而组成的 public string GetStringPart(string input) { //Some input validation which is removed for clarity if(input.Length > 5) return input.Substring(0,1); if(input.Substring(0,1) == "B") return input.Substring(0,3); return string.empty; } 一个基于字符串输入而具有某种逻辑的函数将使用DI添加到项目中,并且具有一个DI容器。您是否会使用接口添加此新类并在需要时将其注入,还是将其设为静态类?各自的优缺点是什么?您为什么要(或不希望)使它与构造函数注入一起使用,而不是在需要时随处访问。

1
是否有很好的形式化模式来管理MVVM中的状态?
我已经开始了解网络世界中的Redux和React,并且对它的了解越多,我越意识到WPF的MVVM风格的架构在桌面世界中的状态管理是多么痛苦(使用Caliburn专门绑定视图)。到ViewModels)。 Redux有一些简单的原则,指示如何管理状态,从而使UI更新,事件处理和状态更改更加可预测。原则是: 单一事实来源(所有可变状态都存储在单个共享库中)。 状态为只读。组件无法在整个代码中对其进行修改,这通常是WPF中发生的情况。 状态只能通过纯函数进行修改。 WPF的MVVM体系结构允许您非常快速地构建交互式视图,但是当各种视图模型和事件都改变状态时调试问题是一场噩梦。例如:触发了一个事件,该事件更改了视图并尝试设置默认选项卡,但是数据尚未从Web服务异步加载完成,因此该选项卡不存在(尚未),因此没有任何反应 我花了数小时来绘制图表,以尝试理解相互更新的相互关联的viewModels组件之间的复杂交互。 我了解Redux旨在解决这种状态不可预测的问题。是否有类似的东西,或与WPF很好地配合以更好地管理状态的体系结构模式?我不确定Redux原则在.NET中的运行情况如何,因为我还没有尝试过。也许有人有经验可以提供一些建议?
21 wpf  mvvm  state  redux 

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.