软件工程

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

6
在C或C ++中执行“空检查”是什么意思?
我一直在学习C ++,并且很难理解null。特别是,我阅读的教程提到进行“空检查”,但是我不确定这意味着什么或为什么有必要。 到底是什么? “检查为空”是什么意思? 我是否总是需要检查null? 任何代码示例将不胜感激。
21 c++  c  null 

3
连续单词有数字的情况下如何驼峰?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 只是想知道是否有人在这个拐角处就可以遵循惯例。我确实使用过Java,但认为C#人员也可能有一些不错的见识。 假设我正在尝试命名一个类,其中该类名称中的两个连续单词均为数字(请注意,同一问题可能会问到标识符名称)。无法得到一个很好的例子,但请考虑一下“ IEEE 802 16位值”之类的内容。 如果接受诸如的类名,则可以将连续的首字母缩写词组合在一起HttpUrlConnection。但这严重地使我有点想上课的名字IEEE80216BitValue。如果我必须选择,那会比IEEE802_16BitValue看起来像是一个严重的错误还要糟糕。对于较小的数字,我会考虑,IEEE802SixteenBitValue但这并不能很好地扩展。 外面有公约吗?似乎只有Microsoft的命名准则是对缩略语命名进行足够详细描述以完成工作的准则,但是没有人解决过类名中的数字。

4
拆分大型模块是否有负面影响?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我正在浏览一个github项目,发现此模块有1万多行。 在一个模块中包含这么多的代码是一种惯例吗? 在我看来,这应该分为多个模块。也许每个数据库引擎一个。 开发人员从制作这样一个巨大的模块(而不是“将其全部放在一个地方”)获得什么好处,或者将其拆分(而不是“复杂性”)有什么坏处?

5
ORM是否启用富域模型的创建?
在我的大多数项目中使用Hibernate大约8年之后,我进入了一家不鼓励使用Hibernate并希望应用程序仅通过存储过程与DB进行交互的公司。 在执行了几周之后,我无法为我将开始构建的应用程序创建丰富的域模型,并且该应用程序看起来像(可怕的)事务脚本。 我发现的一些问题是: 由于存储过程仅加载最少的数据,因此无法导航对象图,这意味着有时我们具有具有不同字段的相似对象。一个示例是:我们有一个存储过程来从客户那里检索所有数据,另一个存储过程是从客户那里检索帐户信息以及一些字段。 许多逻辑最终出现在帮助器类中,因此代码变得更加结构化(实体用作旧的C结构)。 令人讨厌的脚手架代码,因为没有框架可以从存储过程中提取结果集并将其放入实体中。 我的问题是: 有没有人遇到过类似情况,并且不同意存储过程方法?你做了什么? 使用存储过程有实际好处吗?除了“没有人可以发布弃用表”这一愚蠢的观点之外。 有没有一种使用存储过程来创建富域的方法?我知道有可能使用AOP将DAO /存储库注入到实体中,从而能够导航对象图。我不喜欢这个选项,因为它非常接近伏都教。 结论 首先,谢谢大家的回答。我得出的结论是,ORM无法启用Rich Domain模型的创建(如某些人所述),但是它确实简化了(通常是重复的)工作量。以下是对结论的更详细说明,但并不基于任何硬数据。 大多数应用程序请求并将信息发送到其他系统。为此,我们在模型术语(例如,业务事件)中创建抽象,然后域模型发送或接收事件。事件通常需要来自模型的一小部分信息,而不是整个模型。例如,在一家网上商店中,支付网关会向用户收取一些用户信息和总计费用,但不需要购买历史记录,可用产品和所有客户群。因此,该事件具有少量特定的数据集。 如果我们将应用程序的数据库作为外部系统,则需要创建一个抽象,以允许我们将域模型实体映射到数据库(如NimChimpsky所述,使用数据映射器)。明显的区别是,现在我们需要为每个模型实体手工映射到数据库(旧模式或存储过程),而且还有一个痛苦,因为两个实体不同步,所以一个域实体可能会部分映射数据库实体(例如,仅包含用户名和密码的UserCredentials类映射到具有其他列的Users表),或者一个域模型实体可能映射到多个数据库实体(例如,如果存在一对一一张表上的映射,但我们只想将所有数据归为一类)。 在只有几个实体的应用程序中,如果不需要横向实体,那么额外的工作量可能很小,但是当有条件需要横向实体时,额外的工作量就会增加(因此,我们可能想实现某种“懒惰”正在加载”)。随着应用程序具有更多实体的发展,这项工作只会增加(我感觉它会非线性地增加)。我在这里的假设是,我们不会尝试重塑ORM。 将数据库视为外部系统的一个好处是,我们可以围绕以下情况编写代码:需要运行两种不同版本的应用程序,其中每个应用程序都有不同的映射。在连续交付生产的情况下,这变得更加有趣……但是我认为ORM在较小程度上也是可行的。 我将不考虑安全性,因为开发人员即使没有访问数据库的权限,也可以通过注入恶意代码来获取存储在系统中的大部分(即使不是全部)信息。我不敢相信我忘了删除记录客户信用卡详细信息的行,亲爱的上帝!)。 小更新(6/6/2012) 存储过程(至少在Oracle中)阻止执行诸如零停机时间连续交付之类的操作,因为对表结构的任何更改都将使过程和触发器无效。因此,在更新数据库期间,应用程序也将关闭。Oracle 为这种称为基于版本的重新定义提供了解决方案,但是我向该功能询问过的少数DBA提到,该功能实施得很差,他们不会将其放入生产数据库中。

1
学习异步编程
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 异步非阻塞事件驱动的编程似乎风行一时。我对这一切意味着什么有基本的概念理解。但是,我不确定的是我的代码何时何地可以从异步中受益,或者如何使阻塞式IO成为非阻塞式。我敢肯定,我可以简单地使用一个库来做到这一点,但是我对更深入的概念以及自己实现它的各种方式更感兴趣。 是否有任何全面/权威书籍或其他资源在这个问题上(如GoF的设计模式,或K&R为C,TLDP对于像bash)的? (注意:我不确定这在功能上是否与我学习事件驱动编程有关的问题相同)

13
什么时候可以不修复损坏的窗户?
关于残破的窗口,是否有时最好将重构留给以后的活动? 例如,如果将一个向现有内部系统添加一些新功能的项目分配给了一个到目前为止尚未与该系统合作的团队,并且给出了一个可与之合作的时间表,那么是否有理由这样做?为了在这种情况下规定截止日期,将主要的重构推迟到现有代码吗?

4
使用方法链接构建对象的成语叫什么名字?
我经常使用一种模式,在该模式下,我使用方法链来设置一个对象,类似于Builder或Prototype模式,但没有在每个方法调用中创建新对象,而是修改了原始对象。 例: new Menu().withItem("Eggs").withItem("Hash Browns").withStyle("Diner"); 只是想知道这种模式是否有名称,以及是否将其视为反模式,因为尽管它可以更流畅地阅读,但它可能导致较长的方法链。

5
在MVC系统中,数据库持久性代码应该放在哪里?
我已经看到了多种用于将信息持久存储到数据库的配置。通常,在我的世界角落,三种类型的设计似乎很常见: 控制器管理持久性 模型管理持久性 第三方库管理持久性,通常需要在模型上进行某种注释。 我想知道从概念上讲哪种配置(如果有的话)最容易使用/与MVC架构最兼容? (如果不是我列出的人,请给出简短的概述/概述作为答案的一部分)
21 mvc 

3
如何避免引发恼人的异常?
阅读Eric Lippert 关于异常的文章绝对是我应该以生产者和消费者的方式处理异常问题的开阔视野。但是,我仍在努力制定有关如何避免引发令人讨厌的异常的准则。 特别: 假设您有一个Save方法可能会失败,因为a)有人在您之前修改了该记录,或者b)您要创建的值已经存在。这些条件是预料之中的,并非例外,因此,您不会抛出异常,而是决定创建方法的Try版本TrySave,该方法返回一个布尔值,指示保存是否成功。但是,如果失败了,消费者将如何知道问题出在哪里呢?还是最好返回一个表示结果的枚举,例如Ok / RecordAlreadyModified / ValueAlreadyExists?使用integer.TryParse时不存在此问题,因为该方法失败的原因只有一个。 前面的例子真的令人烦恼吗?还是在这种情况下抛出异常是首选方式?我知道大多数库和框架(包括Entity框架)都是这样做的。 您如何决定何时创建方法的Try版本,以及如何提供某种方法进行事前测试的方法?我目前正在遵循以下准则: 如果有可能发生竞争,请创建一个Try版本。这避免了消费者需要捕获外部异常。例如,在前面描述的Save方法中。 如果测试条件的方法几乎可以完成原始方法的所有工作,则创建一个Try版本。例如,integer.TryParse()。 在任何其他情况下,请创建一种测试条件的方法。
21 exceptions 

4
维护移动客户端和服务器之间的参照完整性
所以我有一个相对简单的系统。一个移动客户端在sqlite数据库中创建我想同步到远程SQL服务器(与其他移动客户端共享)的记录。因此,当我在电话的sqlite表中创建新记录时,我随后通过RESTful API将更改推送到远程服务。我遇到的问题是如何排序主键,以便数据中没有冲突(即电话中的记录具有与服务器上完全不同的记录相同的主键)。在客户端上引用记录并在服务器上引用相同记录的最佳实践是什么?
21 sql  web-services 

6
现在保持简单,还是考虑到未来编程?
我目前正在为我的公司编写一个涉及广泛的新应用程序。为了赶上最后期限,该功能已被调低了很多,以便我们可以准备好进行发布。 我的任务是在本月底之前启动并运行版本1。我正处于开发的半途,现在已经结束了。 昨天,我花了一些时间针对其中一项需求提出了一个非常不错的简便解决方案,并且对结果感到非常自豪。今天早上,第2版文档已发出,其中有一项要求将要求删除我昨天编写的代码,或者对其进行严格更改。如果我保持现状,将来将需要大量工作。现在,我可以花额外的时间使我当前的解决方案更强大,以便可以以更少的精力添加v2功能,但这会使我在需要的额外编码上有些落后。 我不知道我是否会做v2。可能是我,也可能是同事,甚至是实习生。 如果您不知所措,您是否会花点时间在将来使它变得更容易,还是在时机成熟时留下解决方案并加以解决?

7
专业工作的简历困境[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 在我的简历中,我将自己列为“具有7年的C编程实践经验”。 需要说明的是,我是一名自学成才的C程序员,并提供了一些大学课程。我从事一些小型的个人项目,并且我认为自己比没有实际工作经验的计算机科学专业的毕业生更胜任,尽管我绝对不是专家。 问题是……我一直在接到招聘人员的电话和电子邮件,这些人员在工作现场看到我的履历表,询问我对高级开发人员职位,合同等的兴趣,我认为我完全没有资格。我的简历只列出了3年的工作经验(全部是IT知识),因此当他们询问我以前在C方面的经验时,我必须澄清这是个人工作,而不是专业工作。 我真的很想从事开发人员的工作,但是我不想因为我无法应付的事情而被录用,也不想在试图炫耀自己的优势时歪曲自己。我故意选择措辞“动手”,以暗示它不是专业的。我应该如何在履历表中表达我的C经验,以更好地说明这一点?


7
对于哪些类型的应用程序,Python是一个错误的选择?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 我刚开始学习Python,并且想了解更多有关该语言的知识。 我意识到,在许多情况下,相对于C或C ++,Python是一种慢速语言。因此,对于可能需要尽快运行的应用程序,Python可能不是最佳选择。 除此之外,Python似乎是一种很棒的通用语言,易于阅读和编写。可用的库为它提供了大量功能。在对性能有严格要求的应用程序之外,使用Python在哪里是一个不好的选择(为什么)?
21 python 

4
程序员对美国出口限制的担忧
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 在设计和发布必须满足美国密码软件出口限制的软件时,我需要考虑哪些方面? 维基百科说,您可以将各种类别分配给加密软件。出口目的地(例如中国,俄罗斯)也发挥了重要作用。但是我并不真正了解这些限制及其对我工作的影响。 有人可以向我解释吗? 我问是因为如果您尝试发布您的应用程序(例如,在Apple的App Store或Android的Market上),则必须确保您的应用程序符合美国出口限制。并且有许多应用程序提供安全的信息存储,例如密码。 他们是否都已通知政府并要求进行审查?当然,您不知道他们是否这样做。但是他们需要这样做吗?

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.