软件工程

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

5
确定最快路线的算法?
假设我们要从1转到5。最短的路线将是1-4-3-5(总计:60公里)。 我们可以使用Dijkstra的算法来做到这一点。 现在的问题是,由于交通拥堵或其他因素,最短的路线不一定总是最快的路线。 例如: 1-2被认为经常发生交通拥堵,因此应避免这种情况。 突然在4-3发生车祸,因此也应该避免。 等等... 因此,由于没有交通阻塞/事故,我们大概可以在1-4-5号路线上加速行驶,因此速度会更快达到5。 好吧,这是总体思路,我还没有考虑更多细节。 有没有解决这个问题的算法?
17 graph  dijkstra 

6
鸭子是否正在输入多态性的子集
从WIkipedia上的多态 在计算机科学中,多态是一种编程语言功能,它允许使用统一的界面来处理不同数据类型的值。 从维基百科上的鸭子打字 在使用面向对象的编程语言进行的计算机编程中,鸭子类型是一种动态类型的类型,其中对象的当前方法和属性集确定有效的语义,而不是其从特定类或特定接口的实现继承。 我的解释是,基于鸭子的类型,对象的方法/属性确定了有效的语义。这意味着对象的当前形状决定了它所坚持的界面。 从多态性可以说,如果一个函数接受多种不同的数据类型,只要它们支持一个接口,则该函数就是多态的。 因此,如果一个函数可以忽略类型,则它可以接受多种不同的数据类型并对其进行操作,只要这些数据类型具有正确的方法/属性并因此维护接口即可。 (术语“接口”的使用不是作为代码结构,而是作为描述性的文档结构)。 鸭型与多态性的正确关系是什么? 如果一种语言可以鸭式输入,是否意味着它可以做到多态?

4
在什么时候应该切换到发布版本?
Jez Humble的“ 持续交付”中阐述的一种做法是,您应该构建一个软件包,然后将其发布到部署到的每个环境中,以便在投入生产之前,已经多次测试了部署和工件。 我完全支持这个想法。 另一方面,为您提供带行号的堆栈跟踪的调试模式构建在测试环境中非常有用,远程调试功能也是如此。但是,您想将发布版本发送到生产环境。 那么,对于遵循第一条原则的人们,您在什么时候从调试版本切换到发行版本? 是在第一次部署到测试环境之前,确定丢失调试模式的成本值得确保您尽早测试实际的候选发布版本吗?还是您在升级过程中的某个时候再次构建,以为您会信任构建过程而不是软件?还是只是将所有内容搞砸了,然后将调试版本部署到生产中? 注意:我知道这并不真正适用于解释语言,因为您通常可以在配置中轻按开关,而不是在构建时进行切换。

5
哪个版本控制系统可以管理所有方面?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 几个月前,我钻研了Subversion和GIT,感到很失望。他们可以很好地处理源代码,但不能处理其他方面。例如,受版本控制的网站需要管理文件/目录所有权,文件/目录的读写访问权限,访问控制列表,时间戳,数据库内容。和外部链接。是否有一个版本控制系统可以像从一个月前的备份中重新加载一样完美地完成还原?

2
抽象异常超类型
如果System.Exception认为投掷很糟糕,为什么一开始就没有Exception做出abstract? 这样,将无法调用: throw new Exception("Error occurred."); 这将强制使用派生异常来提供有关发生的错误的更多详细信息。 例如,当我想为库提供自定义异常层次结构时,通常会为我的异常声明一个抽象基类: public abstract class CustomExceptionBase : Exception { /* some stuff here */ } 然后是一些派生的异常,其目的更加具体: public class DerivedCustomException : CustomExceptionBase { /* some more specific stuff here */ } 然后,在调用任何库方法时,可以使用此通用try / catch块直接捕获来自库的任何错误: try { /* library calls here */ } catch (CustomExceptionBase ex) …

5
结对编程时如何实现并维持流程?
流是Mihaly Csikszentmihalyi提出的概念;简而言之,它意味着进入“区域”。您会沉浸在工作中,专注于工作;这项任务可能很困难,但同时又充满挑战。当人们实现潮流时,他们的生产力就会猛增。编程需要大量的精神关注,因为我们经常需要一次兼顾脑海中的几件事。许多人喜欢在一个安静的环境中工作,在那里他们可以全神贯注于任务。如果它们被打断,可能要花费几分钟甚至几小时才能恢复正常。 我了解敏捷开发和极限编程中有一种称为结对编程的实践。这意味着您将整个软件开发团队放在一个房间中,以便无缝沟通。您确实要与一对伙伴一起编写代码,因为通过这种方式,您可以立即进行代码审查,并且可以减少更少的错误。 由于不断的中断,在进行结对编程时,我一直遇到实现流程上的问题。我在思考一个问题,然后突然有人问我另一个问题。我的思路迷路了。 结对编程时如何实现并维持流程?

2
DDD-Lite是一种用于依赖注入的模式语言吗?
我偶然发现了格雷格·杨(Greg Young)的演讲DDD项目失败的7个原因,他在7:20提到了他称为DDD-Lite的内容。 概括地说,他基本上说有些人将DDD用作模式语言(实体,存储库,值对象,服务等),而没有做任何其他与DDD相关的事情。他假设.Net中60%或更多的域模型是DDD-Lite。他认为DDD-Lite基本上是在围绕依赖注入构建一种语言,而您实际上并不需要这样做。他说要么完全做DDD,要么做一些简单的事情。否则,他声称一个人正在为构建良好的抽象而进行所有这些工作,但是没有任何实际的好处。 我必须承认,我对DDD的了解不尽如人意,并且还没有尝试使用它。我也没有读过Eric Evan的书。我对依赖注入更加感兴趣,关于此主题的许多书籍和博客都使用Eric Evans的DDD书籍中的术语和参考概念。这是我接触过DDD概念的地方。我一直在阅读的书籍包括: .NET中的依赖注入 Microsoft .Net:为企业设计应用程序 .NET中的Brownfield应用程序开发 如果要进行依赖注入,那么比“ DDD-Lite”更简单的选择是什么?在我看来,建立良好的抽象非常有用,无论人们是否以“ DDD-Lite”方式使用DDD中的概念。(请参阅Mark Seemann的博客文章:接口不是抽象,而是迈向更好的抽象)。我很难相信每个进行依赖注入的人也都在做(或需要做)完整的DDD。我是否以某种方式误解了格雷格·扬(Greg Young)关于DDD-Lite的论点?

3
作为业余爱好者加入开源项目是否很糟糕?
我已经考虑了大约六个月,我应该加入一个开放源代码的iPhone或iPad项目来磨练我在Objective-C中的技能,但是每次我这样做时,我都会看到我在大型项目中看到成千上万行代码最终说服我自己,我永远不会理解。我一直认为我的承诺最终只会给项目管理员和更多高级贡献者带来麻烦,因此我总是在最后一秒退缩。 我的问题本质上是,有中级经验的程序员加入开源项目时会很麻烦吗?

8
如何在嵌入式设备上进行TDD?
我对编程并不陌生,甚至在AVR上使用过一些低级C和ASM,但我确实无法涉足更大规模的嵌入式C项目。 由于Ruby的TDD / BDD理念退化,我无法理解人们是如何编写和测试这样的代码的。我并不是说这是一个不好的代码,我只是不明白这是如何工作的。 我想更多地参与一些底层编程,但是我真的不知道该如何处理,因为它看起来就像是我习惯的完全不同的思维方式。我在理解指针算术或分配内存的方式方面没有问题,但是当我看到与Ruby相比C / C ++代码看起来多么复杂时,这似乎很难。 由于我已经为自己订购了Arduino开发板,所以我很想深入了解一些低级C并真正了解如何正确地做事,但是似乎高级语言的规则都不适用。 甚至有可能在嵌入式设备上或在开发驱动程序或自定义引导加载程序之类的东西时进行TDD吗?

5
在编写大型应用程序时使用Vim
我开始学习Vim,并遵循stackexchange中此处给出的一些建议。我开始在一些玩具项目中使用它,对此我感到很高兴。 但是我开始想知道如何在不始终打开​​其他文件的情况下提高工作效率,只是想知道该类的名称如何,其他文件中包含的宏是什么,等等。 您可以提供哪些常见建议?

4
为什么仍在积极开发弱类型语言?
我想知道为什么仍在积极开发弱类型语言。例如,一个人可以从写作中获得什么好处 $someVar = 1; (...) // Some piece of code $someVar = 'SomeText'; 而不是使用截然不同的版本 int someInt = 1; (...) string SomeString = 'SomeText'; 确实,您需要在第二个示例中声明一个附加变量,但这真的有害吗?并非所有语言都应努力实现强类型化,因为它会在编译时强制执行类型安全性,从而避免类型转换中的某些陷阱?

5
服务在SOA中共享数据库是不好的做法吗?
我最近一直在阅读Hohpe和Woolf的企业集成模式,Thomas Erl的一些关于SOA的书,以及观看Udi Dahan等人的各种视频和播客。在CQRS和事件驱动系统上。 我工作场所中的系统耦合度很高。尽管理论上每个系统都有其自己的数据库,但是它们之间有很多连接。实际上,这意味着所有系统都使用一个庞大的数据库。例如,只有一张客户数据表。 我读过的大部分内容似乎都建议对数据进行非规范化处理,以便每个系统仅使用其数据库,并且使用消息传递将对一个系统的任何更新传播到所有其他系统。 我认为这是在SOA中强制执行边界的一种方法-每个服务都应该有自己的数据库,但是我读到以下内容: /programming/4019902/soa-joining-data-across-multiple-services 这表明这是错误的做法。 隔离数据库似乎是解耦系统的一种好方法,但是现在我有点困惑。这是一条好路吗?是否曾经建议过在SOA服务,DDD绑定上下文,应用程序等上隔离数据库?

13
#define的适当使用是否可以简化重复代码的键入?
对于使用#define定义完整的代码行来简化编码是否有好的看法还是有什么看法?例如,如果我需要一起打印一堆单词,我会很讨厌打字 << " " << 在cout语句中的单词之间插入空格。我可以做 #define pSpace << " " << 和类型 cout << word1 pSpace word2 << endl; 对我来说,这既不会增加代码的清晰度,也不会减少代码的清晰度,并且使键入变得更加容易。在其他情况下,我可以想到在哪里键入通常会更容易进行调试。 有什么想法吗? 编辑:感谢所有的伟大的答案!在进行了很多重复的键入后,这个问题才出现在我的头上,但是我从没想过会使用其他的,不那么混乱的宏。对于不想阅读所有答案的人,最好的选择是使用IDE的宏来减少重复的键入。

2
Windows Phone 7应用程序开发-值得吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我已经编写了Windows Phone 7应用程序来显示在英国非常受欢迎的军械测量地图(令我惊讶的是,还没有其他人这样做)。但是,当我开始调查人们如何从人们购买的应用中实际获得报酬时,我就要花65英镑来购买应用中心并把我的应用推向市场。显然,如果您不是美国开发商,那么您必须开始发送表格,例如W8BEN表格吗?并且即使在此之后,IRS仍会再占30%(在MS占30%的份额之后)。它还提到了增值税,所以在此之后也许还会有更多的钱起飞呢??? 美国以外的任何人是否实际上将所有文书工作都整理了下来,以便得到报酬?您也减免了税款吗?您最终获得了多少销售额?值得吗? 我不希望从该应用程序中获得多少收益,但我想我可以收回65英镑,也有足够的钱购买几杯啤酒。

7
相当于Linq的最佳Java是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 Java中是否有任何库可以提供Linq的功能?
17 java  linq 

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.