软件工程

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

10
我们可以没有构造函数吗?
假设出于某种原因,所有对象都是通过$ obj = CLASS :: getInstance()创建的。然后,我们使用setter注入依赖项,并使用$ obj-> initInstance();开始初始化。如果我们根本不使用构造函数,是否有无法解决的实际麻烦或情况? ps用这种方法创建对象的原因是,我们可以根据一些规则替换getInstance()中的类。 我在用PHP工作,如果那件事

5
用共享的编码范例就好像用语言Y编写程序一样,用语言X编写内容为什么不好?
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 不久前,我在SO上问了一些用C ++编写的东西,但是并没有得到解决这个问题的答案,而是对我的编码风格发了疯,即使当我指出这是WIP的一段代码时那是我打算在运行基本案例时清理它。(我的否决票太多了,因此我决定提出这个问题,因为我在SO上的代表已经非常糟糕了) 这让我想知道为什么人们会采取这样的强硬态度:“你是菜鸟,自己去他妈的”。我被指控像编写Java一样编写C ++。我无法理解的东西仍然让我感到困惑。 我已经用很多OOP语言编程了很多年了,尽管有时是间隔的。我会根据可用的库和最佳的执行环境选择要使用的语言。我在OOP代码中采用了设计模式,并且我非常有信心自己对模式的使用是正确的,并且在OO方面,我可以坚持自己的想法。我了解OOP工具箱,但仅在我认为确实需要时才选择使用这些工具,而不仅仅是使用整洁的技巧来展示我的编码才智。(我知道这不是一流的,但我认为也不是n00b级别)。 在写一行之前,我先设计代码。为了定义测试,我列出了某个类的目标及其必须遵守的测试标准。因为创建序列图然后编写代码对我来说比较容易,所以我选择在界面变得明显之后编写测试。 我必须承认,在我在问题中发布的代码段中,我仍在使用指针,而不是使用智能指针。我会尽可能使用RAII。我知道适当的RAII意味着要防范空指针,但是我会逐步工作。这是一项正在进行的工作,我打算稍后对其进行清理。强烈谴责这种工作方式。 我认为,首先应该有一个可行的示例,这样我才能确定基本案例是否是可行的思维方式。我也碰巧认为,在证明了基本情况之后,清理代码是敏捷重构阶段的典型操作。我必须承认,尽管我慢慢地了解Cxx标准,但我更喜欢使用自己了解的内容,而不是冒着使用尚未在生产代码中掌握的概念的风险。我偶尔会尝试一些新东西,但通常是在我为此而做的游戏项目中。 [edit]我想澄清一下,在我开始提出问题之前,我的搜索结果中并未显示的建议[1]。但是,尽管他的建议确实涵盖了该问题的一个方面,但他所链接的问题并没有回答我问题的核心,只是一部分。我的问题更多是关于我对编码风格的反应以及处理不同编码风格和(明显)技能水平的专业方面。关于我之前关于SO的问题,它就是一个恰当的例子。[/编辑] 然后的问题是:为什么嘲笑不使用您的编码风格的人? 我手头的事务/细分是: 如果重构使重构后的代码更健壮,为什么在原型情况下使用更多容易出错的代码将是不好的编程习惯呢? 用C ++编写的程序如何像用Java编写的一样?是什么使它成为不好的程序,(考虑到我指出了当前风格的意图以及计划中的改进工作)? 如果选择使用某种编程范例(例如OOP / DP)中使用的构造,我将如何成为一名糟糕的专业人员? [1] 快速发展,然后修正错误或缓慢,注意每一行代码?

4
为什么Java不使用某些类的封装?
我的问题与System.in和System.out类有关(可能还有其他类似标准库中的类)。这是为什么?在OOP中这不是不好的做法吗?它不应该被使用,如:System.getIn()和System.getOut()?我一直有这个问题,希望在这里能找到一个好的答案。

3
从JSON API返回HTML是否可以?
在我当前的项目中,我负责服务的实现,该服务涉及使用新创建的RESTful API,这些文档记录为仅支持JSON。 客户端始终使用“ application / json”的接受标头和“ application / json”的内容类型发出请求。但是,某些端点会发送带有HTML内容类型的响应,甚至是HTML正文。对我来说,这显然是错误的方法,永远无法辩解。 在整个项目中,相同的做法已应用于两个不同的供应商和两个不同的服务。我发现自己必须证明为什么需要更改服务。供应商表示,客户端应对此进行处理,甚至我选择的REST库也受到了质疑(RestEasy),因为默认情况下它不应对此问题。 这是一个主要的挫败点。我找不到很多引用来支持我的论点,我认为这是因为要点很明显,所以没有意义。 问题是,我缺少什么吗?我对此很腐吗?在这种情况下,可以使用不具有application / json内容类型的JSON API吗?参考将不胜感激。您如何从商业角度解决这种情况?

10
API设计:具体与抽象方法-最佳做法?
在系统之间(业务级别)讨论API时,我们团队中通常有两种不同的观点:有些人更喜欢(可以说)通用抽象方法,而另一些则是直截了当的“具体”方法。 示例:设计一个简单的“人员搜索” API。具体的版本是 searchPerson(String name, boolean soundEx, String firstName, boolean soundEx, String dateOfBirth) 支持具体版本的人说: API是自我记录的 很容易理解 易于验证(编译器或作为Web服务:模式验证) 吻 我们团队中的另一组人会说“那只是搜索条件列表” searchPerson(List<SearchCriteria> criteria) 与 SearchCritera { String parameter, String value, Map<String, String> options } 可能使某些枚举类型的“参数”。 支持者说: 在不更改API(声明)的情况下,实现可以更改,例如添加更多条件或更多选项。即使在部署时也没有同步这样的更改。 即使使用具体的变体,也需要文档 模式验证被高估了,通常您需要进一步验证,模式无法处理所有情况 我们已经有一个与其他系统类似的API-重用 相反的论点是 有关有效参数和有效参数组合的大量文档 需要更多的沟通工作,因为其他团队更难以理解 有没有最佳做法?文献?

4
我应该如何构建RESTful Web服务以使用第三方(即Google,Facebook,Twitter)进行身份验证?
对于我的工作,我们有一个不错的RESTful Web服务,我们已经建立了该服务,用于驱动我们拥有的几个网站。基本上,Web服务使您可以创建和使用支持凭单,并且网站负责前端。任何网络服务请求都使用auth标头,我们使用该标头来验证用户及其每次呼叫的密码。 今年,我们正在寻求扩展登录选项,以便网站上的用户可以通过Google,Twitter和Facebook(可能还有其他)登录。但是,我在弄清楚如何设计该结构方面很麻烦,因此Web服务可以使用第三方身份验证提供程序来确保用户就是他们所说的。是否有最佳实践来做到这一点? 当前,我们正在考虑让网站处理用户本身的身份验证,然后使用一个新的setSessionId调用来将其当前会话注册到Webservice后端。对Web服务的每个其他请求都将传递该sessionId并将对其进行验证。这些看起来还可以,但是我的内心深处感到我没有考虑透彻,所有浏览和阅读oauth和openid规范的论坛都让我更加困惑。有什么技巧可以解决这个问题吗?

1
关于DOM的一些说明
我一直在尝试了解DOM,尽管我对DOM有一个很清楚的了解,但是有些想法我无法确定。我将列出我认为的DOM,而我的问题将是内联的。 DOM是网页的完全面向对象的表示形式。W3C DOM标准构成了在大多数现代浏览器中实现的DOM的基础。 那么,DOM是否讨论了如何将XML / HTML文档表示为对象模型? DOM没有指定必须将文档实现为树或树林,也没有指定如何实现对象之间的关系。 可以通过其他什么方式表示文档? 当你做这样的事情- document.write('welcome to my home page!'); 文档对象由DOM提供。写方法是DOM向JavaScript公开的接口。 因此,这些对象及其方法由DOM解析器创建为JavaScript对象,然后呈现给JavaScript引擎?还是DOM解析引擎中的对象和方法使用自己的母语?并且暴露给JavaScript引擎?如果是这样,那么负责从JavaScript到本地语言的翻译是什么? 什么是语言绑定? 语言绑定是所讨论语言的本机对象集合,用于实现DOM规范中的每个接口。 开发人员只需遵循DOM规范中的IDL(接口定义语言),就可以创建从DOM到其语言的语言绑定。 因此,如果DOM解析引擎是用C ++实现的,这是否意味着当您遵循IDL创建语言绑定时,是否只是在使用特定语言(即DOM解析引擎所构建的C ++)创建对象?
25 javascript  dom 

6
TDD和版本控制
我目前正在学习TDD,并试图在我的个人项目中将其付诸实践。在许多这些项目中,我还广泛使用了版本控制。我对这两个工具在典型工作流程中的相互作用感兴趣,尤其是在使提交保持较小的原则上。以下是一些示例: 我开始一个新项目,并编写一个简单的测试以创建一个尚不存在的类。即使测试甚至无法编译,我也应该在编写类之前提交测试吗?还是应该在提交之前编译测试所需的最少代码量? 我找到一个错误并编写测试以重新创建它。我应该提交失败的测试还是实施错误修复然后提交? 这是两个立即想到的例子。随时在您的答案中提供其他示例。 编辑: 我在两个示例中都假设,在编写测试之后,我将立即编写代码以使测试通过。可能还会出现另一种情况:我在使用TDD的项目上工作了几个小时而没有提交。当我最终提交内容时,我想将我的工作分解成小块。(即使您只想在单个文件中提交某些更改,Git也会使此操作相对容易。) 这意味着,我的问题是一样关于为什么承诺,因为它是何时提交。

7
我们什么时候应该停止工作并制作工具?
作为软件工程师,我们一直渴望获得有效的工具来提高生产力。而且在日常工作中,我们通常对现有工具不满意,并且希望有更好的方法,例如更好的GDB脚本配置,Vim脚本和一些Python脚本来自动完成无聊的工作。 但是,实际上这是一个折衷,因为制作工具还需要时间和精力。它不会立即提高生产力。因此,您如何判断是否该是停止工作并提供一些减轻您未来痛苦的工具了?


8
重现错误的责任
我正在使用另一个程序员(他在同一家公司工作)制作的库来开发程序。最近,我在库中发现了一个泄漏,该泄漏在某些网络条件下运行了几个小时后才发生。我提交了一个错误,并附有导致此泄漏发生的条件说明。该开发人员回答说,“这还不够”,“重现错误不是他的责任”,我必须创建单元测试来重现此错误,否则他什么也不做。 是吗 在这种情况下我能做什么?创建单元测试是不可能的,因为它取决于一些随机的网络时间。

7
软件重用是否会妨碍流程的可重复性
代码重用成为问题 我一直在思考有关软件交付的问题,并且我一直回到可重复性和/或可再现性的问题。它们很重要,因为如果您不重复一个项目,那么改善用于构建项目的流程就变得更加困难。工程涉及不断改进与设计和施工有关的过程,以产生更高质量的项目。 由于其数字形式,软件可能严重依赖于重用。无需重写模块,我们只需再次调用它或将其复制到另一个系统即可。一些示例是身份验证/登录或登录功能。这些类别有许多众所周知的示例,并且传统的智慧是重用现有内容而不是自己动手做。 与其他学科的一些比较 施工 相反,物理系统(建筑物,桥梁)的构建远没有可重用的范围。确实,房屋的蓝图可以重复使用多次以建造房屋的相同副本,但是必须每次都执行建造。剪切和粘贴在模拟世界中不像以前那样工作。桥梁的蓝图比房屋的可重复使用性差,因为场地条件会有所不同。 大师级建筑商是公认的专家,他们在他们所在的地区设计和/或建造了数十,数百或数千个事物。例如,世界著名的建筑师兼设计师Frank Lloyd Wrightdesigned more than 1,000 structures and completed 532 works。与设计了“仅”五种语言(Turbo Pascal,Delphi,J ++,C#,Typescript)的Anders Hejlsberg形成对比。在很多方面,这是不公平的比较,因为域是不同的。但是从广义上讲,两个非常有才华的人的可量化生产差异很大。 武术 武术家会说,对动作的精通仅来自数千次重复。在完成大部分重复之后,许多武术家对于以前被认为是复杂的kata或形式变得如此简单感到惊讶。这些学生的讲师还将注意到运动如何变得更加流畅和有目的性,以及运动的经济性。同样,与没有经验的学生相比,经验丰富的武术家能够更快地拾起更复杂的kata。重复的经验为他们提供了一个框架或过程,使他们可以更快地学习。 木工 木工经历了类似的转变。业余爱好者木工总是回想起他们的第一个需要大量抽屉的项目。如果他们完成了该项目,他们将对装配线产生的效率重新获得赞赏。还有其他好处,例如更好地了解如何在单张纸料上放置抽屉部件,以最大程度地利用木材。与业余爱好者相比,专业的木工可以更快地设计,开始和建造他们以前多次制作的物品。他们还具有查看他人设计中固有错误的能力,而这些错误是他们工作中的错误。 那么,软件重用会阻止软件开发人员变得更加熟练吗? 在许多方面,软件设计和构建始终是新的。我们不会重复过去的工作,因为如果我们可以重用模块,库或系统,那么我们会做。在从头开始重写整个内容之前,我们将优先扩展现有系统。但是重复是使我们能够发现设计和构造效率的原因。任何进行过体育锻炼或体育锻炼的人都会告诉你,重复锻炼是成为一名优秀练习者的关键。 我的问题:软件的重用能力是否会阻止重复项目带来必要的流程改进和效率?

7
HTML5,本机和混合移动应用程序方法的优缺点是什么?
我想开发一个移动应用程序。我最近在Telerik论坛上阅读了一篇文章,该文章比较了三种类型的移动应用程序,但我不知道应该选择哪种类型。这是一张描述不同移动设计选择的利弊的图像 为了在这些设计选择之间做出决定,我想更好地理解图中列出的每种体系结构选择的利弊。每种架构方法的优缺点是什么?

2
克里斯·冈崎(Chris Okasaki)的1996年论文和1999年的《纯函数数据结构》一书在内容上有什么区别?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我想阅读纯粹的功能数据结构。我很容易找到论文(可以PDF形式免费获得),但也可以找到一本书。因此,我想知道这两个出版物之间的区别(如果有)。

4
为什么git不合并没有冲突的相邻行?
我最近了解到,当在git中合并两个分支时,如果相邻两行发生变化,则git声明这是冲突。例如,如果文件test.txt具有以下内容: Line 1: A Line 2: B Line 3: C Line 4: D 在分支中,master我们将其更改为 Line 1: A Line 2: B1 Line 3: C Line 4: D 而在分支中,testing我们将其更改为 Line 1: A Line 2: B Line 3: C1 Line 4: D 然后尝试合并testing为master,则git声明合并冲突。我天真的期望是合并不会发生冲突并产生以下结果: Line 1: A Line 2: B1 Line 3: C1 Line …
25 git  merging 

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.