软件工程

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

1
枚举具有很多布尔属性
我目前正在开发一个webapp,我们经常需要根据要返回给用户的页面来调整一些服务器逻辑。 每个页面都有一个4个字母的页面代码,这些页面代码当前在类中作为静态字符串列出: public class PageCodes { public static final String FOFP = "FOFP"; public static final String FOMS = "FOMS"; public static final String BKGD = "BKGD"; public static final String ITCO = "ITCO"; public static final String PURF = "PURF"; // etc.. } 通常在代码中,我们会看到这样的代码(第一种形式): if (PageCode.PURF.equals(destinationPageCode) || PageCodes.ITCO.equals(destinationPageCode)) { …
11 java  design  enum 

1
将旧需求迁移到BDD
问:将大型公司迁移到Cucumber并在需求数据库中保留至少15年的旧软件需求的最佳方法是什么? 目前正在考虑: 1)迁移一切 缺点:我们没有无限的时间/预算,我们必须继续前进才能生存,我们无法停止一切,并且GC 100%的遗留要求和遗留测试套件。 2)童子军规则 让一切都比您发现的要好。如果您触摸要求或更改要求,请编写/更新Cucumber功能。缺点:我们将有两个记录系统(黄瓜,遗留要求数据库),可能永远假设给定应用程序的某些角落很长时间都不会被触及。 3)童子军规则加 与#2相同,但是将未使用单个需求转移到Cucumber的需求放到一个未完成的场景中,并将旧需求复制/粘贴到描述部分。这样,我们(通过未决的方案)就可以得到有关Cucumber如何“发现”我们的度量,并且使我们摆脱了维护旧需求系统的需求。除了在Cucumber中可能是一团糟之外,我找不到其他缺点。 4)在这里插入您的想法。 背景: 一些迁移到Cucumber的项目具有自动化测试套件,而某些项目仅使用过手动测试。它们全部都在旧的需求数据库中维护其需求。我们之所以必须这样做是因为我们的要求是法律/法规和金融工具的复杂逻辑(风险,定价,结构等)的混合。 请记住,这是一家非常大的公司,这使解决方案更加复杂。 我们已经有一些使用Cucumber满足其“新”要求的项目。因此,我们已经试用了该技术,并且到目前为止对我们来说都是可行的。我们混合了Web和纯数据项目。 谢谢 编辑:要回答这些问题...旧版需求管理DB不会将需求连接到测试。这不是“可测试的”。如今,通过在每个项目结束时将需求链接到我们的测试用例管理系统的艰巨且易于出错的手动过程,即可将需求连接到测试。黄瓜对我们来说显然是更好的解决方案。毫无疑问。问题是,如何对具有大量重要要求而又不能因法律和其他原因而丢失的大型组织采取行动。
11 bdd  cucumber 

3
在DDD中,存储库应公开实体还是域对象?
据我了解,在DDD中,将存储库模式与聚合根一起使用是合适的。我的问题是,是否应将数据作为实体或域对象/ DTO返回? 也许一些代码可以进一步解释我的问题: 实体 public class Customer { public Guid Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } 我应该做这样的事情吗? public Customer GetCustomerByName(string name) { /*some code*/ } 还是类似的东西? public class CustomerDTO { public Guid Id { get; set; …

5
向UI报告进度的最佳策略-回调应该如何发生?
有时,用户会启动一项扩展的技术操作,该操作需要一段时间才能执行。在这些情况下,通常最好显示某种进度条以及有关当前正在执行哪个任务的信息。 为了避免UI和逻辑层之间的紧密耦合,通常最好通过某种代理进行通信。也就是说,后端不应该操纵自己的UI元素,甚至不应该直接与中介层进行交互。 显然,必须在某处进行一些回调才能使此工作正常进行。我通常以两种方式之一实现它: 将可变对象传递给后端,并让后端在进行时对其进行更改。发生更改时,对象会通知前端。 传递形式void f(ProgressObject)或后端调用的回调函数ProgressObject -> unit。在这种情况下,后端构造了ProgressObject,并且完全是被动的。我认为,每次要报告进度时,它都必须构造一个新对象。 这些方法的缺点和优点是什么?有没有商定的最佳使用方法?有不同的使用环境吗? 是否有完全不同的报告进度的技术被我忽略了?

7
为什么我们需要优先级和严重性?
我了解他们的决定,但是将其分配给发现的问题真的有用吗?我的意思是,要么需要快速修复,要么不要求修复。 我知道如何设置它们,对其进行分类等。我知道IEEE / ISO确实需要这样做。我只是不明白为什么。

4
Ruby:if变量vs if variable.nil?
我是Ruby的新手,当我发现除nil和false之外的所有对象均为真时,我感到很惊讶。偶数为0。 关于该语言的属性的一件好事是,您可以编写: if !variable # do stuff when variable is nil end 我的同事是经验丰富的Ruby开发人员,他们坚持认为我应该选择该选项,而不要使用.nil?像这样: if variable.nil? # do stuff when variable is nil end 但是,我认为后者是一个更好的选择,原因有两个:1.我认为它更面向对象,尤其是在像Ruby这样的语言中,一切都是对象和消息交换。2.我认为,即使它不那么紧凑,它也更具可读性。 我在这里犯“新手”错误吗?

3
在不总是检查属性和方法的情况下,如何在JavaScript中使用鸭子输入?
我知道javascript使用鸭子类型,而且起初我认为与强类型语言(如C#)相比,这会使多态性变得容易。但是现在,我带有参数的函数充满了诸如此类的东西: if(myObj.hasSomeProperty()) 要么 if(myObj.hasSomeMethod()) 要么 if(isNumber(myParam)) 等等 这对我来说真的很丑。我来自C#背景,发现定义的接口要好得多。 我想知道我是否错误地尝试应用在静态类型的语言中有效的策略,并且在javascript中有更好的方法呢? 我知道我无法检查,但是跟踪javascript运行时错误可能是一场噩梦,因为它们并非总是在代码中实际发生错误的地方发生。

3
链表应始终具有尾指针吗?
我的理解... 优点: 在末尾插入的是O(1)而不是O(N)。 如果列表是双链表,则从末尾删除也是O(1)而不是O(N)。 坏处: 占用很少的额外内存:4-8个字节。 实施者必须跟踪尾巴。 从这些优点和缺点来看,我看不出为什么链表会避免使用尾部指针。有什么我想念的吗?

7
何时在接口设计中使用泛型
我有一些接口,希望将来由第三方实现,并且自己提供一个基本实现。我将仅使用几个示例。 目前,它们被定义为 项目: public interface Item { String getId(); String getName(); } ItemStack: public interface ItemStackFactory { ItemStack createItemStack(Item item, int quantity); } ItemStackContainer: public interface ItemStackContainer { default void add(ItemStack stack) { add(stack, 1); } void add(ItemStack stack, int quantity); } 现在,Item和ItemStackFactory我完全可以预见到一些第三方的需要,以在将来扩展。ItemStackContainer将来也可以扩展,但不能以我无法预见的方式扩展到提供的默认实现之外。 现在,我正在尝试使此库尽可能强大。这仍处于早期阶段(pre-pre-alpha),因此这可能是过度设计(YAGNI)的行为。这是使用泛型的合适地方吗? public interface ItemStack<T extends Item> { …
11 java  generics 

2
良好实践中的DRY原则?
我试图在编程中尽可能地遵循DRY原则。最近,我一直在学习OOP中的设计模式,最后又重复了一遍。 我创建了一个Repository模式以及一个Factory模式和Gateway模式来处理我的持久性。我在应用程序中使用数据库,但这没关系,因为如果我愿意,我应该能够换出网关并切换到另一种持久性。 我最终为自己创建的问题是,我为拥有的表数创建了相同的对象。例如,这些将是我需要处理表的对象comments。 class Comment extends Model { protected $id; protected $author; protected $text; protected $date; } class CommentFactory implements iFactory { public function createFrom(array $data) { return new Comment($data); } } class CommentGateway implements iGateway { protected $db; public function __construct(\Database $db) { $this->db = $db; } public function …

5
Scrum中允许使用“技术用户故事”吗?
Scrum中允许使用技术用户故事吗?如果是这样,在Scrum中编写技术用户故事的标准模板是什么?一样As a <user> I want to do <task> so that I can <goal>吗? 我在一些博客中读到,“ 开发人员不是用户故事”,但我也读到Scrum并没有强制要求这些。在有些情况下,他们有共同的一些博客用户故事与系统用户,它像as a <user who is not end user> i want to <system functionality> so that <some techinical thing>。那么哪个是标准? 例如,有一些用户故事,例如: 作为评论者,我想上传任何酒店/食物的照片,以便其他用户可以看到并喜欢它们 作为用户,我想添加照片评论,以便更好地解释我的观点 现在,对于这两个用户故事,都有一个重要的技术项目-保存和检索图像 因此,我可以添加带有以下描述的标题为“图像存储和检索机制”的技术故事吗? 作为开发人员,我想开发一种存储和检索图像的机制,以便用户可以在需要时添加/查看图像

1
如何暂停开源支持?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我是开源项目的唯一活跃维护者,该项目几乎每天都会收到各种渠道(Twitter,电子邮件,GitHub)的支持请求。我将在接下来的三个月内休假,在那儿我将有非常有限的时间来回应,更不用说接受请求或解决问题了。我该怎么做才能避免使那些及时提出问题或撰写适当的错误报告的人感到失望?

2
仅具有一个实例的Python类:何时创建(单个)类实例以及何时使用该类?
给定一个仅实例化一次的Python类,即该类中只有一个对象。我想知道在什么情况下创建单个类实例而不是直接与该类一起工作才有意义。 有一个类似的问题,但重点不同: 它是关于将全局变量和函数分组为一个类, 它不是特定于Python的。后者意味着它不考虑(在Python中)类也是对象的事实。 更新: 在Python中,我可以对类和对象执行以下操作: class A(object): pass A.some_state_var = True # Then later A.some_state_var = False my_a = A() my_a.some_state_var = True # Then later my_a.some_state_var = False 因此,我看不到在类和该类的实例之间进行选择如何与状态有关(在Python中)。我可以通过两者之一来保持状态。 此外,创建我的类/类实例的动机与执行Singleton要求无关。 另外,创建新的Type并不需要太多。 这样做的动机是将相关的代码和数据进行分组,并为其提供接口。这就是为什么我最初在类图中将其建模为类的原因。仅当涉及到实现时,我才开始怀疑是否要实例化此类。

3
在没有客户端请求的情况下将数据从服务器推送到客户端?
我在浏览Stack Exchange时注意到有动态通知,例如“ 3条新消息,单击以显示”。我要对这种动态更新进行说明。 假设我要创建一个包含10条近期新闻的轮播/幻灯片。我希望这个轮播在队列中每小时更新一次。较新的文章会将较旧的文章排除在队列之外。解决方案就在我的头上。 用户登录到客户端。 客户端计算直到下一个小时标记的分钟数,并将计时器设置为在该小时执行。 在小时标记处,向服务器发送有关尚未出现在轮播中的任何新新闻文章的请求。 处理响应。 重置计时器。 这是可以接受的策略吗?我可以不依赖客户请求来实现此目标吗?换句话说,Stack Exchange如何实现其动态更新?
11 server  client 

3
Foreach循环和变量初始化
这两个版本的代码之间有区别吗? foreach (var thing in things) { int i = thing.number; // code using 'i' // pay no attention to the uselessness of 'i' } int i; foreach (var thing in things) { i = thing.number; // code using 'i' } 还是编译器不在乎?当我谈到差异时,我指的是性能和内存使用情况。..或基本上没有任何区别,还是编译后两者最终成为相同的代码?
11 c#  performance  memory 

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.