软件工程

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

3
在视图模型中使用业务对象
使用可重用的业务对象时,在构建视图模型时什么是最佳实践? 我们使用调用的对象Builder来构建视图模型。每个视图逻辑单元(订单,用户等)的一个构建器,其中每个单元可以包含许多不同的视图模型(订单包含摘要,订单行等)。 建造者可以通过一个或多个标准业务对象提取数据,以建立视图模型。 在视图模型中使用业务对象/模型时,什么被认为是更好的做法? 方法1 允许在视图模型中使用业务对象? //Business object in some library public class Order { public int OrderNum; public int NumOrderLines; //... } //Order builder in website public class OrderBuilder { public OrderSummary BuildSummaryForOrder(int OrderNum) { Some.Business.Logic.Order obOrder = Some.Business.Logic.GetOrder(OrderNum); //Any exception handling, additional logic, or whatever OrderSummary obModel = …

13
是否有一种编程语言,其中1/6的行为与1.0 / 6.0相同?
几天前,当我使用C ++编程时,我犯了这个错误(我有这样做的历史!)。在我的代码的一部分中,我的值为1/6,我期望为0.16666666666,事实并非如此。众所周知,结果为0-C,C ++,Java,Python的行为均相同。 我将其发布在我的Facebook页面上,现在就是否存在1/6与行为相同的编程语言存在争议1.0/6.0。


5
里斯科夫替代原则与内省或鸭类打字不相容吗?
我是否正确理解在对象可以自我检查的语言(如鸭式语言中常见的语言)中不能遵守《里斯科夫替代原理》? 例如,在Ruby中,如果一个类B从一个类继承A,然后为每个对象x的A,x.class是要回报A的,但如果x是一个对象B,x.class是不会返回A。 这是LSP的声明: 令q(x)是关于类型T的对象x的可证明性质。那么,对于类型S的对象y,q(y)应该是可证明的,其中S是T的子类型。 以Ruby为例, class T; end class S < T; end 如属性q(x) =所示,以这种形式违反LSPx.class.name == 'T' 加成。如果答案是“是”(与内省不兼容的LSP),那么我的另一个问题是:是否存在某种修改后的“弱”形式的LSP,它可能适用于动态语言,可能在某些附加条件下并且仅具有特殊类型的性质。 更新。作为参考,这是我在网络上发现的另一种LSP公式: 使用指针或对基类的引用的函数必须能够使用派生类的对象,而无需了解它。 还有一个: 如果S是声明的T的子类型,则将S类型的对象视为T类型的对象,如果将它们视为T类型的对象,则它们的行为也应与预期的T类型的对象相同。 最后一个注释为: 请注意,LSP全部关于对象的预期行为。只有清楚知道对象的预期行为后,才能遵循LSP。 这似乎比最初的要弱,并且可能可以观察到,但是我希望看到它正式化,尤其要解释谁决定预期的行为是什么。 那么,LSP是否不是编程语言中的一对类的属性,而是祖先类满足的一对类以及给定的一组属性?实际上,这是否意味着要构造一个尊重LSP的子类(后代类),必须知道祖先类的所有可能用法?根据LSP,祖先类应该可以用任何后代类替换,对吗? 更新。 我已经接受了答案,但是我想添加一个来自Ruby的更具体的例子来说明这个问题。在Ruby中,每个类都是模块,从某种意义上来说,Class类是类的后代Module。然而: class C; end C.is_a?(Module) # => true C.class # => Class Class.superclass # => Module module M; end M.class # => Module …

2
防御软件重用系统(DSRS)发生了什么事?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我一直在阅读90年代初关于美国国防部软件重用计划(称为“国防软件重用系统”(DSRS))的一些 论文。我最近发现的内容是2000年的一篇论文- 《软件重用存储库概览》 国防软件存储系统(DSRS) DSRS是用于存储和检索可重用软件资产(RSA)的自动化存储库[14]。DSRS软件现在在七个软件重用支持中心(SRSC)管理可重用资产的清单。DSRS是高质量RSA的中央收集点,并通过为开发人员提供机会使其需求与现有软件产品相匹配来促进软件重用。目前支持政府项目的政府雇员和承包商人员可以使用DSRS帐户... ... DoD软件社区正在尝试将其软件工程模型从当前的软件周期更改为过程驱动的,特定于领域的,基于体系结构的,由存储库辅助的构建软件的方式[15]。在这个不断变化的环境中,DSRS具有成为DoD标准重用存储库的最大潜力,因为它是现有的唯一已部署的,可操作的存储库,在整个DoD中具有多个可互操作的位置。DSRS的七个位置支持近1,000个用户,并列出了近9,000个可重复使用的资产。仅DISA DSRS列出3,880个可重用资产,并拥有400个用户帐户... DSRS的长期策略是支持虚拟存储库。这些互连的存储库将提供跨域以及在服务之间定位和共享可重用组件的能力。有效且不断发展的DSRS是DoD软件重用计划成功的核心要求。不断变化的DoD存储库要求要求DISA继续拥有可操作的DSRS站点,以支持实际存储库操作中的测试并支持DoD用户。DSRS的分类过程是提供客户支持的基本技术[16]。此过程是使可重用资产可用于实施功能和技术迁移策略的第一步。 ... [14] DSRS -国防技术适应性强,可靠的系统 网址:http://ssed1.ims.disa.mil/srp/dsrspage.html [15]明星-软件技术适应性强,可靠的系统 网址:HTTP: //www.stars.ballston.paramax.com/index.html [16] DE Perry和SS Popovitch,“询问:基于谓词的使用和重用” ,在第八届基于知识的软件工程会议论文集中,第pp。 144-151,1993年9月 。... DSRS已死,是否有任何事后报告?是否还有其他最近的美国政府举措或有关软件重用的报告?

8
为什么不将设计模式添加到语言构造中?
最近,我正在与一位同事交谈,他提到他的公司正在努力将MVC设计模式添加为PHP扩展。 他解释说,他们编写了C代码以添加Controllers, Models and Views到语言构造中以提高性能。 现在,我知道MVC是一种架构设计模式,已在Web应用程序中广泛使用,但是我仍然不得不遇到例如具有Controllers语言构造的语言。 恕我直言,将设计模式集成到语言中可以强调良好的OO设计的重要性。 那么,为什么不将最常用的设计模式(MVC,工厂,策略等)添加到语言构造中呢? 如果问题听起来太宽泛,则可以将问题限制为仅PHP。 编辑: 我并不是在暗示开发项目时必须使用设计模式。实际上,我提倡只要可行就保持简单的方法。

10
每个SQL语句都必须由DBA审查-常见吗?
我的意思是一切,而不仅仅是架构更改。即使对主键进行简单的SELECT也无法投入生产,即使它已经由其他开发人员进行了代码审查(在上下文中),也没有DBA审查每条语句,从代码中提取出来并与EXPLAIN输出一起提交,详细信息它多久被调用一次,等等,等等。 如果您曾经在这样的环境中工作,您是否发现它是净收益或拖累了开发?作为从事关系数据库工作多年的人,我发现“开发人员不能被信任使用数据库”的态度毫无根据,我很好奇这种情况的普遍性。对于它的价值,这仅是用于Web开发,不是关键。
11 code-reviews  dba 

5
当开发人员是项目经理的老板时,这种方法有效吗?
我正处于项目的计划阶段,我想聘请项目经理。我想做一些编码,并注意项目的所有部分。但是,我觉得项目经理会取得更好的结果。我有以下选择:1)管理项目而不是代码2)雇用项目经理并自己编写代码 我担心项目经理会被开发团队中的项目所有者所困扰。如果我运行项目,团队可能会崩溃,导致项目失败。为了不超出预算,我必须参与一种或另一种能力。 有没有人对这种情况有经验,有什么建议吗? 更多信息:4个内部开发人员,每个负责特定区域。如果项目经理同意,开发人员也可以外包工作。

3
您如何使数据库在线?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 关于Web开发,我有一个非常初学者的问题。 我在使用JSP,Hibernate和MAMP方面有一些经验,可以创建一个简单的系统来跟踪库存和销售。但这一切都是在一台计算机上本地完成的。 这次,我想创建一个可以在线访问的系统。这是为了帮助我的母亲无论走到哪里都可以跟踪她的生意。因此会有类似的方面,例如跟踪库存和销售。我知道您必须拥有一台服务器来托管所有文件。但是我不知道如何在线访问数据库。或应使用哪种类型的应用程序或产品。 目前,我数据库的主机是localhost。如何使其联机以使您仍然可以进行CRUD操作?有任何指南可以做到这一点吗?

3
如何为加入团队的程序员处理估算?
迭代已经开始,新的程序员加入了这个团队,另外一个开发人员估计任务X需要30个小时。 在这种情况下,最佳做法是什么? 新的开发人员使用给定的估算值运行(想法是在计算速度时会纠正任何差异吗?) 新开发人员重新评估任务?(如果是这样,如果它明显更高并且不再适合迭代,该怎么办?) 举起双手回到瀑布吗? 还有其他东西吗?
11 agile  estimation 

8
高分辨率笔记本电脑显示器对程序员重要吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 5年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我要购买一台主要用于编程的新笔记本电脑。华硕Zenbook UX31A和新的Retina Macbook Pro确实让我很感兴趣。显然,这些笔记本电脑上的高分辨率显示器可用于娱乐,照片编辑等。我的问题是:这些显示器对程序员有没有好处?这些显示是否使代码更易于阅读?整整盯着屏幕一整天,它们在眼睛上是否还轻松?

5
为什么没有面向服务的语言?
编辑: 为了避免进一步的混乱:我不是在谈论Web服务之类的东西。我说的是内部构造应用程序,而不是计算机如何通信。它涉及编程语言,编译器以及命令式编程范例的扩展方式。 原版的: 在命令式编程领域中,我们在过去的20年(或更长的时间)中看到了两种范例:面向对象(OO)和面向服务(SO)。基于组件(CB)。 两种范例都通过引入它们自己的模块概念来扩展命令式编程范例。OO将它们称为对象(和类),并使它们将数据(字段)和过程(方法)封装在一起。相反,SO将数据(记录,bean等)与代码(组件,服务)分离。 但是,只有OO具有本机支持其范例的编程语言:Smalltalk,C ++,Java和所有其他JVM兼容,C#和所有其他.NET兼容,Python等。 SO没有这样的母语。它仅在过程语言或OO语言之上才存在:COM / DCOM(二进制,C,C ++),CORBA,EJB,Spring,Guice(所有Java),... 这些SO框架显然遭受其概念缺少本地语言支持的困扰。 他们开始使用OO类来表示服务和记录。这导致在设计中,仅具有方法的类(服务)与仅具有字段的类(记录)之间存在明显的区别。然后,通过类的继承模拟服务或记录之间的继承。从技术上讲,它并没有那么严格,但是一般来说,建议程序员使类仅扮演两个角色之一。 他们使用其他外部语言来表示缺少的部分:IDL,XML配置,Java代码中的注释,甚至像Guice中的嵌入式DSL。由于服务的组成不是服务代码本身的一部分,因此特别需要但不限于此。在OO中,对象创建其他对象,因此不需要此类工具,但是对于SO而言,是因为服务不会实例化或配置其他服务。 它们在OO(早期的EJB,CORBA)之上建立了一个内部平台效果,程序员必须在其中编写“驱动” SO所需的所有代码。类仅表示服务性质的一部分,必须编写许多类才能一起形成服务。所有这些样板都是必要的,因为没有SO编译器可以为程序员做。就像有些人在没有C ++的情况下在C for OO中所做的那样。您只需将保存对象数据作为第一个参数的记录传递给作为方法的过程。在OO语言中,此参数是隐式的,并且编译器将生成我们为虚拟功能等所需的所有代码。对于SO,显然没有此功能。 特别是较新的框架广泛使用AOP或自省功能将缺少的部分添加到OO语言中。这没有带来必要的语言表达能力,但是避免了上一点中描述的锅炉平台代码。 一些框架使用代码生成来产生样板代码。XML的配置文件或OO代码中的注释是此信息的来源。 并非我上面提到的所有现象都可以归因于SO,但我希望它清楚地表明需要使用SO语言。由于这种范例如此流行:为什么不存在一个范例?或者也许有一些学术论文,但至少该行业不使用。

6
为什么浏览器不支持haml和sass?
我认为下载网站所需的时间将大大减少,并且解析也将更加容易。 为什么不将这些语言作为标准?显然,它们比原始html和CSS更好。 浏览器是使我们远离中间HTML / CSS代码的唯一途径。
11 html  css 

9
使用哪种OO设计(是否有设计模式)?
我有两个代表“酒吧/俱乐部”(您喝酒/社交的地方)的对象。 在一种情况下,我需要栏名称,地址,距离,标语 在另一种情况下,我需要栏名称,地址,网站网址,徽标 因此,我有两个对象代表相同的事物,但具有不同的字段。 我喜欢使用不可变的对象,因此所有字段都是从构造函数设置的。 一种选择是拥有两个构造函数,而其他字段为空,即: class Bar { private final String name; private final Distance distance; private final Url url; public Bar(String name, Distance distance){ this.name = name; this.distance = distance; this.url = null; } public Bar(String name, Url url){ this.name = name; this.distance = null; this.url = url; …

5
以稳定高效的方式从网页获取数据
最近,我了解到,使用正则表达式来解析网站的HTML以获取所需的数据并不是最佳方法。 所以我的问题很简单:那么,什么/最好/最有效且通常稳定的方式来获取此数据? 我应该注意: 没有API 没有其他可以从中获取数据的来源(没有数据库,提要等) 无法访问源文件。(来自公共网站的数据) 假设数据是普通文本,显示在html页面的表格中 我目前在我的项目中使用python,但是独立于语言的解决方案/提示会很好。 附带提出一个问题:当通过Ajax调用构建网页时,您将如何处理? 编辑: 在HTML解析的情况下,我知道没有实际的稳定方法来获取数据。页面更改后,解析器就完成了。在这种情况下,我的意思是:一种有效的页面解析方法,只要页面没有变化,它总是可以为我提供相同的结果(显然是针对同一组数据)。
11 data  parsing 

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.