软件工程

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

3
帮助新手程序员时的合适词汇
我发现自己经常会帮助新手程序员。解释为什么他们的代码在询问时不起作用,并提出解决方案之类的建议。我正在帮助的人员接受了Java一年级学位课程的编程方面的正规教育,但是我觉得我无法与他们很好地交流。 例如:一个人可能编写了一个函数,但不理解为什么不执行它,却没有意识到他们忘记了调用它。如果我使用like这样的短语"(make a) call (to) the function/it","pass it the.."我会显得空白。 然后,我的正常流程是在代码中找到一些地方,以使他们从语言中调用函数,并告诉他们可以像调用此另一个函数一样调用自己的函数。有时,即使看起来空白。 还有其他词汇更适合(更好吗?)帮助新手程序员?还是这不是沟通问题?

3
如何简化我复杂的有状态类及其测试?
我在用Java编写的分布式系统项目中,其中有一些类对应于非常复杂的现实世界业务对象。这些对象具有许多与用户(或某些其他代理)可以应用于该对象的操作相对应的方法。结果,这些类变得非常复杂。 系统通用体系结构方法导致许多行为集中在少数几个类上,并且涉及许多可能的交互方案。 举个例子,为了使事情变得简单明了,假设机器人和汽车是我项目中的类。 因此,在Robot类中,我将采用以下模式提供许多方法: 睡觉(); isSleepAvaliable(); 苏醒(); isAwakeAvaliable(); 步行(方向);isWalkAvaliable(); 射击(方向);isShootAvaliable(); turnOnAlert(); isTurnOnAlertAvailable(); turnOffAlert(); isTurnOffAlertAvailable(); recharge(); isRechargeAvailable(); powerOff(); isPowerOffAvailable(); stepInCar(Car); isStepInCarAvailable(); stepOutCar(Car); isStepOutCarAvailable(); 自毁(); isSelfDestructAvailable(); 死(); isDieAvailable(); 活着(); isAwake(); isAlertOn(); getBatteryLevel(); getCurrentRidingCar(); getAmmo(); ... 在Car类中,它将类似于: 打开(); isTurnOnAvaliable(); 关掉(); isTurnOffAvaliable(); 步行(方向);isWalkAvaliable(); 加油(); isRefuelAvailable(); 自毁(); isSelfDestructAvailable(); crash(); isCrashAvailable(); isOperational(); isOn(); getFuelLevel(); getCurrentPassenger(); ... …

7
检查方法是否返回false:将结果分配给临时变量,还是直接将方法调用置于条件中?
调用在if语句中返回true或false值的方法是一种好习惯吗? 像这样: private void VerifyAccount() { if (!ValidateCredentials(txtUser.Text, txtPassword.Text)) { MessageBox.Show("Invalid user name or password"); } } private bool ValidateCredentials(string userName, string password) { string existingPassword = GetUserPassword(userName); if (existingPassword == null) return false; var hasher = new Hasher { SaltSize = 16 }; bool passwordsMatch = hasher.CompareStringToHash(password, existingPassword); return …

4
仅使用带有两个参数的PHP三元运算符
我最近正在查看我的一些代码,并注意到由于缺乏思想,我留下了如下结构: $guid = empty($subscription->guid) ? : $subscription->guid; 现在,这没有做应该做的事情,而且是错误的,但是由于该属性始终处于设置状态,因此它可以正常工作,并且由于以下更改,自5.3以来没有语法错误: 从PHP 5.3开始,可以省略三元运算符的中间部分。如果expr1的计算结果为TRUE,则表达式expr1?:expr3返回expr1,否则返回expr3。 我当时还没有意识到这一变化,现在我很好奇是否应该使用它。这是ruby之类的语言所无法比拟的,您可以在其中a = b || c获取b或不获取c“真实”布尔值。但是,他们为三元运算符选择的语法对我来说似乎有点不直观。我应该在生产代码中使用它吗?当我偶然看到它的时候,它肯定让我感到震惊。

5
具有不带扩展名的C ++头文件是一种好习惯吗?
关于我要遵循的C ++准则,我和我的一位同事争论不休。 他目前以这种方式设计他的所有库: 他在文件名中使用大小写不一致的字母 他的某些标题没有任何扩展名 我相信没有扩展名是C ++标准文件所保留的东西,并且使用大写字母容易出错(尤其是当您处理要在Windows和Linux上都可以使用的代码时)。 他的观点是,他遵循Qt惯例(即使对于不使用Qt的代码),并一直说:“如果Qt那样做,那就不错了。” 现在,我尝试保持开放的态度,但是当我不得不使用他的库时,我真的很难过。是否有一套与此相关的通用规则?标准是否说明了这一点? 非常感谢你。
9 c++  naming 

2
提及DDD时,“域”是什么意思
域一词对于驱动设计/开发是什么意思? 不是在语义或学术定义方面,而是在其如何修改过程或哲学方面? 我正在阅读一篇文章:https : //softwareengineering.stackexchange.com/questions/57828/your-software-problem-solution-approach 我碰到了这个流行词DDD,却并不真正知道那是什么意思。

2
在我自己的应用程序中模仿Exchange Server的“ RBAC AuthZ”…(有类似的东西吗?)
Exchange 2010中有一个代表团模型,其中一组的WinRM的cmdlet的essentally分为角色,并分配给用户的角色。 (图片来源) 考虑到我如何利用PowerShell的所有优势,同时使用正确的低级技术(WCF,SOAP等),并且在客户端不需要任何其他软件,这是一个很好且灵活的模型。 (图片来源) 问题 我是否可以在.NET应用程序中利用Exchange的委派模型? 有没有人试图模仿这种模式? 如果必须从头开始,我将如何模仿这种方法?

8
最终尝试使用(无捕获)vs枚举状态验证
我一直在阅读有关此问题的建议,即应如何在尽可能接近引发异常的地方处理异常。 我对最佳做法的两难选择是,是否应该使用try / catch / finally返回一个枚举(或一个表示值的int,0表示错误,1表示ok,2表示警告等,视情况而定),以便一个答案总是有序的,还是应该让异常通过,以便调用方可以处理它? 据我所知,根据具体情况,这可能会有所不同,因此最初的建议似乎很奇怪。 例如,在Web服务上,您总是希望返回一个状态,因此必须当场处理任何异常,但是可以说在通过http发布/获取某些数据的函数中,您希望例外(例如404情形)传递给触发它的人。如果不这样做,则必须创建某种方式来告知调用方结果的质量(错误:404)以及结果本身。 尽管可以在获取/发布数据的帮助程序函数中尝试捕获404异常,但是应该吗?难道只有我一个人使用smallint表示程序中的状态(并适当地记录它们),然后将此信息用于外部的健全性验证(一切正常/错误处理)吗? 更新:我期待主要分类出现致命/非致命的异常,但是我不想包括该异常,以免影响答案。让我澄清一下问题所在:处理引发的异常,而不是引发异常。预期的效果是:检测到错误,然后尝试从中恢复。如果无法恢复,请提供最有意义的反馈。 同样,对于http get / post示例,问题是,是否应该提供一个新对象来描述原始调用者发生了什么?如果此帮助程序在您正在使用的库中,您是否希望它为您提供操作的状态代码,还是将其包含在try-catch块中?如果您正在设计它,您是否会提供状态代码或引发异常,然后让上级将其转换为状态代码/消息? 简介:您如何选择一段代码而不是产生异常,而是返回状态代码以及可能产生的任何结果?

6
有效的解决方案重要吗?
我解决了许多问题,其中大部分来自Top Coder。我会得到很多答案,但大多数情况下,我都会得到效率低下的解决方案。 在实际的实现中-有效解决问题真的重要吗?如果可以,我该如何改善呢?

5
没有正则表达式的词法分析
我一直在用各种高级语言(Python,PHP,Javascript等)查看一些词法分析器,它们似乎都以一种或另一种形式使用正则表达式。尽管我确定正则表达式可能是实现此目的的最佳方法,但我想知道是否有任何方法可以在没有正则表达式的情况下实现基本词法分析,也许是某种直接的字符串解析等。 是的,是否可以在不使用任何形式的正则表达式的情况下,以更高级的语言*实现某种基本词汇? *高级语言是Perl / PHP / Python / Javascript等。我敢肯定,有一种方法可以用C语言实现

4
子状态机如何将控制权交还给父状态机?
我的顶级状态机具有一些状态和边缘。我将其称为父状态机。 A ----> B ----> C 父状态机中的任何状态也可以是状态机。我将这些孩子称为状态机。 ___________ / \ A ----> | B0->B1->B2 | ----> C \____________/ 如果父状态机从A转换为B,则B的状态机将接管。一旦B完成运行,它应该如何将控制权交给父状态机并转换为状态C?您使用哪种设计模式? 如果您想知道,我在父状态机中有子状态机,因为我的确切项目非常复杂,并且封装子状态的内部工作是很自然的。

3
了解“现实世界”中的松散/紧密耦合
我不会说什么“社区”,因为我想要一个不偏不倚的解释,但是假设您正在构建一个可重用的模块,并且该模块需要3个以上的依赖模块,而删除其中的1个模块不仅会在您的应用中导致中断错误使用该模块的整体,但使用模块本身。 根据我的理解(必须是错误的),一个松耦合的模块化系统不会因为简单地删除一个模块而破裂。该应用程序仍应运行,但没有该“功能” /模块,并且该模块本身不应仅由于不存在依赖模块而导致所有内容无法运行。 这是错的吗?如果是这样,如果模块仍然依赖于一切都不起作用的点,那么紧密/松散耦合之间的区别是什么?

1
隐式与显式接口
我想我了解编译时多态和运行时多态的实际限制。但是显式接口(运行时多态,即虚拟函数和指针/引用)与隐式接口(编译时多态,即模板)之间在概念上有什么区别。 我的想法是,提供相同显式接口的两个对象必须是相同类型的对象(或具有共同的祖先),而提供相同隐式接口的两个对象不必是相同类型的对象,并且不包括隐式对象他们俩都提供的接口可以具有完全不同的功能。 有什么想法吗? 并且,如果两个对象提供相同的隐式接口,那么还有什么原因(除了不需要动态分配带有虚拟函数查找表的技术好处等)之外,还有其他原因导致这些对象不能从声明该接口的基础对象继承而来。使它成为显式接口?换一种说法:您能给我一个例子吗,两个提供相同隐式接口的对象(因此可以用作示例模板类的类型)不应从使该接口显式的基类继承? 一些相关的帖子: https://stackoverflow.com/a/7264550/635125 https://stackoverflow.com/a/7264689/635125 https://stackoverflow.com/a/8009872/635125 这是使这个问题更具体的示例: 隐式接口: class Class1 { public: void interfaceFunc(); void otherFunc1(); }; class Class2 { public: void interfaceFunc(); void otherFunc2(); }; template <typename T> class UseClass { public: void run(T & obj) { obj.interfaceFunc(); } }; 显式接口: class InterfaceClass { public: virtual void …

3
如何在团队能力不同的情况下估计冲刺速度?
我们是一个由4个开发人员组成的小组,在Scrum中颇为环保。来自全国各地,我们经常请假几天或整周假回家。因此,由于年度休假,我们的团队能力从一次迭代到另一次迭代急剧变化,这导致一次迭代到另一次迭代的速度差异很大。在计划会议上估算速度时,我们如何考虑团队能力?历史数据将反映出截然不同的容量,我们不能等一整年才能得出估计速度的平均值。

5
如何让队友知道我对一个对象做了什么更改?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 假设我有一个PHP对象,比如说:companyObj。 class companyObj { private company_name; private company_address; public function print_contact() { //logic } } 这是我写的对象,并与队友共享。现在,我想使其更强大,如下所示: class companyObj { private company_name; private company_address; private company_contact_person; public function print_contact() { //logic updated } } 现在,如何通知队友我的对象具有可以设置的更多属性? 当我不希望我的队友浪费时间去查看源代码级别的更改时,我不向开发团队中的每个人发送电子邮件,而是如何使团队知道发生了什么?

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.