软件工程

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

4
C ++和Java中的抽象类/接口是否有不同的用法依据
根据Herb Sutter的说法,应该更喜欢抽象接口(所有纯虚函数)而不是C ++中的抽象类,以尽可能地实现分离。虽然我个人认为该规则非常有用,但是最近我加入了一个由许多Java程序员组成的团队,并且在Java代码中似乎没有该准则。函数及其实现通常位于抽象类中。因此,即使对于C ++,我也将Herb Sutter弄错了吗?还是与Java相比,C ++中抽象函数的用法是否存在一般差异?在Java中,带有实现代码的抽象类比在C ++中更明智吗?如果是,为什么呢?

3
Shell脚本的用户配置。最佳做法?
我正在编写带有一些应由用户配置的变量的shell脚本。可能会出现一系列问题,将提供一个用于下载和配置脚本的安装程序。该脚本针对其他开发人员。 这可以通过多种方式实现: 在脚本本身中使用占位符,并sed在安装过程中用于替换占位符(如下所示:https : //stackoverflow.com/questions/415677/how-to-replace-placeholders-in-a-text-file) 优点:所有变量定义都包含在脚本中。手动下载脚本并为喜欢编辑器而不是安装程序的用户配置变量很容易。 缺点:一旦安装到位,就很难通过安装程序重新配置变量。除非我创建一个更复杂的正则表达式,否则容易出错。 使用配置文件(基本上是另一个带有分配的shell脚本),并使用source它来包含它。(并且可能将其放置在~/.scriptname?主脚本已复制到中/usr/local/bin) 优点:重新配置脚本很容易。甚至可以从主脚本中添加用于这样做的参数(可能也可以在第一个解决方案中使用,但是从本身编辑脚本听起来不是一个好主意) 缺点:该脚本现在依赖于两个文件,并且要求用户运行安装程序才能创建配置文件。如果不存在,可以通过自动生成配置文件来解决。但是,对于只想下载脚本,进行编辑并完成脚本的用户而言,查找外部配置文件仍然比较麻烦。 另外,关于安装后用户应如何管理配置的一些选项: 像 $ myscript config server.host example.org 这样的Git $ myscript config server.proxypath / home / johndoe / proxy $ myscript config server.httppath / home / johndoe / web Interactive $ myscript config 输入服务器主机名:example.org 输入服务器上代理 的路径:/ home / johndoe / proxy …

4
如何确定设计模式是否正确实施?
我可以成功扩展所有未使用记录的设计模式的旧应用程序。我不知道是什么模式。在很大程度上,我只觉得需要使用简单的OOP概念。 设计模式的概念很复杂,很难理解。在实施时,如何确定实施是否正确以及应用程序是否具有真正的松散耦合?

2
在Git中检查提交数据的正确方法是什么?
我的目标是检查不满足某些要求的提交数据,然后拒绝正在创建或推送到远程存储库的提交。 进行预提交挂钩的问题在于,很难将其部署给许多必须手动更新其预提交挂钩文件的人。同样,Git不允许您在.git文件夹中包含子模块,这对部署来说非常容易,可惜。 我看到的另一个选择是进行检查,我相信远程的更新挂钩,它将检查开发人员推送的每个提交,如果任何提交未通过测试,则拒绝该推送。 有人对此问题有见识吗?如果是这样,您能否提供或指出一个示例更新挂钩脚本?我对它的工作方式有些困惑。
13 git 

3
在固定的固定时间内初始化数组-这个技巧叫什么?
有这种数据结构可以交换数组访问的性能,而不需要在清除数组时对其进行迭代。您需要为每个条目保留一个世代计数器,以及一个全局世代计数器。“清除”操作会增加生成计数器。在每次访问时,您都要比较本地生成计数器和全局生成计数器。如果它们不同,则将该值视为“干净”。 这是最近在Stack Overflow上的答案中提到的,但是我不记得这个技巧是否有正式名称。可以? 如果只需要放松节点的一小部分子集,并且必须重复进行一次,Dijkstra算法就是一个用例。


11
您如何向不在CS领域的人解释使用[分布式]版本控制系统的重要性?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 一个适合该描述的人的很好的例子可能是项目经理。 前几天我的老板问我:“这个Github东西是什么,为什么它很重要?” 他有一些专有项目,所以他需要私人托管,我发现自己无法尽力解释:VCS使协作变得微不足道,提供了所有数据的历史记录和“备份”,并允许您在代码库中记录基本更改。 。在我的脑海中,我想:“几乎就像您必须使用DRVS来真正理解它的好处一样”。 我最终将他指向BitBucket,因为它们为您提供了无限的私有存储库(我什至不得不解释什么是存储库)。 有没有人有一个非常好的具体示例,说明VCS如何节省了资产或使生活更轻松等-基本上,您如何将DVSC出售给不熟悉编程但又不是专业程序员的人?
13 dvcs 

2
我应该从WCF交换到NserviceBus吗
我们有一个中央服务器,可以从位于客户端网络中各个位置的多台PC发送和接收消息。为了简化此操作,目前,我将WCF与TCPNetBindings结合使用,并使用通过证书保护的双工通信。 现在,我们有很多问题-主要是我们被要求支持“断开模式”(我们需要容错)。据我所知,没有简单的方法可以使用WCF堆栈执行此操作-我们需要实现一些功能,也许还要使用msmq。我最近一直在研究NServiceBus,从中可以看出它似乎很合适-容错能力,可以通过简单的http网关通过Internet发送消息等。我知道它在社区中广受尊重,并且从调查中可以看出原因。 所以,我的问题是……使用NServiceBus听起来像是一个明智的主意,还是有人有与此相关的任何其他建议/现实世界经验?我想我担心引入的新技术我了解的相对较少,并且面临诸如保护它,以可靠的方式设置一切,一路走来的陷阱之类的问题。.我也对“黄金-电镀”的体系结构,然后选择一些有光泽的方法,最终会使我在实现过程中陷入困境,而不是坚持使用WCF并使之对我有用。 谢谢!

5
对于支持数据验证的ORM,是否也应在数据库中强制执行约束?
除了(ActiveRecord)模型外,我还始终在数据库级别应用约束。但是我一直在想这是否真的必要吗? 一点背景 最近,我不得不对模型的基本自动时间戳生成方法进行单元测试。通常,测试会创建模型的实例并保存而不进行验证。但是表定义中还有其他必填字段不能为空,这意味着即使我跳过ActiveRecord验证,也无法保存实例。因此,我在考虑是否应该从数据库本身中删除此类约束,并让ORM处理它们? 如果我跳过db,imo中的约束,可能的优点 - 可以修改模型中的验证规则,而不必迁移数据库。 可以跳过测试中的验证。 可能的缺点? 如果可能ORM验证失败或被旁路,则数据库不会检查约束。 你怎么看? 编辑在这种情况下,我使用的是Yii Framework,它从数据库生成模型,因此也生成了数据库规则(尽管我总是可以自己在生成后编写它们)。
13 database  orm  validation  dry 

5
经典OOP优于Go语言
我一直在思考语言设计以及“理想”编程语言所必需的要素,而对Google Go的研究使我提出了很多其他常识。 具体来说,Go似乎从面向对象的编程中获得了所有有趣的好处,而实际上没有任何面向对象语言的结构。没有类,只有结构。没有类/结构继承-仅结构嵌入。没有任何层次结构,没有父类,没有显式的接口实现。取而代之的是,类型转换规则基于类似于鸭子类型的松散系统,因此,如果结构实现“阅读器”,“请求”或“编码”的必要元素,则可以对其进行转换并使用它作为一个。 用C ++和Java和C#实现的OOP是否具有某种固有的功能,更可维护,更强大的功能,而在转向Go这样的语言时,您必须放弃这些功能?为了获得这种新范例所代表的简单性,您必须放弃什么好处? 编辑 消除了读者似乎过分迷恋和激怒的“过时”问题。 问题是,在普通语言实现中经常看到的传统的面向对象范式(具有层次结构等)必须提供哪些在这种简单模型中无法轻松实现的范式?或者,换句话说,如果您今天要设计一种语言,是否有理由要包含类层次结构的概念?

9
我应该告诉已故的同事“ sev 1”缺陷吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 7年前关闭。 我有一个同事最近离开我们公司。在离开之前,他对一个具有严重内存泄漏并导致生产中断的组件进行了编码(OutOfMemoryError使用Java)。问题本质上是一个HashMap增长且从未删除条目的问题,解决方案是将其替换HashMap为缓存实现。 从专业的角度来看,我认为我应该让他知道缺陷,以便他可以从错误中学习。另一方面,人们离开公司后,他们通常不想听到遗留在更大,更好的事情上的遗留项目。 这种情况的一般协议是什么?

2
如何应对临时心态?
我在两个月前加入了六个开发团队。人很好,一切都很好。但是越来越多的我观察到一种特别的心态。东西很快就被修复了,但以将来的可用性为代价,几乎没有测试,两个人高兴地承认,他们喜欢把知识带到脑海中,而不是写下来。 该如何处理?我想以身作则,但时间有限-我喜欢架构和实际实现这些东西。但是我担心,临时的心态会感染我,而不是在设计和代码上力求清晰,简单(这并不容易建立),我被无休止的黑客循环激化了-这没有局外人可以解耦-仅出于进度和管理的考虑。

8
代码文档放在哪里?
我目前正在使用两个系统编写代码文档(上午使用C ++): 使用Doxygen格式在代码旁边添加有关方法和类成员的文档。在服务器上,Doxygen在源上运行,因此可以在Web浏览器中看到输出 概述页面(描述一组类,应用程序的结构,示例代码等)被添加到Wiki中。 我个人认为这种方法很简单,因为有关成员和类的文档确实与代码接近,而概述页面确实很容易在Wiki中进行编辑(并且还很容易添加图像,表格等)。Web浏览器允许您查看两个文档。 我的同事现在建议将所有内容都放入Doxygen,因为我们可以创建一个包含所有内容的大帮助文件(使用Microsoft的HTML WorkShop或Qt Assistant)。我担心的是,编辑Doxygen样式的文档要困难得多(与Wiki相比),尤其是当您想要添加表,图像等时(或者Doxygen的“预览”工具不需要您生成)代码才能看到结果?) 大型开源(或封闭源)项目使用什么来编写其代码文档?他们还将Doxygen样式和Wiki分开吗?还是他们使用其他系统? 公开文档的最合适方法是什么?通过Web服务器/浏览器,还是通过大的(几个100MB)帮助文件? 在编写代码文档时,您采用哪种方法?

3
人们在Objective C中编程时会使用const吗?
相关:“将'const NSString *'发送到类型'NSString *'的参数将丢弃限定符”警告 有时候,我认为这很有用。我可能需要传递一个表,并要确保该表的内容不会更改。 但是,在大多数Objective-C程序示例中,我从未见过const。我的问题是为什么?

10
我们应该记录站立会议吗?
我公司的另一个团队开始记录他们的站立会议,但是我认为这是浪费时间。据我所知,站立会议仅用于交流,不用于状态报告(如果我错了,请纠正我) 那么,我们应该记录站立会议吗?
13 agile 

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.