软件工程

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

6
Flash真的优于Java applet吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我还是一个学生,没有太多编程方面的实际经验。我从来没有写过超过〜5k行的代码。我已经用Flash和Java编写了代码,但我不明白为什么人们在Flash中编写诸如视频播放器(YouTube等)之类的Web应用程序,而不是在编写Java applet。因此,我想请具有实际经验的程序员在这个问题上说一些明智的话。 我看不到Flash优于applet的真正好处,但另一方面,至少在我看来,它似乎像地狱般的越野车。我知道在Flash中制作内容的速度更快,并且可以理解为什么这对于快速制作原型将是一件好事,但总的来说,这值得吗?每当YouTube发疯时,我都会诅咒开发人员使用Flash编写它。而且,如果您将Linux与Opera结合使用,则这种情况一直存在。 那么,基本上,为什么人们使用Flash而不使用Applet?

3
如何为Winforms解决方案设置MVP?
我过去曾经使用过MVP和MVC,我更喜欢MVP,因为我认为它可以更好地控制执行流程。 我已经创建了我的基础结构(数据存储/存储库类),并且在对示例数据进行硬编码时可以毫无问题地使用它们,因此现在我转向GUI并准备我的MVP。 A节 我已经看到MVP使用视图作为入口点,也就是说,在视图构造方法中,它创建了演示者,该演示者又创建了模型,并根据需要连接事件。 我还以演示者为切入点,在其中创建了视图,模型和演示者,然后在其构造函数中为该演示者提供了视图和模型对象以关联事件。 与2中一样,但是模型没有传递给演示者。相反,该模型是一个静态类,在其中调用方法并直接返回响应。 B区 在使视图和模型保持同步方面,我已经看到了。 每当视图中的值发生更改时,即TextChanged.Net / C#中的事件。这会触发一个DataChangedEvent传递到模型中的,以使其始终保持同步。在模型发生变化的地方(即它侦听的后台事件),然后通过引发的相同想法来更新视图DataChangedEvent。当用户想要提交更改SaveEvent时,它将触发,并进入模型进行保存。在这种情况下,模型将模仿视图的数据并处理动作。 与#b1相似,但是视图并非始终与模型同步。相反,当用户想要提交更改时,将SaveEvent被解雇,演示者获取最新的详细信息并将其传递到模型中。在这种情况下,除非需要对视图数据进行操作,否则模型将不知道视图数据,在这种情况下,将传递所有必需的详细信息。 C区 在视图中显示业务对象,即不是原始数据的对象(MyClass)(int,double) 该视图具有将显示为域/业务对象的所有数据的属性字段。例如,view.Animals公开一个IEnumerable<IAnimal>属性,即使视图将它们处理到TreeView中的Nodes中。然后对于选定的动物,它将SelectedAnimal作为IAnimal属性公开。 该视图不了解域对象,它仅公开图元/框架(.Net / Java)包含的对象类型的属性。在这种情况下,演示者将把适配器对象传递给域对象,然后适配器将给定的业务对象转换为视图上可见的控件。在这种情况下,适配器必须有权访问视图上的实际控件,而不仅仅是任何视图,因此会变得更加紧密。 D区 用于创建单个控件的多个视图。即,您有一个具有简单模型的复杂视图,例如保存不同类型的对象。您可以在侧面有一个菜单系统,每单击一个项目就会显示相应的控件。 您创建一个巨大的视图,其中包含通过视图界面公开的所有单个控件。 您有几种看法。您有一个菜单视图和一个空白面板。该视图创建所需的其他视图,但不显示它们(visible = false),该视图还为其包含的每个视图(即子视图)实现接口,因此可以向一个演示者公开。空白面板中将填充其他视图(Controls.Add(myview))和((myview.visible = true)。这些“子”视图中引发的事件由父视图处理,父视图又将事件传递给演示者,反之亦然,以将事件提供给子元素。 每个视图(无论是主要父视图还是较小的子视图)均连接到自己的演示者和模型中。您可以从文化上将视图控件放到现有的表单中,它将具备功能,只需将其连接到幕后的演示者中即可。 E节 如果所有内容都具有接口,那么现在基于以上示例中MVP的完成方式,由于它们可能不是交叉兼容的,因此将影响此答案。 一切都有界面,视图,演示者和模型。然后,显然每个都有具体的实现。即使您只有一个具体的视图,模型和演示者。 视图和模型具有接口。这允许视图和模型不同。演示者创建/获得视图和模型对象,并且仅用于在它们之间传递消息。 仅视图具有界面。该模型具有静态方法,不会创建,因此不需要接口。如果需要其他模型,则演示者将调用一组不同的静态类方法。由于模型是静态的,因此与演示者没有链接。 个人想法 从我介绍的所有不同变体中(大多数我可能已经以某种形式使用过),我确信还有更多。我更喜欢A3,因为它可以使业务逻辑在MVP之外可重用,而B2则可以减少数据重复和触发事件。C1用于不添加其他类,请确保将少量非单元可测试的逻辑放入视图中(如何可视化域对象),但是可以对其进行代码审查,也可以在应用程序中简单地对其进行查看。如果逻辑很复杂,我会同意一个适配器类,但并非在所有情况下都同意。对于D部分,我觉得D1创建的视图对于菜单示例来说至少太大了。我以前用过D2和D3。D2的问题是,您最终不得不编写大量代码才能将事件往返于演示者与演示者之间路由到正确的子视图,并且其拖放操作不兼容,每个新控件都需要更多接线才能支持单个演示者。D3是我的首选,但是即使视图恰好非常简单或不需要重用,D3仍会作为演示者和模型添加更多类来处理该视图。我认为根据情况,D2和D3的混合效果最好。对于E部分,我认为具有接口的所有内容都可能过头了,因为我已经对域/业务对象进行了此操作,因此这样做通常不会在“设计”中看到任何优势,但它确实有助于在测试中模拟对象。我个人认为E2是经典的解决方案,尽管我以前在2个项目中使用过E3。我认为根据情况,D2和D3的混合效果最好。对于E部分,我认为具有接口的所有内容都可能会过时了,我已经对域/业务对象进行了此操作,并且这样做通常不会在“设计”中看到任何优势,但是它确实有助于在测试中模拟对象。我个人认为E2是经典的解决方案,尽管我以前在2个项目中使用过E3。我认为根据情况,D2和D3的混合效果最好。对于E部分,我认为具有接口的所有内容都可能会过时了,我已经对域/业务对象进行了此操作,并且这样做通常不会在“设计”中看到任何优势,但是它确实有助于在测试中模拟对象。我个人认为E2是经典的解决方案,尽管我以前在2个项目中使用过E3。 题 我是否正确实施MVP?有正确的方法吗? 我已经读过Martin Fowler的著作,其中有很多变化,而且我还记得当我刚开始做MVC时,我理解了这个概念,但是最初无法确定切入点在哪里,一切都有自己的功能,但是控制和创建原始作品的是什么MVC对象集。

4
编写验收测试用例
我们正在将测试过程集成到SCRUM过程中。我的新角色是编写我们的Web应用程序的验收测试,以便稍后使它们自动化。我已经阅读了很多有关如何编写测试用例的文章,但是没有一个给我实用的建议来编写用于复杂Web应用程序的测试用例,相反,它们引发了我发现难以应用的矛盾原则: 测试用例应该简短:以CMS为例。简短的测试用例易于维护,并且易于识别输入和输出。但是,如果我想测试一系列的操作(例如,添加文档,向另一个用户发送通知,其他用户答复,文档更改状态,用户收到通知),该怎么办?在我看来,测试用例应该代表完整的场景。但是我可以看到这将如何产生明显复杂的测试文档。 测试应该标识输入和输出:如果我的表单很长,包含许多相互作用的字段,并且行为不同,该怎么办。我要为所有内容编写一份测试,还是为每项编写一份? 测试用例应该是独立的:但是如果测试上传操作要求连接操作成功,我该如何应用呢?它如何适用于编写测试用例?我应该为每个操作编写一个测试,但每个测试都声明其依赖关系,还是应该为每个测试重写整个场景? 测试用例应轻松记录在案:此原则特定于敏捷项目。那么,您对如何实施这一原则有何建议? 尽管我认为编写验收测试用例会很简单,但我发现自己对要做的每一个决定都不知所措(仅供参考:我是开发人员,而不是专业的测试人员)。所以我的主要问题是:为了编写适用于复杂应用程序的可维护验收测试用例,您有什么步骤或建议。谢谢。 编辑:澄清我的问题:我知道验收测试应该从需求开始,并将整个应用程序视为一个黑匣子。我的问题与编写测试文档,确定测试用例,处理测试之间的依赖关系的实际步骤有关...对于复杂的Web应用程序

11
编程语言应该严格还是宽松?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 在Python和JavaScript中,分号是可选的。 在PHP中,围绕数组键的引号是可选的($_GET[key]vs $_GET['key']),尽管如果省略它们,则会首先使用该名称查找常量。它还允许2种不同样式的块(用冒号或大括号分隔)。 我现在正在创建一种编程语言,并且试图确定我应该做的严格程度。在很多情况下,多余的字符不是真正必要的,并且由于优先级的原因可以明确地解释,但我想知道是否仍应强制使用它们以鼓励一致性。 你怎么看? 好的,我的语言不是花哨的模板语言,而是编程语言。Haml和Django模板之间的一种交叉。打算与我的C#Web框架一起使用,并且应该具有很好的可扩展性。

6
为什么总是“下一步我应该学习什么语言”而不是“下一步我应该解决什么项目”?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 为什么像我这样的新手程序员总是问他们应该学习的下一门语言,而不是问下一个要解决的项目? 为什么埃里克·雷蒙德(Eric Raymond)在他的“ 如何成为一名黑客 ”文章的“ 学习如何编程 ”部分中,谈到了学习语言的顺序(与处理项目的顺序)。 刚开始的木匠会问“我知道如何使用锤子吗……我接下来应该学习如何使用锯子或水平仪吗?” 我问,因为我发现,几乎任何有意义的项目,我很感兴趣,解决(如Web应用程序,一组扑克分析工具)需要我学习刚够上的众多语言(Python和C,HTML,CSS ,Javascript,SQL)和框架/库(wxPython,tkinter,Django)来实现它们。 谢谢, 麦克风

4
如何从数据库角度处理实时数据?
我有一个主意,但它仍然使我迷惑数据库区域。 想象一下,我想显示实时数据,并使用一种最新的浏览器技术(Web套接字 -甚至使用较旧的浏览器),很容易向所有可观察对象(用户浏览器)显示每个人的工作。 雷米·夏普(Remy Sharp)举例说明了这一点。 但是我仍然不了解数据库,我该如何喂食,让我们想象一下(使用Remy游戏Tron),我想在数据库中保存每个已连接用户的路径,以及客户端是否想了解发生了什么事情一个5秒的延迟,他将看到,不仅是那一刻的5秒,而且是时间的延续 ... 我如何查询这样的数据库? SELECT x, y FROM run WHERE time >= DATEADD(second, -5, rundate); 推荐的路径不对吗? 并在x时间内拉出x ...这不是真实的数据Feed正确吗? 如果有人可以帮助我理解数据库的观点,我将不胜感激。
14 database  sockets 

6
业务逻辑层(BLL)有什么用?
在学习数据库应用程序的良好实践时,我经常遇到所谓的“业务逻辑层”的拥护者,我试图确定对我的项目来说最好使用一个(这是一个小型的个人项目)。我的问题在于,我无法想到BLL要做DAL无法处理的任何事情(执行查询并将结果映射到对象),所以我的BLL只是在不做任何事情的情况下调用DAL。 也许我对DAL也应该做的事情是错误的。但是,无论如何,数据库管理应用程序中的BLL应该具有什么样的功能?

4
什么时候应该使用模拟对象?
我已经阅读了很多有关TDD的内容,但是我仍然有疑问。例如,我有以下类图: 这是一个简单的示例,仅用于了解TDD和模拟对象。 我应该先写哪个测试?产品,然后行,最后,订购?如果这样做,我应该使用生产线和产品来测试订单还是应该使用模拟对象?我什么时候应该使用模拟对象?我应该在XP和TDD中使用UML吗? 我还没有这些东西。

3
您如何导航和重构以动态语言编写的代码?
我喜欢编写Python,Ruby或Javascript所需的模板很少。我喜欢简单的功能构造。我喜欢简洁的语法。 但是,在使用动态语言开发大型软件时,我确实很不擅长三件事: 浏览代码 识别我正在使用的对象的接口 有效重构 我一直在尝试使用简单的编辑器(例如Vim)以及IDE(Eclipse + PyDev),但在两种情况下,我都觉得我必须对内存进行更多的投入和/或不断地“ grep”并仔细阅读代码以识别接口。当使用具有多个依赖项的大型代码库时,尤其如此。 至于重构,例如更改方法名称,它在很大程度上取决于我的单元测试的质量。而且,如果我尝试通过“切断”应用程序的其余部分来隔离我的单元测试,则不能保证存根的接口与存根的对象保持最新。 我确定有解决这些问题的方法。您如何在Python,Ruby或Javascript中高效地工作?

6
是否可以设计一种没有语法错误的语言?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 换句话说,一种语言,其中每个可能的字符串都是有效的语法? 编辑:这是一个理论问题。 我对使用这种语言没有兴趣;我只是问是否有可能。 进一步编辑 我继续设计一种这样的语言。看到ErrorFree

9
将当前编程环境迁移到新笔记本电脑的最简单方法是什么?
我有一台基于WinXP的笔记本电脑,按照今天的标准,它具有相当基本的硬件配置。我正计划升级到具有更好硬件的基于WinXP的笔记本电脑。 问题:我目前的笔记本电脑上装有大量软件,例如cygwin,perl,ruby等。手动安装每个软件都非常麻烦。更不用说定制软件包了。 是否有任何软件(免费软件或商业软件,都可以)可以以最小的代价迁移我当前的编程环境?

7
Emacs和“自我增强性能”
简而言之,对于您的Emacs核心用户,我的问题是:您实现了Steve Yegge所说的 “自我增强性能” 吗? Emacs具有自我托管功能:在其中编写东西可以使环境本身更强大。这是一个反馈循环:递归的,自我增强的,可乘的效应之所以发生,是因为您正在增强用于创建增强功能的环境。 您是否真的觉得增强Emacs最终使您的生产率提高了10倍,并且您的生产率继续呈指数级增长,依此类推? 你有一些例子/经验可以分享吗? 对于我来说,我同时使用Emacs和Vim进行开发(目前坚持使用Vim),.emacs并且我和Im .vimrc都进行了适当配置以满足我的需求,并且我欣赏这两个编辑器的强大功能。但是我没有经历过Emacs的“自我强化循环”,也没有遇到过这样做的人(当然,这可能是因为我不是真正的Emacser顽固派,并且还没有遇到那么多Emacsers)。 例如,在Facebook上,我旁边的那个家伙正在使用Vim,而他旁边的那个家伙正在使用Emacs。他们两个都像地狱般迅速而富有成果,我不认为这是因为他们使用的编辑器,而是他们自己的才智和态度。 但是无论如何,我很高兴看到埃马克斯支持者的惊人例子使我回到埃马克斯教堂。

9
带代码去面试?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 将印刷的代码或USB上的代码进行采访是个好主意吗?如果是这样,我应该携带哪种代码。我应该避免执行大型项目,而只显示一些小片段来炫耀我的技能吗?

7
PHP有什么好处?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 每个人都知道对某些编程语言有偏见的人。尤其是PHP,似乎受其过去和其他一些问题(例如,松散类型)的困扰,通常被称为非严肃的编程语言,不应用于专业应用程序。 在这种特殊情况下,PHP:您如何辩解使用PHP作为Web应用程序的所选编程语言?有什么好处,PHP在哪些方面比ColdFusion,Java等更好?
14 php 

6
您可以一步一步构建吗?
从joel测试: 您可以一步一步构建吗? 我必须说我不能。我目前正在使用一个Web应用程序,该应用程序具有必须进行部署才能部署的项目的电子表格列表。所以我的问题是如何使它自动化?是否必须在整个组织范围内?提示/技术?

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.