软件工程

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

3
从架构上讲,诸如Microsoft的Entity Framework之类的数据库抽象层是否使对单独的数据访问层的需求无效?
原来的样子 多年以来,我一直在组织软件解决方案,例如: 数据访问层(DAL),用于抽象访问数据的业务 业务逻辑层(BLL),用于将业务规则应用于数据集,处理身份验证等。 实用程序(Util)只是我逐渐建立的常用实用程序方法的库。 表示层当然可以是Web,桌面,移动等。 现在的样子 在过去的四年左右的时间里,我一直在使用Microsoft的Entity Framework(我主要是.NET开发人员),并且由于Entity Framework已经完成了DAL工作,因此我发现拥有DAL变得越来越麻烦。我的DAL曾经做过的工作:它抽象了针对数据库运行CRUD的业务。 因此,我通常以一个DAL结束,该DAL具有如下方法的集合: public static IQueryable<SomeObject> GetObjects(){ var db = new myDatabaseContext(); return db.SomeObjectTable; } 然后,在BLL中,该方法将按如下方式使用: public static List<SomeObject> GetMyObjects(int myId){ return DAL.GetObjects.Where(ob => op.accountId == myId).ToList(); } 当然,这是一个简单的示例,因为BLL通常会应用多行逻辑,但是在这样有限的范围内维护DAL似乎有点多余。 放弃DAL并像这样简单地编写我的BLL方法会不会更好: public static List<SomeObject> GetMyObjects(int myId){ var db = new myDatabaseContext(); return db.SomeObjectTable.Where(ob …

1
如何查看代码的哪些部分最常运行?
我希望能够看到成千上万行源代码中的哪些代码运行最频繁且花费时间最长。这样做的目的是为了优化。 能够看到最常运行的代码部分对于优化很重要,因为这些部分是我应该集中精力来加快速度的地方。当然,与此同时,某些代码经常运行,但是几乎不需要时间,因此能够看到哪些代码花费的时间也很重要。 我猜这两个方面最好的是一个程序,该程序可以将一段代码加起来的时间加起来,包括运行该代码的所有时间(从而弄清楚什么会使您的代码整体上最慢)。是否有一种用于此的工具?

3
带有匹配起始和结束字母的单词的最长列表
我的朋友给我一个问题,他说这很简单,但是我想不出一个好的算法来实现。 系统会为您提供100个随机英语单词的输入。您必须找到最长的字符串,其中一个单词的最后一个字母与下一个单词的第一个字母匹配。每个单词只能使用一次。 例如,如果给您单词“ cat”,“ dog”,“ that”,则您可以输入的最长字符串将是“ cat-> that”。如果给您单词“ mouse”,“ moose”,“ unicorn”,则您可以输入的最长字符串将仅为一个单词(因为这些单词均未链接)。如果给您单词“ bird”,“ dish”,“ harb”,则最长的字符串可能是“ harb-> bird-> dish”(或“ dish-> harb-> bird”或“ bird- >菜-> harb”)。 我想到了将其建模为有向循环图的想法。每个节点只是一个单词,每个单词/节点的顶点都以该单词结尾的字母开头。 +-------+ \ +------+ | cat |-----------| that | +-------+ / +------+ | | \|/ | +-------+ / | | the |--------------+ +-------+ \ 这个问题似乎是最长路径搜索,即NP-Hard。 有更好的方法吗?甚至可以使用某种近似算法?还是采用某种方法来利用英语来减少搜索空间?
11 algorithms 

2
在没有ORDER BY子句的情况下按什么顺序获取行?
一位程序员正在测试和比较使用相同数据库结构和相同数据的同一应用程序,仅在两个单独的数据库中进行比较,一个数据库使用Oracle 8,一个数据库使用Oracle 9。 该应用程序运行不带 ORDER BY子句的查询。 他声称,ORDER-BY-less查询应在两个数据库中以相同顺序返回行。 我告诉他,除非您明确提供ORDER BY子句,否则不能保证同一行顺序。 该数据库具有相同的索引和键。但是解释计划表明,在其中一个数据库中,引擎使用的是连接表之一的键,而在另一个数据库中,引擎使用的是另一个表的键。 他暗示这两个数据库环境不相等,这是因为它们具有不同的统计信息,不同的rdbms引擎等,但不是因为我未能复制原始数据库具有的每个索引。 我告诉他,ORDER BY如果命令真的那么重要,他必须明确提供一个条款。 问题 所以我可以更好地向他解释: 当您不显式提供ORDER BY子句时,查询以什么顺序获取行,为什么该查询不按相同顺序返回行?
11 sql  oracle  rdbms 

3
我需要了解编程语言的内在知识吗?
我是Python的初学者,到目前为止我真的很喜欢。我经常想到的一个问题是,我是否需要了解并学习编程语言的内在知识(例如Python)。您可能知道,Python本身是用C编写的。 所以我的问题是:必须精通一种语言才能熟练或熟练使用该语言。我将此问题与“自然”语言进行比较。我不知道我的母语语法的每一个细节,但我能够用该语言毫无问题地表达自己。这是我说我的语言很流利的时候。那也适用于编程语言吗?

2
“清洁代码”实践真的那么清洁和有用吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我目前在一家大公司实习,他们的软件交付结构正在发生许多变化(迁移到敏捷)。 在过去的几个月中,我注意到这种对Clean Code实践的宗教依恋,而这本书 对于开发人员来说就像一本圣经。 现在,干净代码的最重要特征之一是自解释代码,它基于可理解的命名和严格的重构。这是no commenting规则。 我知道这段干净的代码是一项长期投资,可以减轻代码维护和改进的负担,但是...这真的值得大惊小怪吗? 任何人都可以分享他们在“清洁法规”方面的经验以及任何意见,无论我是太保守还是只是暂时的趋势。


6
我们应该如何处理Scrum冲刺中的其他外观特征?
我正在阅读Scrum文档,它说Sprint中的任务应该是“潜在的”。 我对这意味着什么感到困惑。假设在Sprint 1中,目标是“用户注册表”。 我需要添加多少细节才能准备好发货?例如: 我可以使用没有任何花哨样式的字段来显示简单表单并将其标记为完成 我可以将客户端验证标记为已完成,但是服务器端也可以选择这两者 我还可以为表单添加一些jQuery花式工具提示,鼠标悬停,验证码,颜色,标签 然后有很多关于如何在屏幕上显示错误消息的样式 我可以在一个主题上无休止地做。因此,我们如何进行划分以及何时可以将其视为已准备好发货。 还是我需要写一些最小的东西,例如将错误,弹出窗口或灯箱文本显示为子任务,然后将它们作为sprint。这将导致整个项目执行数千个任务。 我的意思是再说一次,如果Internet Explorer和Firefox都可以使用,那么我也需要将其划分为任务。必须花时间在上面,当经理问我您当时的工作时,我没有任何要说的任务,但实际上,它们都是用户注册的一部分

2
Lua如何处理整数和浮点数?
据我记得自己编程时,我曾被教过不要比较浮点数是否相等。现在,在阅读有关Lua 类型的Lua编程时number,我发现了以下内容: 数字类型表示实数(双精度浮点数)。Lua没有整数类型,因为它不需要它。人们对浮点算术错误普遍存在误解,有人担心即使是简单的增量也会对浮点数产生怪异。事实是,当您使用双精度数表示整数时,根本没有舍入错误(除非数字大于100,000,000,000,000)。具体来说,Lua数可以表示任何长整数而没有舍入问题。而且,大多数现代CPU进行浮点运算的速度与整数运算一样快(甚至更快)。 所有语言都正确吗?基本上,如果我们不超过双精度浮点数,那么使用整数算术安全吗?或者,为了更符合问题标题,Lua对它的number类型有什么特殊之处,以便它既可以用作整数类型又可以用作浮点类型吗?

2
Haskell内存效率-哪种方法更好?
我们正在基于修改后的二维语法语法实现矩阵压缩库。现在,我们对数据类型有两种方法-如果使用内存,哪种方法更好?(我们要压缩一些东西;))。 语法包含恰好有4个Productions的NonTerminals或右侧的Terminal。我们将需要Productions的名称来进行相等性检查和语法最小化。 首先: -- | Type synonym for non-terminal symbols type NonTerminal = String -- | Data type for the right hand side of a production data RightHandSide = DownStep NonTerminal NonTerminal NonTerminal NonTerminal | Terminal Int -- | Data type for a set of productions type ProductionMap = Map …

3
为什么我们不为枚举,抽象类和结构添加前缀?
C#社区已经无处不在地使用“ I”前缀来表示一个接口,即使是最没有经验的程序员也知道会使用它。 为什么我们不给枚举,抽象类或结构加上前缀(可能分别以“ E”,“ A”和“ S”开头)? 例如,如果我们确实用“ A”标记了所有抽象类,它将提供有关该类型的有价值的信息,尽管可以推断出这种信息并不是立即显而易见的。 请注意,我不主张这种改变,我只是在试图理解为什么我们不这样做。 该线程回答了我们为什么使用“ I”前缀的原因,但没有回答为什么我们不使用其他前缀的原因。

3
集成测试中应包括集成测试吗?
假设我们正在开发一个Web应用程序,并且Hudson做一些典型的工作,例如编译,单元测试和静态代码分析。 但是棘手的部分是:一旦完成先前的工作,Hudson就会部署并启动应用程序服务器以进行集成测试。 这意味着一些困难的事情,例如数据库连接,第三部分应用程序连接,套接字端口监听,环境变量,服务器启动故障处理等。我们每次都必须正确地设置和拆除这些东西,这很难。更糟糕的是,集成测试会轻易破坏集成测试。 您认为持续集成(CI)中是否应包括集成测试?可以手动吗?还是简化集成测试?

1
使用迁移或SQL Server数据工具进行代码优先是否更合适?
我已经获得建立一个新的MVC4网站的规范,起初它不会是一个太大的项目,但是我怀疑它会随着企业对它的新想法的发展而增长。 使用.NET 4.5 ASP.NET MVC4和EF,我必须在进行迁移的代码优先或Sql Server Data Tools(SSDT)之间进行选择,以处理数据库。 借助SSDT,我可以在项目中控制数据库,这是解决方案的一部分,并且可以使用dacpac文件处理从开发到生产的所有更改。我从MVC3进行代码优先的经验是,由于数据库选项有限,所以没有在开发中使用它。最终会导致在模型更改时放弃Db或手动处理Db更改。但是,我被认为不再使用MVC4迁移了,现在我可以将更新推送到Db了。 因此,我的问题是,在节省开发时间/精力的同时,还可以扩展并能够处理生产变更,哪种方法最有效。我喜欢代码优先和能够从模型生成数据库的能力,现在迁移的引入使它在生产中可行吗?

5
冲刺项目需要更长的时间,然后才能完成。我们应该做什么?
如果Scrum中的项目花费的时间比预期的长,我们该怎么办?我之所以这么问,是因为我一直在注意开发人员正在努力完成的项目,因为它比最初想的要困难得多。 在这种情况下,我们应该 将项目从sprint移回产品目录,以便我们可以满足sprint的时间表? 移至较容易的冲刺项目,并将有问题的冲刺留到时间表结束 在sprint审查中证明为什么在当前sprint中无法向利益相关者完成该项目? 将来如何避免这种情况?是由于缺乏预先计划,还是我们没有努力将冲刺项目分解为较小的项目?
11 scrum  sprint 

4
语音编程语言?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我们许多编码人员,程序员和开发人员都在遭受反复的压力伤害,腕管等困扰。 我一直很想将语音控制引入我的工作流程中,以减轻压力。 这就引出了我当前的问题:实施主要是语音的编程语言(或现有语言的超集)是否可行或可行,因此非常适合语音编程?

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.