软件工程

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

3
为什么编程语言(开放式)标准要花钱?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 如果要使标准广泛采用,为C11要求384瑞士法郎或为C ++ 11要求352瑞士法郎是否适得其反? 请注意,我一点也不抱怨,也不反对付款;我想了解设置价格本身的基本原理,尤其是知道ISO是国家标准机构的网络(即由政府资助)。而且我还怀疑这些价格是否会产生足够的收入来为这样的组织提供资金,所以肯定还有另一个原因。

7
自执行匿名函数与原型
在Javascript中,有几种在JavaScript中创建和管理类/命名空间的突出技术。 我很好奇哪种情况需要使用一种技术而不是另一种技术。我想选一个并坚持前进。 我编写了由多个团队维护和共享的企业代码,并且我想知道编写可维护的javascript时的最佳实践是什么? 我倾向于使用自执行匿名功能,但是我很好奇社区对这些技术的投票。 原型: function obj() { } obj.prototype.test = function() { alert('Hello?'); }; var obj2 = new obj(); obj2.test(); 自闭式匿名函数: //Self-Executing Anonymous Function (function( skillet, $, undefined ) { //Private Property var isHot = true; //Public Property skillet.ingredient = "Bacon Strips"; //Public Method skillet.fry = function() { var …


7
将大型MS Access应用程序移向.Net的最佳做法?
我们有一个非常庞大的MS Access应用程序,最初是为满足我们的个人需求而开发的,后来变成了商业软件并成功销售。该软件是一种“为您的企业而设计的全方位软件”,包含文档管理系统,企业资源计划,库存管理,客户关系管理,数据分析等多个模块。我们对当前的情况非常满意应用程序的功能,但是为了满足客户的要求,我们意识到我们必须转向新的事物。 我们决定逐渐将应用程序移至.Net,因为我们可以坚持使用Visual Basic .Net:尽管它是此处大多数开发人员的新语言,但我们对VBA以及在VB6中实现的数十个小型项目都有很深的了解。 我们已经开始将应用程序的数据层功能移至MS SQL Server,以便每个数据操作和搜索都直接在服务器上执行。 我们正在寻找的是逐步移动我们广泛的GUI的最佳实践(大约500-600种不同形式,包括子表单,大约200种具有多语言支持的报告等)。潜在客户最近要求在DMS中对文档实施异步数据加密之后,我们也很乐意将这部分与MS Access完全脱钩,并在.Net中进行实现。 问题是如何将.Net应用程序与现有的MS Access系统无缝集成,以便我们可以使用某些参数(用户权限等)调用它,并启用此应用程序与正在运行的MS Access应用程序之间的数据交换。 编辑: 我们试图应用Martin Fowler的“ 企业集成模式 ” 一书中的一些实践,以实现MS Access应用程序与我们为各种需求在.Net中实现的一些小型实用程序之间的集成。但是我们仅设法使用“共享数据库”模式,对我们的解决方案并不满意。 例如,我们实现了一个作为Windows服务运行的小型实用程序,该实用程序使用POP3连接自动从邮件服务器下载所有邮件并将它们存储到一个表中,而所有附件都存储在文件系统中。 我们主要要做的是使用ADO.NET直接访问MDB格式的MS Access数据库,并用一些处理过的数据填充表格(例如上例中有关邮件消息的数据:我们有FROM,TO,CC,BCC,主题和身体)。 使用.Net的MDB数据格式绝对没有问题,此外,我们不想再使用MDB并将几乎所有内容升级到MS SQL Server 2008了-这给了我们更多关于数据管理和可伸缩性的自由。 这里的主要问题是我们不知道如何在Access中实现某种“回调”,以便我们可以在数据更新时触发某些VBA代码的执行。 MS Access 2010支持对数据表的更新和插入触发器,我们寄予了厚望,但事实证明,我们只能对这些触发器使用MS Access宏,并且无法在触发器内执行任何自定义VBA代码。 我们还尝试了一些解决方案,将击键直接发送到MS Access窗口,以模仿某些用户调用的数据重新查询。这可行,但是我们认为这不是可以在生产中使用的可行解决方案。 我们还研究了用于MS Access的DDE,但找不到实现DDE命令并将其用于内存数据和命令交换的良好示例解决方案。 因此,主要问题是使MS Access和.Net应用程序共存并相互交互。 编辑2: 我忘了提一下我们在VBA中也实现了MSMQ库,以便在.Net和MS Access之间传递消息,问题再次出在这里,缺少回调:我们真的不得不在队列中轮询新消息,并且鉴于VBA并不真正支持多线程,这并不是一个很好的解决方案。

5
您是将私有内容内部/公开进行测试,还是使用诸如PrivateObject之类的黑客工具?
我是代码测试的初学者,assert以前是妓女。在单元测试中让我担心的一件事是,通常需要您创建public(或至少internal)private原本应该不是的字段,取消readonly它们,改为创建private方法protected virtual等。 我最近发现,可以通过使用诸如PrivateObject类之类的东西通过反射访问对象中的任何内容来避免这种情况。但是,这会使您的测试难以维护(事情将在执行而不是编译时失败,它会被简单的重命名破坏,更难调试...)。你对此的看法如何 ?关于访问限制的单元测试的最佳实践是什么? 编辑:例如,假设您有一个类,该类在磁盘上的文件中具有缓存,而在测试中您想写入内存。
26 c#  unit-testing 

6
为什么这些尝试用Xtend和Kotlin浇灌Scala?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 因此,现在Eclipse提供了Xtend,而JetBrains提供了Kotlin-两者似乎都是Scala的简化版本。我的问题是为什么?我已经使用Scala打了一下,这不是说很难。这仅仅是对从命令式转换为功能性转换的固有困难的反应,还是在这里还有其他工作? 编辑:道歉。重读我最初发布的问题,我可以看到听起来像是在拖钓。我说问题的方式似乎是提出问题的最佳方法。我看到过这样的博客帖子:“ Scala太难/ Scala太复杂”,还有“ Kotlin尝试做Scala但更简单”。我将保留原来的措词,但老实说我并没有试图拖钓。

3
在通往启蒙的道路上:计划,常见的Lisp,Clojure?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 8年前关闭。 当我学习Lisp时,许多比我聪明的人会继续写书,因为您“了解它”,它使您成为更好的程序员。 也许我所听到的有关Lisp改变生活的所有信息只是对新手的一个恶作剧,但我认为了解更多关于世界的信息并没有什么害处,即使我发现我是在被sn口之类的东西之后被送去的。 我想遵循SICP或ANSI Common Lisp的规定,但同时要研究可以继续用于个人项目的方言和实现。 SICP专注于Scheme,因此这是一大票。保罗·格雷厄姆(Paul Graham)说,如果他要教新手,他会在Scheme中做,但是听起来Scheme仍然不及Common Lisp。但是接下来是Clojure了-有人告诉我Clojure在某些方面受到限制,但是在其他方面(JVM库)更实用。 听起来我可以更轻松地阅读Scheme的材料,或者从CL那里获得“真正的”启发,或者与Clojure足够接近,并且从长远来看可以做更多的事情。 所有这些中有多少是正确的?我什么时候应该停止思考要学习的内容而只是去学习呢?

5
如何使两种不同的程序与两种不同的语言交互?
我不知道这是否太广泛了,但是我还是一个年轻的程序员,还在上大学,那是我的大三。我觉得我对各种语言都有很好的掌握,并且有很好的基础。但是我绊脚想想如果例如,如果我尝试创建一个程序并说我用python编写了一个部件,只是因为它很容易并且可以完成工作,但是该程序需要从我编写的另一个程序中获取输出在C中,由于速度原因,我使用C。我不确定如何使两种不同的程序和语言相互交互以创建一个整体的程序。我在想肯定要写一个文件,但是如果python和C程序都访问一个文件,那我该怎么想锁了。 多数情况下,我是通过将文件导入程序来完成此操作的,但在那种情况下,它们是相同的语言,因此我只需要使用导入功能即可,但是在两种语言/程序交互以创建一个内聚输出时,我遇到了麻烦。 我当时在考虑这个问题,因为我想潜入创建一些基本的Web应用程序只是为了学习,但我不知道如何说javascript文件与我用python编写的内容交互,反之亦然。 我觉得我在这里缺少一些真正容易的事情,只是不了解。抱歉,如果这个问题太笼统,但是我在网上找不到一个明确的答案,我正试图浏览一个开放源Web应用程序,但无法真正抓住它的答案,如果这个问题看起来很愚蠢,请再次宽恕我这是一个问我喜欢在stackexchange上阅读的好地方。 感谢您的答复。
26 python  c 

6
将“一堆东西”实用程序项目分离为具有“可选”依赖项的各个组件
在使用C#/。NET进行一系列内部项目的多年中,我们已经使一个库有机地发展成为一大堆东西。它被称为“ Util”,我敢肯定你们中的许多人在您的职业生涯中见过这些野兽之一。 该库的许多部分都是非常独立的,可以分成单独的项目(我们希望将其开源)。但是,在将它们作为单独的库发布之前,需要解决一个主要问题。基本上,在这些库之间有很多我称之为“可选依赖项”的情况。 为了更好地说明这一点,请考虑一些适合成为独立库的模块。CommandLineParser用于解析命令行。XmlClassify用于将类序列化为XML。PostBuildCheck对已编译的程序集执行检查,如果失败则报告编译错误。ConsoleColoredString是彩色字符串文字的库。Lingo用于翻译用户界面。 这些库中的每一个都可以完全独立使用,但是如果将它们一起使用,则将具有有用的额外功能。例如,将CommandLineParser和都XmlClassify公开需要的构建后检查功能PostBuildCheck。同样,CommandLineParser允许选项文件使用彩色字符串字面量require来提供ConsoleColoredString,并且它通过支持翻译文档Lingo。 因此,关键区别在于这些是可选功能。可以将命令行解析器与纯色的无色字符串一起使用,而无需翻译文档或执行任何生成后检查。或者可以使文档可翻译但仍然没有颜色。或既彩色又可翻译。等等。 通过查看该“ Util”库,我发现几乎所有潜在可分离的库都具有将其绑定到其他库的此类可选功能。如果我实际上需要将这些库作为依赖项,那么这些东西根本就不会被弄乱:如果您只想使用一个库,则基本上仍然需要所有库。 是否存在任何建立的方法来管理.NET中的此类可选依赖项?

4
Google Code Search可以替代吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 根据Google官方博客: 专为帮助人们在整个网络上搜索开源代码而设计的Code Search将于2012年1月15日与Code Search API一起关闭。 Google代码搜索现在不见了,由于这使得理解它提供的功能变得更加困难,因此,我尝试通过我从页面缓存中为“搜索选项”收集的信息来呈现它们: “在搜索框中”仅说明了直接在主搜索框中键入命令的语法,而不是使用高级搜索界面。 软件包(在搜索框中:“ package:linux-2.6”) 语言(在搜索框中:“ lang:c ++”) (选项:任何语言,动作脚本,ada,applescript,asp,汇编,autoconf,automake,awk,basic,bat,c,c#,c ++,caaja,cobol,coldfusion,configure,css,d,eiffel,erlang,fortran,转到,haskell,通知,java,java,javascript,jsp,lex,limbo,lisp,lolcode,lua,m4,makefile,maple,mathematica,matlab,messagecatalog,modula2,modula3,objectivec,ocaml,pascal,perl,php, pod,prolog,proto,python,python,r,rebol,ruby,sas,schem,scilab,sgml,shell,smalltalk,sml,sql,svg,tcl,tex,texinfo,troff,verilog,vhdl,vim,xslt, xul,yacc) 文件(在搜索框中:“文件:^。*。java $”) 类(在搜索框中:“ class:HashMap”) 函数(在搜索框中:“ function:toString”) 许可证(在搜索框中:“ license:mozilla”) (选项:无效/任何许可,阿拉丁/阿拉丁公共许可,艺术/艺术许可,阿帕奇/阿帕奇许可,苹果/苹果公共源许可,bsd / BSD许可,cpl /公共公共许可) -License,epl / Eclipse-Public-License,agpl / GNU-Affero-General-Public-License,gpl / GNU-General-Public-License,lgpl / GNU-Lesser-General-Public-License,免责声明/历史许可-声明和免责声明,ibm / IBM公共许可证,lucent / Lucent公共许可证,mit / MIT许可证,mozilla / Mozilla公共许可证,nasa / NASA-开放源代码协议,python / …

5
什么是编程语言?是什么使我们能够用这种语言书写?
好吧,我是编程新手,我承认这是一个相当抽象的问题。 我们每天都会说自然语言,因为人们可以互相理解。计算机如何理解以某种语言编写的代码? 假设A先生创造了一种新语言。机器如何接受呢?创建者是否必须使用机器语言与机器通信以创建新语言?什么能保证我们能在被机器正确理解的同时用一种语言写东西?


5
为什么将其称为“哈希表”或“哈希函数”?在这里,哈希对我没有任何意义[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5个月前关闭。 现在,我正在使用,聆听,讨论和实现哈希表和哈希函数大约需要4年的开发时间。但我真的不明白为什么将其称为哈希? 我记得我开始编程的第一天,这个术语对我来说有点繁琐。我从不知道它是什么,基于它的名字。我只是通过实验了解了它的作用以及为什么以及何时应该使用它。 但是,有时我还是试图弄清楚为什么将其称为hash。我对表或函数没有问题,老实说,它们是相当演绎,合理的术语。但是,我认为可以使用更好的词来代替哈希,例如key或uniqueness。不要键入表或唯一性表。 根据我的字典,哈希表示: 土豆和肉类的炒菜(高度无关) #符号(又名数字符号,井号等)(仍然无关紧要,也许只是误称) 将算法应用于字符串(仍然与唯一性无关,这是哈希表的最重要特征) 切食物 大麻的另一个术语 有谁知道为什么将其称为哈希?
26 naming 

13
指导在C ++基础方面苦苦挣扎的学生[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我正在辅导一些在学习其第一门编程语言的基础知识方面遇到重大困难的学生:C ++。我认识许多优秀而聪明的学生,他们的第一门CS课程都失败或辍学。我正在辅导的每个人都对他或她在课堂上的经历有类似的描述:讲师的步伐太快,讲课中没有任何意义,等等。在参加CS课程之前,这些挣扎中的大多数学生对计算机的兴趣不大,除了文字处理程序,Web浏览器或其他娱乐方式。电脑是可以正常工作的黑匣子,为什么要搞乱它呢? 我最好的猜测是,他们在将计算机科学的抽象与熟悉的概念联系起来时遇到了麻烦。也就是说,这些学生可能知道如何学习数学,生物学或物理学,但是在编程时这些技术不起作用。 有人有任何建议吗?我所帮助的学生不应因此而失败。显然,导师没有考虑这些学生的学习风格。就是说,导师没有让他的学生失败。

8
数据库设计中的不变性
约书亚·布洛赫(Joshua Bloch)的《有效的Java》中的一项内容是,类应允许实例的变异尽可能少,最好根本不允许变异。 通常,对象的数据会保存到某种形式的数据库中。这使我开始思考数据库中的不变性,特别是对于那些代表较大系统中单个实体的表而言。 我最近一直在尝试的一种想法是尝试最小化我对代表这些对象的表行的更新,并尝试尽可能多地执行插入。 我最近正在尝试的一个具体示例。如果我知道以后可以在记录中附加其他数据,我将创建另一个表来表示该表,类似于以下两个表定义: create table myObj (id integer, ...other_data... not null); create table myObjSuppliment (id integer, myObjId integer, ...more_data... not null); 希望这些名字不是一字不漏的,只是为了说明这个想法。 这是数据持久性建模的合理方法吗?是否值得尝试限制在表上执行的更新,尤其是对于最初创建记录时可能不存在的数据填充空值?有时候这样的方法以后可能会引起严重的疼痛吗?

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.