软件工程

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

6
表达力具体指的是什么?
维基百科将表现力定义为: ..可以用该语言表示和传达的思想的广度。 “想法”是否指我们可以与机器通信的事物(操作,结构,算法等?)?还是它是指可以被捕获并与其他人交流的“人类”概念? 如何评估和衡量表达能力? 例如,如果我们采用JavaScript之类的语言,并对变量名称施加了怪异的限制,例如变量必须是一个8位数字,并带有下划线,match/^_[0-9]{8}$/,我们会失去表达能力吗? 还是那只会是荒唐而又烦人的? 澄清: 表达能力是由语言固有的一般思想衡量的: 整数和字符串 循环 有条件的 或该语言可以代表的特定,独特想法的数量: 整数1,2 ... 2 ^ 32 包含“狐狸怎么说”的字符串 和“ wah pah pah pah pah pah pow” 每个青蛙在我的收藏青蛙 如果青蛙是绿色的,或者做什么,那就做什么

3
使不同主机上的git存储库保持同步
我正在考虑开始一个小项目,我想用git对其进行版本控制。 Bitbucket的免费计划对我来说是一个不错的选择。我想将其用作使用git的主要工具,因为它们具有Web界面,Mac OS客户端等不错的工具。但是,为了更好地保护使用第三方服务可能造成的任何意外损坏,我还想在我的NAS上安装git作为存储库的第二个备份副本。 现在我的问题是,是否可以在两个不同的主机上创建一个存储库,然后使其保持同步?例如,假设我每周更新一次NAS上的存储库,使其与Bitbucket上的存储库匹配。然后,如果Bitbucket发生问题,我仍将在本地NAS存储上拥有完整的存储库以及完整的开发历史记录。 有没有办法将具有完整历史记录的现有存储库导入另一个git-service? 我认为镜像是我所需要的。这条似乎正是我需要的描述。而这一个也是如此。 我相信它将复制具有完整历史记录的完整副本,甚至自动将新版本自动提交到两台主机上的存储库中。 我对吗?
34 git 



8
JavaScript何时应生成HTML?
我尝试从JavaScript生成尽可能少的HTML。相反,我更愿意在可能的情况下操纵现有的标记,并且仅在需要动态插入不适合使用Ajax的元素时才生成HTML。我相信,由于标记更易于阅读和跟踪,因此可以更轻松地维护代码并快速对其进行更改。我的经验法则是:HTML用于文档结构,CSS用于表示,JavaScript用于行为。 但是,我已经看到了许多生成HTML堆的JS代码,包括整个表单和内容繁多的模式对话框。通常,哪种方法被认为是最佳实践?在什么情况下应使用JavaScript生成HTML,何时不使用HTML?
34 javascript  html 

6
为什么不开放非营利性源代码?[关闭]
我非常喜欢开源代码。我想我了解开源的大多数优势。我是一名理科学生研究员,我必须使用数量惊人的非开源软件和代码(要么是专有软件,要么是非公开软件)。我真的看不出有什么充分的理由,而且我可以看到代码和使用它的人一定会从更加公开的中受益(如果没有其他方面,科学上,必要时可以复制您的结果非常重要,如果其他人无法访问您的代码,则要困难得多)。 我走出去,开始传教之前,我想知道:有没有什么好的选择不释放不以营利为目的的代码公开,并与符合OSI许可证? (我意识到周围也有一些类似的 问题,但大多数问题都集中在代码主要用于赚钱的情况下,而我在回答中却没有多大关系。) 澄清:通过“非营利”,我包括下游的利润动机,例如母公司的品牌认知度和投资者的利润期望。换句话说,这个问题仅与迄今为止没有与软件相关的获利动机的软件有关。

3
Model-View-Presenter(MVP)方案对Android有用吗?
如何将Android中的View和Presenter分开,同时将对用户操作(MVP的Presenter部分)的反应设置为与显示GUI元素(MVP的View部分)相同的活动。 “在模型视图演示者中,就像Martin Fowler或Michael Feathers [2]所说的那样,UI的逻辑被分为一个称为presenter的类,该类处理来自用户的所有输入,并告诉“哑”视图何时何地。显示”(从此处引用)。 直到现在,我还认为Android的主要功能之一是智能的 Activity,它可以执行操作,对操作做出反应并显示结果。MVP方案与Android理念矛盾吗?尝试在Android上实现它是否有意义?如果是,该怎么办?
34 android  mvp 


8
为什么Clang / LLVM在覆盖所有枚举情况的switch语句中警告我使用default?
考虑以下枚举和switch语句: typedef enum { MaskValueUno, MaskValueDos } testingMask; void myFunction(testingMask theMask) { switch (theMask) { case MaskValueUno: {}// deal with it case MaskValueDos: {}// deal with it default: {} //deal with an unexpected or uninitialized value } }; 我是一个Objective-C程序员,但是我已经用纯C语言编写了此文档,以供更广泛的读者使用。 带有-Weverything的Clang / LLVM 4.1在默认行警告我: 开关中的默认标签,涵盖所有枚举值 现在,我可以看到为什么会出现这种情况:在理想情况下,参数中唯一输入的值theMask将在枚举中,因此不需要默认值。但是,如果出现一些hack并将未初始化的int放入我的漂亮函数中怎么办?我的功能将作为库中的一部分提供,我无法控制其中的内容。使用default是处理此问题的一种非常简洁的方法。 为什么LLVM众神认为这种行为不符合他们的地狱装置?我应该在前面加上if语句来检查参数吗?

6
什么时候应该在C ++中使用布尔值?
我们为班级分配了一个作业,在那里我们必须创建一个Tic-tac-toe游戏。人们喜欢使自己复杂化,因此他们编写了包含菜单的复杂游戏。游戏结束时,您必须选择再次播放或退出程序。我int为此使用了一个变量,但我注意到一些同学在使用BOOL。 效率更高吗?将答案仅存储在一个值中int而不是将其存储在布尔值中,有什么区别?这些变量的确切目的是什么?
34 c++  boolean 

2
如何改进Bloch的Builder模式,使其更适合在高度可扩展的类中使用
Joshua Bloch的《 Effective Java》(第二版)对我的影响很大,可能比我所读过的任何编程书都影响更大。特别是他的“建造者模式”(项目2)产生了最大的影响。 尽管Bloch的构建者在几个月内使我比过去十年更深入,但我仍然发现自己碰壁:使用自返回方法链扩展类充其量是令人沮丧的,更糟的是噩梦--especially当仿制药开始发挥作用,并特别与自我参照仿制药(如Comparable<T extends Comparable<T>>)。 我有两个主要需求,在这个问题中,我只想关注其中的第二个需求: 第一个问题是“如何共享自返回方法链,而不必在每个...单个...类中重新实现它们?” 对于那些可能感到好奇的人,我已经在本答案的底部讨论了这一部分,但这不是我想在这里重点讨论的。 我要评论的第二个问题是“如何在自己打算由许多其他类扩展的类中实现构建器?” 与构建者一起扩展课程比没有构建者扩展难度更大。扩展具有构建器的类也很麻烦,Needable因此也具有重要的泛型。 所以这是我的问题:我如何改进(称为)Bloch Builder,这样我就可以随意将构建器附加到任何类上,即使该类是可能成为“基础类”的,扩展和扩展了许多次- 在不影响我的未来自我或我的图书馆用户的情况下,由于构建器(及其潜在的泛型)施加了额外的负担吗? 附录 我的问题集中在上面的第2部分,但是我想详细说明问题一,包括如何处理它: 第一个问题是“如何共享自返回方法链,而不必在每个...单个...类中重新实现它们?” 这并不是要防止扩展类不得不重新实现这些链,当然,它们必须-而是如何防止希望利用这些方法链的非子类重新实现。 -实现每个自返回功能,以便他们的用户能够利用它们?为此,我提出了一个需要需求的设计,我将在此处打印界面框架,并暂时保留该框架。它对我来说效果很好(此设计需要花费数年的时间……最难的部分是避免循环依赖): public interface Chainable { Chainable chainID(boolean b_setStatic, Object o_id); Object getChainID(); Object getStaticChainID(); } public interface Needable<O,R extends Needer> extends Chainable { boolean isAvailableToNeeder(); Needable<O,R> startConfigReturnNeedable(R n_eeder); R getActiveNeeder(); boolean …

12
DVCS是否会阻止持续集成?
假设有一个由十个敏捷开发人员组成的团队。每天他们每个人都从董事会中挑选一项任务,并对它做出一些更改,直到(直到一天结束)他们已经完成了任务。所有开发人员都直接通过主干签入(Google风格,每次提交都是候选版本,使用功能切换等)。 如果他们使用的是像SVN这样的集中式CVS,那么每当其中一个提交时,构建服务器就会针对其他9个开发人员的工作进行集成并测试其更改。构建服务器几乎将全天连续运行。 但是,如果他们使用的是git之类的DCVS,则开发人员可能会等到完成任务后,再将所有本地提交一起推送到中央存储库。直到一天结束,他们的更改才会被整合。 在这种情况下,SVN团队更加频繁地进行集成,并且比git团队更快地发现集成问题。 这是否意味着DVCS比老式的集中式工具更不适合连续团队使用?你们如何解决这个推迟推送的问题?

3
如何构建完全模块化的Web应用程序
在接下来的几个月中,我们将开始一个项目,我们将采用为客户端(v1)构建的系统,并从头开始对其进行重建。v2的目标是使其模块化,以便该特定客户端拥有自己使用的一组模块,然后另一个客户端可以完全使用另一组模块。这里的窍门是,公司A可能具有一系列结帐和用户模块,这些模块会更改系统的工作方式。公司B可能会遵循标准的结帐程序,但会自定义产品的浏览方式。 当您要从头开始构建一个要Core在所有客户端之间共享的应用程序,同时又要为要专门针对客户端修改的内容保持灵活性时,应用程序体系结构有哪些好的方法? 我已经看过CodeIgniter的钩子,并且认为这不是一个好的解决方案,因为我们最终可能会有250个钩子,但仍然不够灵活。还有哪些其他解决方案?理想情况下,我们不需要在沙子上画一条线。

5
电影院座位预订系统如何防止多个用户预订相同的座位?
在电影院里,我去那里有售票亭,您可以选择想要的座位。他们也有一个相同的网站(该网站还有一个倒计时计时器,例如30秒,您必须在其中选择座位)。 虽然我了解诸如数据库事务之类的知识以及处理多个同时用户的其他技术,但我还是无法理解如何允许多个人同时选择一个席位;是否像第一个按“购买”的人那样简单,然后另一个人将收到错误消息,还是我错过了什么?

8
功能或非功能需求?
我想知道功能或非功能需求。我发现这些术语有许多不同的定义,我无法将某些要求分配给适当的类别。 我想知道与某些操作无关或具有一些其他条件的需求,例如: 在所选设备的列表上,可以重复该设备。 数据库必须包含至少100个项目 某些值的货币必须为美元。 设备的名称和功耗值必须以瓦为单位。 这些需求是功能性的还是非功能性的?

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.