软件工程

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


5
代码中的每个数字都被视为“幻数”吗?
因此,我们将作为参数发送给方法的代码中的每个数字都视为幻数?对我来说,不应该。我想,如果让某个数字代表用户名的最小长度,并且我们开始在代码中使用“ 6” ...那么,是的,我们遇到了维护问题,这里的“ 6”是一个魔术数字....但是如果我们正在调用一个方法,该方法的参数之一例如接受整数作为集合的第ith个成员,然后我们将“ 0”传递给该方法调用,那么在这种情况下,我认为“ 0”不是魔术数。你怎么看?

7
作为REST API客户端的Web应用程序:如何处理资源标识符
当我尝试实施REST时,与REST相关的几个概念就在我的脑海中。 我有一个包含业务逻辑的REST-ful后端API系统,以及一个提供UI的Web应用程序。从有关REST的各种资源(特别是REST在实践中:超媒体和系统体系结构)中,我知道我不应该公开实体的原始标识符,而应该返回带有的超链接rel="self"。 考虑这个例子。REST api具有返回一个人的资源: <Person> <Links> <Link rel="self" href="http://my.rest.api/api/person/1234"/> </Links> <Pets> <Link rel="pet" href="http://my.rest.api/api/pet/678"/> </Pets> </Person> Web应用程序出现问题。假设它返回的页面包含浏览器的超链接: <body class="person"> <p> <a href="http://my.web.app/pet/???????" /> </p> </body> 我应该在href属性中添加什么?当用户打开目标页面时,如何将API实体URL保留在Web应用程序中以便能够获取该实体? 要求似乎有冲突: 超链接href应指向Web应用程序,因为它是承载UI的系统 本href应该有实体的一些ID,因为Web应用程序必须能够在目标页打开时,解决实体 提到的书说,Web应用程序不应解析/构造REST URL,因为它不是基于REST的。 URI对消费者应该是不透明的。只有URI的颁发者知道如何解释它并将其映射到资源。 因此,我不能仅仅1234取自API响应URL,因为作为RESTful客户端,我应该将其视为http://my.rest.api/api/AGRIDd~ryPQZ^$RjEL0j。另一方面,我必须提供一些URL,这些URL可以引到我的Web应用程序,并且足以使该应用程序以某种方式还原API的原始URL,并使用该URL来访问API资源。 最简单的方法可能只是使用资源的API URL作为它们的字符串标识符。但是网页网址http://my.web.app/person/http%3A%2F%2Fmy.rest.api%2Fapi%2Fperson%2F1234很丑陋。 对于台式机应用程序或单页javascript应用程序而言,这似乎非常容易。由于它们持续存在,因此它们可以将URL与服务对象一起保留在内存中,以延长应用程序的生命周期,并在必要时使用它们。 使用Web应用程序,我可以想象几种方法,但是所有方法似乎都很奇怪: 替换API URL中的主机,并仅保留结果。巨大的缺点是,它需要Web应用程序处理API生成的任何URL,这意味着怪异的耦合。而且,它不再是RESTful的,因为我的Web应用程序开始解释URL。 公开REST API中的原始ID及其链接,使用它们来构建Web App的URL,然后使用Web App Server上的ID在API中找到所需的资源。这样比较好,但是会影响Web应用程序服务器的性能,因为Web应用程序必须通过REST服务导航来发出一系列形式的获取ID请求的链接,以处理来自浏览器的任何请求。对于有些嵌套的资源,这可能会很昂贵。 self将api返回的所有URL 存储在Web应用服务器上的持久(DB?)映射中。为它们生成一些ID,使用这些ID构建Web应用程序页面URL并获取REST服务资源的URL。也就是说,我http://my.rest.api/pet/678用一个新的密钥将URL 保留在某处3,然后将网页URL生成为http://my.web.app/pet/3。这看起来像某种HTTP Cache实现。我不知道为什么,但是对我来说似乎很奇怪。 还是所有这些都意味着RESTful API不能用作Web应用程序的后端?

10
UX对企业软件重要吗?
我已经注意到,从用户体验的角度来看,公司用于管理时间,费用,设置电话系统等事情的许多软件是非常不直观的。我个人知道我浪费大量时间只是想弄清楚如何导航这些系统,特别是如果我没有同事可以帮助我的bug时。帮助文件通常和用户界面本身一样糟糕。是公司自满还是没有其他可比的企业产品可以胜任这些任务?在消费者方面,似乎有大量的市场机会来创造更好的用户体验,但是企业软件呢?显然,对公司而言,一定程度的浮躁并不重要, 编辑:我不是在指内部应用程序,而是大型软件公司的现成系统。

5
是否有修改后的LGPL许可证允许静态链接?
LGPL要求,如果程序使用LGPL版本的库,则用户必须能够将程序与库的其他版本重新链接: ... d)执行以下一项操作: 0)根据本许可条款和相应的应用程序代码,以适合用户并在允许用户重新组合或重新链接应用程序与链接版本的修改版本的方式下传达最小应用程序源,以产生按照GNU GPL第6节指定的方式传送相应的源代码,修改组合工作。 1)使用合适的共享库机制与库链接。一种合适的机制是(a)在运行时使用用户计算机系统上已经存在的库的副本,并且(b)在与链接版本接口兼容的库的修改版本下正常运行。 ... 但是,在某些情况下,这可能会带来很大的困难。特别是,Haskell程序几乎总是静态编译的。而且,编译器会进行跨模块优化,因此不可能取出一部分代码并用另一部分代码代替。因此,很难满足此条件。(请参阅Haskell Wiki上的此链接。) 动态链接将是一个解决方案,但是在许多情况下,这是不可能的。例如: 某些平台可能根本没有动态链接。 某些语言无法进行动态链接。或者,不可能使模块成为多平台。 在某些情况下,动态链接会阻止重要的优化。虽然我说这很少是一个严重的问题,但是在像Haskell这样的语言中,性能损失可能是相当大的。 因此,我正在寻找一种标准的类似LGPL的许可证,该许可证不需要重新链接(并且我知道这样做会给用户带来一些自由)。一些项目使用他们自己的LGPL修改,例如wxWidgets。但是,我宁愿使用一些更正式的标准许可证,也许已由某些法律专家检查过,并且与(L)GPL兼容。有这样的东西吗? (我也想知道这种LGPL修改是否会带来一些不可预见的后果。)

2
如何管理和估计从客户那里收到的非结构化需求
在项目投标阶段的很多时候,我从各种来源(电子邮件,Word文档,excel)以非常非结构化的格式从潜在客户那里收到软件系统的要求。通常是一群来自客户方面的“产品开发”人员针对他们所遇到的业务问题提出这些“建议的解决方案”。尽管他们是业务领域的专家,但很多时候他们没有正确的解决方案。 这导致 相同需求的多个版本 将两个需求混为一谈 稍后有几个版本的需求,再将合并在一起的需求分离出来,每个需求都包含一些新增加的内容 您如何处理这些需求,并在开始开发之前将它们分类为正确的用例?从第一次构思到将其具体化为合适的用例,我们可以使用哪些工具来跟踪特定需求的历史?根据这样收到的需求来估算工作是一场噩梦,最终导致在正确理解需求并正确估算针对需求的工作时犯了错​​误。 一旦我们赢得了该项目,客户就可以对他们的要求进行更多的考虑,并能够正确地阐明它。在这种情况下,发生的事情是某些功能被丢弃,某些功能得到增强,某些功能又有了新的转变。从根本上讲,这可以使赢得项目之前所做的某些工作项估计无效。我很想知道是否有任何系统可以构建具有特定需求的树,以及每个分支如何导致不同的估算。 有任何技巧,工具和技巧可以使此活动更易于管理吗?我只是想从比我在需求管理和工作量估算方面更有经验的人那里获得一些见解。

3
如果我独自在本地存储库中工作,为什么要推送?
我正在通过适用于Windows的GitHub与Git进行交互,这很有趣,因为我永远不会将存储库推送到GitHub。我正在独自开发它,仅供我使用。我注意到我的提交列在“未同步的提交”下,并且在“历史记录”下显示为“无提交”。这带给我一个问题,除了“历史”下列出的提交外,我还可以通过推送实现什么?
21 git  github 

3
如何为复杂的对象模型实现存储库模式?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 我们的数据模型具有将近200个类别,可以分为大约十二个功能区域。使用域本来很好,但是分隔不是那么干净,我们不能更改它。 我们正在重新设计DAL以使用实体框架,而我所看到的大多数建议都建议使用存储库模式。但是,这些示例都没有真正处理复杂的对象模型。我发现一些实现建议使用每个实体存储库。对于大型,复杂的模型,这似乎是荒谬的且不可维护的。 真的有必要为每个操作创建一个UnitOfWork,并为每个实体创建一个Repository吗?我可能会参加数千堂课。我知道这是不合理的,但是我发现在复杂模型和实际业务应用程序上实现存储库,工作单元和实体框架的指导很少。

6
使用嵌套的公共类组织常量
我正在处理具有许多常量的应用程序。在最后的代码审查中,发现常量过于分散,应该将它们全部组织到一个“主”常量文件中。分歧在于如何组织它们。大多数人认为使用常量名称应该足够好,但这将导致代码如下所示: public static final String CREDITCARD_ACTION_SUBMITDATA = "6767"; public static final String CREDITCARD_UIFIELDID_CARDHOLDER_NAME = "3959854"; public static final String CREDITCARD_UIFIELDID_EXPIRY_MONTH = "3524"; public static final String CREDITCARD_UIFIELDID_ACCOUNT_ID = "3524"; ... public static final String BANKPAYMENT_UIFIELDID_ACCOUNT_ID = "9987"; 我发现这种命名约定很麻烦。我认为使用公共嵌套类可能会更容易,并且具有以下内容: public class IntegrationSystemConstants { public class CreditCard { public static final String …

11
低延迟代码有时是否必须“丑陋”?
(这主要是针对那些对低延迟系统有特定知识的人,以避免人们只是用没有根据的意见来回答)。 您是否觉得在编写“好的”面向对象的代码与编写非常快速的低延迟代码之间需要权衡?例如,避免在C ++中使用虚函数/多态性的开销等-重写看上去很讨厌但很快的代码等? 这是有道理的-谁在乎它是否看起来丑陋(只要它可以维护)-如果您需要速度,就需要速度吗? 我很想听听在这些领域工作过的人的来信。
21 java  c++  c  performance  latency 

2
我通常在生产软件中的哪里使用Deque?
我对在软件应用程序中的堆栈,队列和树的使用位置相当熟悉,但是我之前从未使用过Deque(双端队列)。我通常会在野外遇到什么地方?它会和Queue放在同一个地方,但又有更多的功能吗?

5
C#中“ new”修饰符在隐藏方面有哪些实际用途?
我和一位同事正在研究newC#中关键字的行为,因为它适用于隐藏的概念。从文档中: 使用new修饰符可显式隐藏从基类继承的成员。若要隐藏继承的成员,请在派生类中使用相同的名称对其进行声明,然后使用new修饰符对其进行修改。 我们已经阅读了文档,并且了解了它的基本功能以及工作方式。我们真正无法解决的是为什么您首先需要这样做。自2003年以来,该修饰符就已经存在了,而我们俩一直都在使用.Net进行更长时间的工作,而且从未出现过。 在实际意义上何时需要采取这种行为(例如:应用于业务案例)?这是功能已经过时了吗?或者它在我们所做的事情中(只是我们在处理Web窗体和MVC应用程序以及一些小因素WinForms和WPF)干脆不常见?在尝试并使用该关键字时,我们发现了一些行为,如果使用不当,可能会带来一些危险。 这听起来有些开放,但是我们正在寻找一种特定的用例,该用例可以应用于发现该特定工具有用的业务应用程序。
21 c#  keywords 

2
使用LGPL gem如何影响我的MIT许可应用程序?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 我正在根据MIT许可开发一个开源的ruby应用程序。我之所以使用此许可证,是因为我不想对应用程序的用户施加任何限制。我也可以阅读并理解此许可证。 我最近开始在项目中使用另一个红宝石宝石(需要“ somegem”)。该红宝石宝石已获得LGPL许可。 因为我正在使用LGPL许可的另一颗红宝石宝石,我是否需要对项目进行任何更改?我的项目不包含其他gem的源代码,并且不随我的项目一起提供。它只是作为依赖项列出,以便ruby gems可以安装它,而我的项目将从我的代码中调用它。 另外,知道是否需要“当心”许可证会很有帮助,因为使用许可证会影响我的项目的许可证。 关于此主题还有其他文章,但用不同的方式表达。由于我发现此许可证有些棘手,因此我希望得到针对我的情况的答案。 谢谢你, Corsen

8
新的高级开发人员任务
我有一位具有八年.NET经验的高级开发人员,明天开始从事11,000行代码的应用程序的工作。在团队中,有我自己和另一个程序员。我们每个人都有大约三年的经验。 这是我作为经理的第一个项目(我也是该项目的开发人员),这是我第一次必须向某人介绍已经建立的代码库。显然,我将遍历每个模块,部署过程等,并将它们交给源代码控制存储库,文档(不是最好的)等位置。 在他们准备开始编写新功能和修复错误之前,我应该给他们多长时间?

4
REST与RESTful与“普通” Web服务-是否相同?
我已经阅读了关于REST和/或RESTful应用程序的一些定义和讨论,但是我仍然不了解它的真正含义。 我通常使用的应用程序要么通过GET获取数据,要么通过POST发送数据到某个Web服务(通常是PHP脚本),然后从数据库获取数据或将数据写入数据库。 现在,这是RESTful应用程序吗?如果没有,那么什么是RESTful应用程序?RESTful概念和我到目前为止合作过的概念有什么区别?请举例说明。 另外,有人在谈论REST,有人在谈论RESTful应用程序。我发现REST术语是指理论概念,而当我们谈论特定的应用程序时则使用RESTful。这是正确的做法还是REST和RESTful应用之间存在真正的区别?

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.