软件工程

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

5
关于移动应用的繁荣,服务器端技术领域正在发生什么?
随着移动技术变得越来越流行,这些应用程序中的大多数在需要与后端通信时在服务器端发生了什么? 我习惯于10年前的技术世界,那时大多数资源都是通过请求一个动态网页来访问的,该网页在被查看者的背后使用服务器端语言从关系数据库中获取所需的信息。 情况是否仍然如此?如果不是,则有哪些重大变化?

7
是否有任何OO语言支持一种机制来确保重写的方法将调用基?
我认为这可能是有用的语言功能,并且想知道是否有任何语言已经支持它。 这个想法是如果您有: class C virtual F statement1 statement2 和 class D inherits C override F statement1 statement2 C.F() 将对CF()应用一个关键字,以便删除上面的代码的最后一行将导致编译器错误,因为它说:“可以重写此方法,但是无论如何,这里的实现都需要运行”。

7
在Scrum中,是否应该将功能积压和技术性积压分开?
在我们的Scrum团队中,我们使用积压的订单,其中大部分包含功能主题,但有时也包含技术主题。拥有1个待办事项的好处是可以轻松选择下一个冲刺的主题,但是我有一些疑问: 首先,对我来说,有一个单独的技术待办事项似乎更合乎逻辑,开发人员自己可以在其中添加纯粹的技术项目,例如:我们可以用这种方法提高性能,该类缺少一些技术文档,...通过拥有一个待办事项,所有开发人员总是必须通过产品所有者来将其主题添加到待办事项中,这对于产品所有者而言似乎是额外的,不必要的工作。 其次,如果您的产品所有者只关注纯功能性项目,纯技术性项目(例如缺少技术文档,侵蚀代码并应进行重构的代码),则此类类在调试期间总是会出现问题,因为它们没有一个稳定的基础,应该进行重构,...)总是排在最后,因为“它们不直接为客户服务”。通过有单独的技术待办事项,并在每个sprint中为这些纯技术项目保留时间,我们可以在功能上改进应用程序,但也可以使其内在健康。 最好的方法是什么?一两个积压?

1
最短公共超级字符串:查找包含所有给定字符串片段的最短字符串
给定一些字符串片段,我想找到包含所有片段的最短的单个字符串(“输出字符串”)。片段在输出字符串中可以相互重叠。 例: 对于字符串片段: BCDA AGF ABC 以下输出字符串包含所有片段,并且是通过天真的附加而制成的: BCDAAGFABC 但是,此输出字符串更好(更短),因为它使用了重叠: ABCDAGF ^ ABC ^ BCDA ^ AGF 我正在寻找解决此问题的算法。找到严格最短的输出字符串并不是绝对重要,但是越短越好。我在寻找一种比明显的幼稚算法更好的算法,该算法会尝试附加输入片段的所有排列并消除重叠(看起来是NP-Complete)。 我已经开始研究解决方案,事实证明这很有趣。我想看看其他人会提出什么。我会在一段时间内将正在进行的工作添加到该问题中。

1
那么,“设计模式是否缺少语言功能”?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 我在程序员那里看到了这个问题的答案:对设计模式和OOP实践的思考如何在动态和弱类型语言中发生变化?在那里,我找到了标题为直截了当的文章的链接:设计模式缺少语言功能。但是在我发现片段对我来说似乎很吸引人的地方,并且可以凭经验加以验证,因为这样做有诱因,例如: PaulGraham说:“ Peter Norvig发现,设计模式中的23个模式中有16个在Lisp中是'不可见的或更简单的'。” 或另一句话证实了我最近在尝试使用JavaScript模拟类的人中看到的内容: 当然,没有人会说“功能”模式,“类”模式或我们认为理所当然的许多其他事情,因为大多数语言都将它们作为内置功能提供。OTOH,使用纯PrototypeOriented语言的程序员?可能会发现使用原型模拟类很方便... 我还考虑到设计模式是一种交流工具。因为即使我参与构建应用程序的经验有限,我也可以将其视为反模式(无效和/或适得其反),例如,这迫使一个小型PHP团队学习中小型Intranet App的GoF模式。我知道规模,范围和目的可以决定什么是有效的和/或富有成效的,但是我仍然没有找到有关这方面的技术概述。 我看到了一些小型的商业应用程序,它们将功能与OOP混合在一起并且仍然可以维护,并且我不知道是否有很多应用程序需要使用python编写单例,但是对我来说,一个简单的模块可以完成同样的事情。 那么,是否有研究,详尽的文章或其他形式的博览会考虑了设计模式,变通方法,更简单的实现方式或语言功能的替代?

5
动态语言是否不利于敏捷开发?
从我读到的内容来看,敏捷开发通常涉及到将重构或反向工程代码重构为图表。当然还有很多,但是如果我们考虑依赖这两种方法的实践,动态类型的语言是否处于不利地位? 看来静态类型的语言会使重构和逆向工程容易得多。 如果在动态类型语言中并非不可能,那么重构或(自动化)逆向工程难吗?现实世界中的项目说明了如何将动态类型的语言用于敏捷方法?

5
从其他语言模仿概念会产生什么问题?
我在网络上已经读过很多遍了,如果您的语言不支持某些概念(例如,面向对象或函数调用),并且在其他情况下被认为是一种好的做法,则应该这样做。 我现在看到的唯一问题是,其他程序员可能会发现您的代码与通常的代码太不同,从而使他们难以编程。您认为这还会引起什么其他问题?

7
“时间结束”是否有常数?
对于某些系统,时间值9999-12-31用作计算机可以计算的时间的“结束时间”。但是,如果改变了怎么办?将此时间定义为内置变量会更好吗? 在C和其他编程语言中,通常使用诸如MAX_INT或类似的变量来获取整数可能具有的最大值。为什么没有类似的函数MAX_TIME将变量设置为“时间结束”,对于许多系统而言,该时间通常为9999-12-31。为了避免硬编码到错误的年份(9999)的问题,这些系统是否可以为“时间结束”引入变量? **真实示例** End of validity date: 31/12/9999.(这样列出了正式文档)博客作者希望编写一个始终位于最上方的页面,即欢迎页面。因此,它有一个尽可能远的将来的日期: 3000?是的,您面临的欢迎页面发布于3000年1月1日。因此,该页面将永远保留在博客的顶部=)它实际上发布于2007年8月31日。

6
Scrum:如何一次处理一个故事
我被提名为新成立的Scrum团队的Scrum Master。我们已经完成了一些冲刺。一开始,我试图让我的团队一次处理一个故事。但这没有用。我的团队难以以可以同时处理一个故事的方式分配任务。也许我们做错了什么? 例如:我们有一个故事来创建一个新对话框。我们创建以下任务: 创建模型类 从数据库读取模型数据 将模型类与视图连接 实施对话框处理 关闭保存数据 测试文件 解决方案说明 这些任务可以一次由多个人完成吗?任务(或多或少)是相互依赖的。还是我们以错误的方式设计任务?

3
如何在单个事务中管理2种DAO方法?
在一次采访中有人问我:我们如何在一次交易中管理两种交易/道方法。所需功能: 如果其中任何一个失败,我们都需要回滚这两种方法。 可以将这两种方法与单个事务分开附加调用。 管理应该在DAO层上,而不是在服务层上。 我认为:这个问题与春季交易管理有关。

2
C ++库API设计
我正在寻找一个很好的资源来学习C ++库的良好API设计,查看共享的对象/ dll等。在源代码级别上有很多资源可以编写漂亮的API,漂亮的类,模板等,但是几乎没有将它们放到共享的库和可执行文件中。约翰·拉科斯(John Lakos)的《大规模C ++软件设计》一书很有趣,但已经过时了。 我正在寻找的是关于处理模板的建议。在API中使用模板后,我通常会在可执行文件(或其他库)中获得库代码,因此,如果在那里修复错误,我将无法简单地推出新库,而必须重新编译和重新分发该代码的所有客户端。(是的,我知道一些解决方案,例如尝试实例化至少库中最常见的版本等)。 我还在寻找其他注意事项和在C ++库上保持二进制兼容性时需要注意的事项。 是否有一个很好的网站或关于此类事情的书?

2
n层实体框架解决方案的依赖注入
我当前正在设计一个使用实体框架5(.net 4)作为其数据访问策略的n层解决方案,但是我担心如何合并依赖项注入以使其可测试/灵活。 我当前的解决方案布局如下(我的解决方案称为Alcatraz): Alcatraz.WebUI:一个asp.net Webform项目(前端用户界面)引用项目Alcatraz.Business和Alcatraz.Data.Models。 Alcatraz.Business:一个类库项目,包含业务逻辑,引用项目Alcatraz.Data.Access,Alcatraz.Data.Models Alcatraz.Data.Access:一个类库项目,包含AlcatrazModel.edmx和AlcatrazEntitiesDbContext,引用项目Alcatraz.Data.Models。 Alcatraz.Data.Models:一个类库项目,包含Alcatraz模型的POCO,无引用。 我对这个解决方案如何工作的愿景是,Web-ui将实例化业务库中的存储库,该存储库将具有(通过构造函数)连接字符串(而不是AlcatrazEntities实例)的依赖项。Web用户界面会知道数据库连接字符串,但不知道它是一个实体框架连接字符串。 在业务项目中: public class InmateRepository : IInmateRepository { private string _connectionString; public InmateRepository(string connectionString) { if (connectionString == null) { throw new ArgumentNullException("connectionString"); } EntityConnectionStringBuilder connectionBuilder = new EntityConnectionStringBuilder(); connectionBuilder.Metadata = "res://*/AlcatrazModel.csdl|res://*/AlcatrazModel.ssdl|res://*/AlcatrazModel.msl"; connectionBuilder.Provider = "System.Data.SqlClient"; connectionBuilder.ProviderConnectionString = connectionString; _connectionString = connectionBuilder.ToString(); } …

5
如何创建具有任意/通用类别节点的可变的,可变的jtree?
请注意:我不想在这里进行编码帮助,Programmers原因是我在这里。我想提高我的程序计划/编写技能,而不仅仅是(对)我对Java的理解。 我正在根据此处针对LARP游戏列出的技能,试图找出如何制作具有任意类别系统的树。我先前的尝试对技能是否也是一类产品感到很失望。尝试对此进行编码很乱。画出我的树时,我注意到只有我的“叶子”才是技能,我将其他人标记为类别。 我所追求的是一种制作树的方法,该树尝试将模型和视图分开,并允许将任意类型的子节点(具有独立的编辑/渲染方式)添加到任意父节点。 注意:这里的所有东西都是作为技能购买的,即使看起来像是房产。最终用户会将其视为购买技能(他们在纸上atm上做的事情),因此应将其呈现在同一页面上。 树的解释:树是“出生的”,具有一组硬编码的最高级别类别(武器,身体和心理,医疗等)。由此,用户需要能够增加一项技能。最终,他们希望增加例如“单手剑专精” 技能(而非物品)。为此,理想情况下,请单击“添加”并Weapons选中,然后One-handed从出现在该子节点上的组合框节点中进行选择,然后再次单击“添加” ,然后在出现的该子节点上的文本字段中输入名称。然后再次单击添加以为该叶子添加/指定“级别”或“层”;首先是熟练程度,然后是专业化(例如)。 当然,如果您想购买其他技能,那是完全不同的途径。您可能不需要像使用武器示例那样在树下同一级别的组合框,也不需要其后的其他逻辑。这就是我难以理解的地方,更不用说编程了。如何制作一组类,而不指定将它们连接在一起的顺序,但是仍然使它们都适合。 用代码描述这种树的好的系统是什么?我见过的所有其他JTree示例都具有一些可预测的模式,而我的则没有。我不想在“文字”中编写全部代码,而在父级上应允许列出子节点的类型(组合框,文本字段等)的长列表。我应该使用抽象类吗?接口? 当我添加上面未列出的其他行为不同的技能时,如何使这类对象集群可扩展? 如果没有一个好的系统可以使用,那么是否有一个好的过程可以弄清楚该怎么做呢? 我脑海中的齿轮正在转动: 我总是需要: 检查父母 提供基于父项的选项 由于这种共性,我开始思考,我需要某种抽象/接口skill类来定义/概述技能和类别的通用方法。我可以(希望)将规则和选项放入数据库中并从中读取。现在我想的问题是,在抽象或接口方法与如何实现该方法之间。

1
小型项目的Git工作流程/实践(PNG流程图)
我正在尝试提出一个个人工作流程。我整理了一个发行版的假设生命周期的流程图:一个开发人员推向公开的github repo +一个帮助提供某些功能并修复bug的朋友。 这是版本控制的合理方法吗? 主要思想是保持公共仓库整洁: 每个新版本都会进入自己的分支,直到完成后最终在master分支中对其进行标记。 为了防止异常,所有工作都在“功能”或“修补程序”分支上进行,而不是在实际的发行分支上进行。 合并到更高级别的分支总是要重新设置基础或进行压缩(以避免混乱)。 如果这太过猛烈,我不介意,因为对我而言,重点就在于学习大型项目可能需要的技能。唯一的问题是,如果我在做完全错误或不必要的事情。 编辑2:修正原始流程图中的错误主意,并使它更易于浏览。

12
使用XML作为数据存储[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我在考虑XML格式和以下引号: “ XML不是数据库。它从来都不是一个数据库。它永远不会成为数据库。关系数据库是经过验证的技术,具有20多年的实施经验。它们是坚固,稳定,有用的产品。他们不会消失。XML是在不同数据库之间或数据库与其他程序之间移动数据的非常有用的技术。但是,它本身不是数据库。“不要像以前一样使用它。”- Elliotte Rusty Harold着,有效的XML:50种改进XML的特定方法(第230页,第4部分,第41项,第二段) 这似乎确实强调了XML不应该用于数据存储,而应该仅用于程序之间的互操作性。 我个人不同意,app.config用于存储程序设置的.NET 文件是XML文件中数据存储的一个示例。但是,对于数据库而不是配置等,不应使用XML。 为了 阐明我的观点,我将使用两个示例:A)有关客户的数据全部都在一个级别上,即,有许多字段都与一位没有子 级的客户有关B)有关应用程序配置的数据,其中嵌套字段和属性很有意义 所以我的问题是,这仍然是有效的语句吗?现在可以接受使用XML存储数据了吗? 编辑:我已经给该报价的作者发送了一封电子邮件,要求他提供输入/其他上下文。

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.