软件工程

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

2
命名约定DAL,BAL和UI层
我正在开发具有以下几层的典型Web应用程序 UI层(MVC) 业务逻辑层(BAL) 数据访问层(DAL) 每个层都有自己的DTO对象,包括BAL和DAL。我对此的疑问如下 DAL返回的DTO只需转换为BAL中的相应DTO,然后发送到UI层即可。在某些情况下,DTO对象的属性和结构都是相同的。在这种情况下,最好将DAL中的DTO简单地返回到UI层而不包含中间对象。 命名这些DTO对象和每一层中其他对象的最佳方法是什么。我应该使用一些前缀,例如DTOName,ServiceName吗?我之所以要求使用前缀的原因是,如果解决方案中的类与Framework中的其他类以及前缀不冲突,那么我更容易理解每​​个类所属的位置吗?
35 c#  design  naming 

6
将值转换为不同表示形式,然后再将其转换回其起始位置的代码很不好,但是如何?[关闭]
我正在阅读一篇有关不良编程习惯的文章。 它提到- “ Yo-Yo代码”将值转换为不同的表示形式,然后将其转换回其起始位置(例如:将十进制转换为字符串,然后转换为十进制,或者填充字符串然后对其进行修整) 我不明白为什么他给出的特定示例对编写程序来说是一种不好的方式。如果情况需要,我可以将其转换回去,以便可以使用该值。 有人可以解释更多吗?

3
客户端使用HATEOAS有什么意义?
据我目前的了解,HATEOAS基本上是与每个响应链接一起发送以及下一步操作的信息。在互联网上可以轻松找到一个简单的示例:银行系统和帐户资源。该示例显示了对帐户资源的GET请求后的此响应 GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK <?xml version="1.0"?> <account> <account_number>12345</account_number> <balance currency="usd">100.00</balance> <link rel="deposit" href="/account/12345/deposit" /> <link rel="withdraw" href="/account/12345/withdraw" /> <link rel="transfer" href="/account/12345/transfer" /> <link rel="close" href="/account/12345/close" /> </account> 连同数据一起,有链接告诉下一步可以做什么。如果余额为负,我们有 GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK <?xml version="1.0"?> <account> <account_number>12345</account_number> <balance currency="usd">-25.00</balance> <link rel="deposit" href="/account/12345/deposit" /> </account> 这样我们只能存款。很好,如果我们使用Fiddler或通过浏览器发出请求,我们可以轻松地看到可以做什么。这样的信息对于我们发现API的功能以及服务器与客户端的分离非常有用。 但是,要点是,当我们构建客户端(例如带有Javascript的SPA或Android应用程序或许多其他东西)时,我看不到HATEOAS如何继续发挥作用。我的意思是:当我用javascript编码SPA时,我必须知道可以在API中完成什么才能编写代码。 …

2
为什么build.number是语义版本控制的“滥用”?
我解释提出了构建系统(摇篮/ Artifactory的/詹金斯/厨师),以我们的高级建筑师之一,他所提出的意见,我认为我的那种不同意,但我没有足够的经验,真正权衡上。 该项目构建了一个Java库(JAR)作为工件,供其他团队重用。对于版本控制,我想使用以下语义方法: <major>.<minor>.<patch> 其中patch指示错误/紧急修复,minor指示向后兼容的发行版,并major指示API的大规模重构和/或向后不兼容的更改。 就交付而言,这就是我想要的:开发人员提交一些代码;这将触发构建到QA / TEST环境。一些测试已经运行(一些自动化,一些手动)。如果所有测试均通过,则生产版本会将JAR发布到我们的内部仓库中。至此,应该正确地对JAR进行版本控制,我的想法是使用build.numberCI工具自动生成并提供的JAR 作为补丁号。 因此,版本控制实际上是: <major>.<minor>.<build.number> 同样,build.numberCI工具在哪里提供。 架构师对此表示否认,称使用CI版本号是语义版本控制的“滥用”。 我的问题是:这是正确的吗?如果正确,为什么?如果没有,为什么不呢?



4
电子表格背后的数据结构是什么?
我想了解如何解决电子表格(一组命名或以其他方式标识的单元格,其中包含引用其他单元格的值或公式)。我曾尝试查看现有项目,但由于GUI,序列化,事件等操作太多,以至于找不到电子表格。 简单地说,它是如何工作的?

4
为每个新错误添加一个单元测试
在我的工作中,所有解决错误的开发人员都必须添加一个新的单元测试,以警告此类错误(如果再次出现这种情况)。如果无法进行单元测试(例如,网页设计问题),则质量检查部门必须创建一个测试用例以手动检查它。 其背后的想法是,如果在产品发布之前未检测到缺陷,是因为没有适当的单元测试来检测它。因此,开发人员必须添加它。 问题是:这在任何软件开发方法中都常见吗?这个技术有名字吗?我想了解更多有关它的信息,但是我需要一些信息来开始它。

6
是否有适用于折扣模型的设计模式?
有没有实施折扣模型的已知设计模式? 通过折扣模型,我的意思是: 如果客户购买产品X,产品Y和产品Z,则可获得10%或$ 100的折扣。 如果客户购买100个产品X,他将获得15%的折扣或$ 500 如果客户去年带来的收入超过$ 100K,则可获得20%的固定折扣 如果客户购买了2个单位的产品X,则可以免费获得1个单位的产品X(或产品Y)。 ... 是否可以使用一种通用模式来处理所有上述情况?我正在考虑一些模型,但无法遇到通用模型。

7
使用Scrum /看板时,传统的问题跟踪器有什么作用?
从很高的角度来看,在我看来,通常有两种类型的项目管理工具: 传统问题跟踪工具,例如Fogbugz,JIRA,BugZilla,Trac,Redmine等。 虚拟卡板 /敏捷项目管理工具,例如Pivotal Tracker,GreenHopper,AgileZen,Trello等。 当然,它们以一种或多种方式重叠,例如,可以将Pivotal Tracker任务导入JIRA,GreenHopper本身是在JIRA问题基础之上实现的,但是我认为仍然可以看到这两种工具在方向上的差异。 甚至在进行敏捷项目管理的公司中也使用传统的问题跟踪器。我的问题是,为什么他们要这样做?我也觉得我们应该在公司中使用问题跟踪器,但是当我考虑它时,我实际上不确定我们为什么需要它。 例如,Trello开发似乎是通过使用Trello本身来管理的(请参见此虚拟墙),即使他们可以访问Fogbugz(周围最好的问题跟踪者之一)也是如此。因此,当我们使用一种敏捷的PM工具以一种敏捷的方式完成100%的工作时,也许我们不需要传统的问题跟踪器?

8
将网站设计为高度可扩展的最佳方法是什么?
对于需要高度可扩展性的网站(例如Facebook之类的社交网络),设计网站的最佳方法是什么? 我是否应该具有网站查询的Web服务以获取所需的数据? 要么 该网站应该直接查询数据库吗?(可以使用内置的语言构造来自动填充表格等)。 我认为Web服务是更好的设计,因为它提供了集中的数据访问,并且诸如缓存之类的东西变得更易于控制,但是其他人怎么看?

6
记录现有代码库的方法
我作为团队的成员在没有内联文档,也没有技术文档的现有应用程序上工作。当我一直在处理应用程序的各种错误报告时,我为自己写了一条面包屑的痕迹-各个地方的错误号,以便下一个开发人员可以参考该错误号以查看发生了什么。 因此,我的问题是: 记录此代码的最有效方法是什么?我应该在接触该区域时记录下来(如果需要,可以使用病毒方法),还是应该自己从每个部分进行记录,而不遵循分支到应用程序其他区域的路径?我应该在以前不存在的地方插入行内注释吗(担心我最终可能会错误地识别代码的作用)? 您将使用哪种方法来准确,快速地为没有现有内联文档或内联引用外部文档的大型应用程序提供文档?

2
Node.js是框架吗?[关闭]
我一直看到招聘人员,开发人员等将Node.js称为框架。我认为,这对Node.js的真正含义是无知的。 通常,在职位描述中,Node.js被分组为AngularJS,React等库中的库。通常,我认为它是由不知道差异的人(HR,招聘人员等)输入的。 我认为Node.js是一个平台或运行时环境。它将DOM API(浏览器中的JavaScript)切换为其他各种API,例如文件系统(因为它作为服务器运行,而不是在浏览器中运行)。 人们为什么认为Node.js是框架?我错了吗?它实际上是一个框架吗?

5
调用相同类中其他方法的单元测试方法的最佳方法
我最近正在和一些朋友讨论以下两种方法中哪一种最适合从同一个类中的方法中返回结果或调用同一个类中的方法。 这是一个非常简化的示例。实际上,功能要复杂得多。 例: public class MyClass { public bool FunctionA() { return FunctionB() % 2 == 0; } protected int FunctionB() { return new Random().Next(); } } 因此,要测试这一点,我们有2种方法。 方法1:使用函数和操作来替换方法的功能。例: public class MyClass { public Func<int> FunctionB { get; set; } public MyClass() { FunctionB = FunctionBImpl; } public bool FunctionA() …

8
强迫其他开发人员在完成工作后调用方法
在Java 7的库中,我有一个为其他类提供服务的类。创建此服务类的实例后,可以多次调用该服务类的一个方法(将其称为doWork()方法)。因此,我不知道服务类的工作何时完成。 问题在于服务类使用重对象,并且应该释放它们。我在方法中设置了这一部分(我们称它为release()),但不能保证其他开发人员将使用此方法。 有没有一种方法可以迫使其他开发人员在完成服务类任务后调用此方法?我当然可以记录下来,但是我想强迫他们。 注意:我无法在release()方法中调用该方法doWork(),因为doWork() 在下一次调用该方法时需要这些对象。
34 java 

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.