软件工程

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

1
函数分解真的是反模式吗?
当我阅读您遇到的最糟糕的反模式时,我单击了这篇文章中的链接以登陆有关反模式的网站。 而http://sourcemaking.com/antipatterns/functional-decomposition页让我疑惑。 这个反模式有多严重,它到底是反模式吗?因为,尽管我现在主要进行OOP编程,但我仍然不愿意反对纯Java的所有OOP语言以及它们带来的设计实践。而且我猜想,我在编写代码时仍具有函数式编程的一些特征。 这就提出了一个问题,我是坚持OOP + Functional风格做错了吗,还是在行业中很常见,实际上还不是那么糟糕。 我从经验中知道的是,OOP +功能样式与纯OOP开发人员并不完全兼容。但是,与此同时,尽管OOP开发人员在OOP +功能开发方面遇到问题,但反驳的是,OOP解决方案往往设计过度,难以使用,并且根据我的经验,甚至一点也不容易,实际上介绍了一些非常严重的错误可以隐藏的盲点。 因此,即使我与同事讨论了这些主题,但我得出的结论是,所有方法实际上都不是完美的。而且我仍然有未解决的问题。 另一个线程中来自另一个帖子的链接也加剧了OOP问题。链接着眼于Java风格的OOP http://chaosinmotion.com/blog/?p=622 那么将函数式编程与OOP混合的一般态度是什么?开发人员应努力实现什么平衡?

6
开发何时应停止并开始质量检查?
我们为两个开发团队编写了完整的功能规范。我们没有专业的测试人员,但是我们已经在可用的服务台人员的帮助下起草了“ QA测试”。 过去,我们遇到了无法使用全部功能的问题,或者交付的代码完全不符合规范。 我的问题是:在什么阶段开发人员应该停止将代码移交给质量检查小组?在移交给质量检查团队之前,要求开发人员对照规范检查其代码是否过多?

4
是什么使Java中的“好风格”?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我曾在Stackoverflow上问过这个问题,在它被嘘之前,我收到了PéterTörök的有用建议,这可能是发布它的更好地方。 我从事Java编程已有几年了。我经常根据什么构成“好风格”与同事讨论设计决策。确实,有很多StackOverflow问题/答案根据某件商品是否为“好风格”来讨论设计。 但是什么才是“好风格”?就像很多东西一样,我一看到它就知道了……但是我想有一个更好的主意,不仅仅是我的良心说这种设计不正确。 您想到什么才能生成良好的,设计良好的代码? (我承认这有点主观,因为什么是“好的风格”将取决于手头的任务)。(此外,我应该补充一点,我对团队样式不感兴趣-例如“我们使用2个空格而不是4个缩进” ...,并且我对Java代码约定不感兴趣。) 编辑:谢谢到目前为止所有好的答案/评论。我特别热衷于寻找答案,这些答案将有助于使那些使程序员的良心(甚至是肠胃疾病)变得难以理解的事情得以整理?

6
Razor或XSLT是否更适合我的项目?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我正处于系统设计的初期阶段,该系统实际上将分为两部分。一个部分是服务,另一部分是与服务的接口,该接口通过OData或XML之类的数据提供数据。该应用程序将基于MVC架构模式。对于视图,我们正在考虑在ASP.NET下使用XSLT或Razor。 XSLT或Razor将有助于分离关注点,其中原始XML或响应表示您的模型,XSLT或“ Razor视图”表示您的视图。在本示例中,我将省略控制器。最初的设计建议建议使用XSLT,但是我建议使用Razor作为更友好的视图引擎。 这些是我建议使用Razor(C#)的原因: 更易于使用和构建更复杂的页面。 可以轻松产生非* ML输出,例如csv,txt,fdf 不太冗长的模板 视图模型是强类型的,其中XSLT需要依赖约定,例如布尔值或日期值 标记更易于访问,例如nbsp,换行符标准化,服装值标准化,空白规则 内置的HTML帮助程序可以基于DTO属性生成JS验证代码 内置的HTML帮助程序可以生成操作的链接 对于剃须刀而言,XSLT的论点是: XSLT是一个标准,并且在将来仍会存在很多年。 很难不小心将逻辑移到视图中 对于非程序员更轻松(我不同意)。 在我们过去的一些项目中,它是成功的。 数据值默认为HTML编码 始终保持良好状态 因此,我正在寻找双方的观点,建议或做出类似选择的经验?
9 c#  asp.net-mvc  xslt  razor 

2
修改开源应用程序
当我想向最初未编写的开源应用程序添加功能时,一般的工作流程是什么?我怎么知道代码?如何找到需要更改或添加的位置?我如何实际进行更改而不破坏其他内容?我如何测试一切仍然正常? 这样的项目的一般准则是什么?

2
硕士vs博士-长[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以当前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我今年21岁,是计算机科学专业的一年级学生。在过去的几个月里,是否继续攻读博士学位一直困扰着我。我不能停止思考,在这个问题上感到非常痛苦。我已经阅读了http://www.cs.unc.edu/~azuma/hitch4.html以及网络上许多其他有关Master与phd的文章。不幸的是,我尚未得出结论。 我希望我可以在这里发表有关该问题的想法,以期1)对问题有更多的了解,2)确保我的假设是正确的。希望在各个领域都有经验的人可以告诉我我是否做错了,所以我不会基于错误的想法做出决定。 好吧,让这个话题变得简单-金钱。金钱不是最重要的对我来说很重要,但这仍然很重要。取得6位数一直是我的目标,但我意识到无论走哪条路,我都可能需要很长时间。根据大多数在线薪资计算站点,软件工程师的平均起薪约为60-70k。这里的博士学位课程为期5年,所以大约30万,因为我没有和硕士一起进入劳动力市场,所以我错过了。我一生中只有一次大约只有1000k,所以300k是我无法准确想象的。我知道我不会一次拥有所有这些,但是知道我会赚到那对我来说有点疯狂。我觉得我30岁的时候会过上舒适的生活(但是过早就满足于冒险)。我绝对希望在我有一个家庭将其全部花光之前,至少有20多岁的几年时间用这种钱来度过。我的财务状况还不是很稳定,所以花一些钱就好了……买一辆好车,买一两把新吉他,吃一些美味的食物,然后经济上很舒适。我一直觉得自己应该在自己的生活中赚到很多钱,即使在孩子成长的过程中,我也只是想让它成为现实。我知道当我走到40-45岁时,我走的任何一条道路都会赚钱,但是我想我只是厌倦了不赚钱并且对此不耐烦。并保持财务舒适。我一直觉得自己应该在自己的生活中赚到很多钱,即使在孩子成长的过程中,我也只是想让它成为现实。我知道当我走到40-45岁时,我走的任何一条道路都会赚钱,但是我想我只是厌倦了不赚钱并且对此不耐烦。并保持财务舒适。我一直觉得自己应该在自己的生活中赚到很多钱,即使在孩子成长的过程中,我也只是想让它成为现实。我知道当我走到40-45岁时,我走的任何一条道路都会赚钱,但是我想我只是厌倦了不赚钱并且对此不耐烦。 但是,将我推向博士学位的一个大想法是,如果我有能力解决计算机科学领域的实际问题,那么我认为掌握硕士学位的道路会给我一种卖力的感觉。(简单明了-无需过多说明,但这很重要) 现在转到其他方面的决定。 我最初是因为编程而进入计算机科学的。我从高中开始,很快就知道这是我想要做的职业。我觉得获得行业内的硕士学位和软件工程师可以让我有更多的时间来进行职业编程。在研究方面,我觉得与编码相比,我将花费更多的时间阅读,写作,尝试获得补助金等。 我在实验室工作的一个人最近发表了一篇论文。他向我展示了它,我对此感到震惊。前两页充斥着方程式和公式。然后下一页左右,后面是他从前一页推导的更多方程式。那是他的工作-分解并创建所有这些用于机器人手臂运动的公式。每当我阅读计算机科学论文时,它们似乎都遵循这种模式。我总是整天想象自己编码,而不是证明那种性质的方程式和事物。我知道那只是计算机科学研究的一部分,但这部分让我感到无聊。 每边都有几个缺点- 博士-我不太喜欢写作,或者觉得自己在技术写作方面是如此出色。每当我成群结队地做某事时,我始终是负责大部分工作,然后将其交给我的团队成员编写报告的人。呈现方式却有所不同-只要我对呈现的内容有充分的了解,我根本不介意进行呈现。但是写论文对我来说似乎是一件麻烦事。正因为如此,“发表或灭亡”这句话真的使我脱离了研究。另一件不好的事情-我觉得如果我在做研究,大部分工作将独自完成。我在小组中表现最好。当我集思广益时,我希望至少有一个人可以跳出主意。参加一些小型精英团队来构建事物的想法对我来说很理想。因此,能够在整个职业生涯的大部分时间里以小组形式工作是一定的优势。我觉得我无法进行这项研究。 硕士-我在网上读到很多东西,大多数人都是工程师,后来进入管理职位。到目前为止,我还没有看到自己想成为管理层的一员。假设我的公司想要制造一些新产品或系统-说“我做到了”而不是“我管理了做到这一点的一群人”,我会感到更加自豪,享受和整体满意。我想成为开发过程的重要组成部分。我想做东西。 我认为比其他人更专业会很棒。我宁愿了解某事的全部内容,也不愿了解一切。我一直都是这样-在我的棒球生涯中是一位出色的投手,但在其他方面却不那么擅长,在学校的某些课程中也很出色,但是在其他课程中却不那么出色。对我来说还好。获得博士学位将使我朝这个方向发展。成为一个人们一直期待并寻求帮助的人,将是一件很棒的事,因为他是一个非常特定领域的重要贡献者,例如人工神经网络或机器人触觉感知。根据我对软件行业的了解,由于新技术的发展,专业化可能是一件非常糟糕的事情。 关于就业,我有非常保守的看法。我不想每5年更换一次公司。也许这是每个人都希望的事情,但是如果工作条件可以接受的话,我很想成为一家公司中超过10年(如果幸运的话,可能是20-25年以上)的重要人物。我觉得,作为一名教授或研究员,以博士学位的身份更有可能。我对软件行业人士的了解越多,似乎大多数软件工程师在公司之间迅速反弹的步伐越快。有些人甚至喜欢从项目到项目的租用枪,这根本不是我想要的。但是,如果这确实发生在现实世界中,那么找到一个制造出色且重要软件的地方将是一件很棒的事情。 我是一个很有竞争力的人。我在竞争中蒸蒸日上。我真的不知道为什么,但是即使我还是个孩子,我也一直都这样。竞争总是给我一个理由,让我每晚都少做些额外的事情,总是不断挑战自己,等等。在我看来,研究领域没有竞争。只要进行研究,似乎每个人都很放松。唯一的竞争是,如果有人正在研究与您相同的事物,并且谁可以完成并首先发表该事物(但每个人似乎都仔细检查这种情况)。对我而言,唯一值得注意的竞争就是与自己和自己的纪律。我喜欢这样的想法,即在行业中,公司之间存在着竞争,以推出最佳产品或停业。 促使我获得博士学位的一件事就是您所做的事情的生命周期。我觉得如果您在行业中做出真正创新的事情……仅仅是一些非常出色的新应用程序或系统……在有人能够更快,更高效地完成它之前,其保质期约为5到10年。但是,通过研究工作,您可以创建可以持续数十年的创意或算法。例如,A *搜索算法描述于1968年,并且至今仍被广泛使用。对我来说真是太神奇了。用帕拉纽克(Parahniuk)的话说,“目标不是永远活着,而是创造出可以生存的东西。” 总之,我只想做一些重要的事情。我希望我的工作能够帮助和进步社会。严重的是,如果我在接下来的40年中坚持使用GUI进行编程……我可能会面对自己。但是话又说回来,我讨厌这样的想法,即不到1%的人口会与我的作品接触,甚至很少了解它的重要性。 因此,如果我所说的话是错误的,请通知我。如果您认为我是硕士或博士学位,请通知我。如果您想给我一些额外的见解或补充我提出的观点,请这样做。非常感谢任何人的帮助。

2
如果对象认识很多所有者,这是代码的味道吗?
在我们的Delphi 2007应用程序中,我们使用了许多以下构造 FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData)); FindOwnerClass向上移动当前组件的Owner层次结构以查找特定的类(在示例TdmBasicData中)。结果对象存储在Field变量FdmBasic中。我们主要使用它来传递数据模块。 示例:生成报告时,结果数据将被压缩并存储在通过数据模块TdmReportBaseData访问的表的Blob字段中。在我们应用程序的单独模块中,具有使用ReportBuilder以Paged形式显示来自报表数据的功能。该模块的主要代码(TdmRBReport)使用TRBTempdatabase类将压缩的Blob数据转换为Reportbuilder运行时reportdesigner中可用的不同表。TdmRBReport可以访问TdmReportBaseData,以获取所有与报告相关的各种数据(报告类型,报告计算设置等)。TRBTempDatabase是在TdmRBReport中构造的,但必须有权访问TdmReportBasedata。因此,现在可以使用上面的构造完成此操作: constructor TRBTempDatabase.Create(aOwner: TComponent); begin inherited Create(aOwner); FdmReportBaseData := TdmRBReport(FindOwnerClass(Owner, TdmRBReport)).dmReportBaseData; end;{- .Create } 我的感觉是,这意味着TRBTempDatabase非常了解其所有者,并且我想知道这是某种代码味道还是反模式。 您对此有何想法?这是代码气味吗?如果是这样,还有什么更好的方法?

4
单元测试中“单元”下的理解
据我理论上理解,“单位”下的人是指方法(在OOP中)。但是在实践中,孤立地验证某些方法的测试是非常脆弱的行为测试(不是验证结果,而是验证某些依赖方法的事实)。因此,我看到很多人从单位上了解一小组紧密相关的课程。在这种情况下,仅对外部依赖项进行了模拟/存根,对于内部单元内部实现中的依赖项,则使用该方法。在这种情况下,存在更多的状态,有意义的(根据规范)并且不是那么脆弱的测试。因此,问题是您对这些方法有何看法?将第二种方法称为单元测试是否有效?或者它是某种低级别的集成测试? 如果您发现通过这些测试方法之一应用TDD的一些特定注意事项,我将感谢您的想法。

5
可以将静态和动态类型的语言视为用于不同类型工作的不同工具吗?
是的,曾经提出过类似的问题,但总的目的是找出“哪个更好”。 我之所以这样问是因为我最初是作为一名开发人员来使用JavaScript的,并且实际上并没有在使用静态类型语言编写方面的丰富经验。 尽管如此,我肯定会发现学习C语言在较低级别的代码上处理苛刻的操作的价值(我认为这在编译器级别与静态与动态有很大关系),但是我想尽力而为是否存在特定的项目上下文(也许是某些类型的动态数据密集型操作?)涉及性能以外的其他方面,因此与Java或C#相比,与Python之类的东西更有意义。

3
通用共享方法放在哪里
我有一堆方法到处都是。现在,该代码文件被命名为全局变量,以表示它们实际上是全局变量的事实。 但是,我不喜欢这样。 我想将它们分组为一个类并传递一个接口。我只会做一个实例,但我不会陷入这里的单例陷阱。 首先,我应该给班级命名。我想避免使用全域名称,因为恐怕维护人员会想到错误的主意。 另外,我应该如何考虑拆分这样的一组方法,以便行为可以改变和适应? 方法集包含以下内容: 转换表 剪贴板互动 管理内置字体 常用绘图方法 提供访问常用资源的界面
9 c# 


4
在结对编程中,每个角色叫什么名字,为什么?
我听说过键盘上的那个人叫做“驱动程序”,另一个人叫做“导航员”。我曾经想象过拉力赛车手,方向盘上的人无法跟上正在发生的一切,而他们必须在“导航员”的帮助下大喊大叫,他们不断向他们喊叫,以保持他们的方向。 “走出杂草”,就像键盘上的人被第二把椅子上的人“保持在正常状态”一样。 在结对编程中,这两个角色更/最普遍接受的术语是什么?(如果不太明显),它们是从任何较早的职业中借来的吗?

4
失败的软件开发思想或技术的一个很好的例子是什么?
具体来说,是什么地方群众的观念错了的例子。人们为什么首先要抓住想法?为什么这些想法被驳回了?或者这些想法仍然存在并且很好,如果是,为什么呢? 例如,我可能将CORBA(和其他类似技术)描述为试图解决软件组件之间的通信问题的事物。许多人认为有必要在各个组成部分之间定义合同。最终,HTTP + JSON为大众解决了这个问题,其他各种RPC机制(例如Thrift和Proto-bufs)也出现了。

2
生成自动化:通常将QMake用于非Qt项目吗?
因此,我打算编写一个C ++库,并且希望它可以跨平台使用,并且因为该库将不处理UI,并且希望它具有尽可能小的依赖关系,所以我不会使用Qt (实际上,Qt并不能真正帮助我实现我想要的功能,我计划使用的只是STL和Boost)。现在,当涉及到构建跨平台项目时,我真的很喜欢QMake,因为它非常易于使用,并且我对此有经验。我也听到了有关CMake的好消息,尽管我真的怀疑它与QMake一样容易使用。 无论如何,这是我的问题:我应该坚持使用我所知道的构建自动化工具,还是QMake只是出于非Qt项目的背景?我应该以此为契机学习CMake吗?还是这两个有更好的选择?
9 c++  cmake 

3
保持MVC模型与数据库松散耦合?
我喜欢保持我的代码可测试性,并决定对我当前的MVC框架采用依赖注入策略,这无疑已被证明是确保松散耦合的代码,可测试性和模块化的好方法。 但是,由于与设计模式的掌握程度相去甚远,因此我很难找到一种使模型尽可能与数据库连接器类保持松散耦合的好方法。 这怎么办? 由于我没有随此问题提供任何物理代码,因此,我将不胜感激一些逻辑/代码示例或信息,这些示例或信息可为我提供一个理解上述问题的方向。

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.