软件工程

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

4
“ TODO自动生成的方法存根”是什么意思?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 我正在使用eclipse进行android编程,到处到处我都看到“ TODO自动生成的方法存根”语句。 我知道这些方法是在创建类和其他触发器活动时由eclipse自动生成的,但是我不了解在所有地方都提到它的必要性。 有什么地方需要反复提到它?

2
我应该使用分号分隔Scala语句吗?
我习惯用Java的分号来分隔语句,所以自然也用Scala代码来完成。我还认为代码更易于阅读,因为很明显一个语句在哪里结束而另一个语句在哪里开始。但是很多时候,当我在SO上发布一段Scala代码时,代码被编辑只是为了删除分号。 是否应该使用分号?是否有任何“官方”准则或编码风格? 是否有需要分号的情况,否则代码不明确?

3
从哪里加载和存储文件设置?
我认为这个问题应该适用于大多数从文件加载设置的程序。我的问题是从编程的角度来看的,实际上这是如何从不同的类和可访问性方面处理从文件中加载设置的问题。例如: 如果程序有一个简单的settings.ini文件,则应将其内容加载到load()类的方法还是构造函数中? 值应该存储在public static变量中,还是应该有static获取和设置属性的方法? 如果文件不存在或无法读取该怎么办?您将如何让程序的其余部分知道它无法获得那些属性? 等等 我希望在这里的正确位置提出这个问题。我想让问题尽可能与语言无关,但我主要关注的是具有继承性的语言,尤其是Java和C#.NET。

4
列表接口是泄漏抽象吗?
如果我有一个包含的变量,List则它可能包含许多不同类型的对象,例如ArrayList或LinkedList。a LinkedList和an 之间的差异ArrayList非常大。这些方法的大O行为差异很大。例如,对进行排序List,然后使用它进行二进制搜索是完全可以的,ArrayList但对则没有任何意义LinkedList。

5
多个Scrum团队转移到单个待办事项列表
目前,我们有5个Scrum团队在过去一年中处理自己的产品积压。每个团队都在各自的专用系统上工作,但基础技术是相同的.Net。 关于转移到基于功能的团队进行单个积压工作的讨论很多。原因是我们的主要系统之一有大量工作要做,而它们的能力不足以完成一年中的所有工作。我认为重要的另一个原因是,它可以提供更大的灵活性来快速调整投资组合的变化。 已决定更改两个团队以处理一个积压订单,但开发人员在其他系统上没有经验。我们正在做的一件事是通过将经验系统开发人员移交给团队来进行交叉技能培训。 我的问题是,您是否经历过将两个或多个不同系统转移到单个积压工作。您面临什么挑战?您需要做什么才能使其正常工作?
9 agile  scrum 

2
加密不可逆吗?
我的印象是加密的字符串无法解密,因此原始值将永远丢失。 但是,如果后面的字符串始终等于 “ dominic”(我的名字),那么就不可能有某种逻辑的方式来反转它;因为它不是随机的,也不是基于日期/时间,但是有一种合理的方法吗? 0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE= 无论我对“ dominic”(字符串)进行加密的次数是多少,都始终如上。因此,不应该有某种方法来解密这样的字符串吗? 我正在谈论的示例: public string EncryptPassword(string password) { return Convert.ToBase64String( System.Security.Cryptography.SHA256.Create() .ComputeHash(Encoding.UTF8.GetBytes(password))); }

3
为什么将Quicksort称为“ Quicksort”?
这个问题的重点在于,与其他任何排序算法相比,它的优点不容置疑-当然还有许多其他问题。这个问题是关于名字的。为什么将Quicksort称为“ Quicksort”?当然,大多数情况下都是“快速”,但并非总是如此。简并为O(N ^ 2)的可能性是众所周知的。对Quicksort进行了各种修改以缓解此问题,但那些将最坏情况降低到保证的O(n log n)的修改通常不再称为Quicksort。(例如Introsort)。 我只是想知道为什么在所有众所周知的排序算法中,这是唯一应得的“快速”名称,它不描述算法的工作原理,而是描述算法的速度(通常)。之所以称为Mergesort,是因为它合并了数据。之所以称为Heapsort,是因为它使用堆。Introsort的名称来自“ Introspective”,因为它会监视自己的性能来决定何时从Quicksort切换到Heapsort。同样,对于所有较慢的变量-Bubblesort,Insertion排序,Selection排序等,它们均以其工作方式命名。我能想到的唯一一个例外是“ Bogosort”,它实际上只是一个笑话,没人在实践中实际使用过。为什么Quicksort不能称为更具描述性的名称,例如“分区排序”或“数据透视排序”,哪个描述了它的实际作用?甚至都不是“先到这里”的情况。Mergesort的开发比Quicksort早了15年。(根据维基百科分别为1945年和1960年) 我想这确实是一个历史问题,而不是编程问题。我很好奇它的名字-只是好的营销?

1
是否有一种程序可以说明不同编程语言的大多数功能和用法?
我们都知道,“敏捷的棕色狐狸跳过了懒狗”被用作印刷和字体的基准。 我想知道编程语言是否有类似的“懒狗”。 有太多不同的编程语言,它们具有各种相似或不同的功能和语法。问题是:当同时使用不同的语言时,用户会感到困惑。 尽管不同语言之间存在很多差异,但必须存在一些共同点,即任务或例程。如果我们用不同的语言执行相同的任务,并尝试涵盖最常用的功能,那么语言学习或比较将变得更加容易。 这种程序不需要很长,就像教程一样,但是足够通用和抽象。是否存在?

1
如何最好地组织Jekyll + Bootstrap + Git网站?
因此,在从头开始构建站点很多年之后(并做了很多工作),我将自己的脚趾浸入了我一直回避了几年的两个项目中:Bootstrap和Jekyll。 设计是一项非常定制的工作,需要我深入研究LESS,因此我在该目录中拥有Bootstrap源文件,源资产和构建目录。然后是吉基尔一方。那有它自己的结构,我在Bootstrap构建目录中建立符号链接,而最终内容(我想实际提供的东西)则埋在_site目录中。 外观如下: /.git/* /.gitignore /bootstrap/ /bootstrap/... a load of source files ... /bootstrap/bootstrap/ # the build output /jek/ /jek/... all the jekyll files ... /jek/bootstrap/ # symlink on ../bootstrap/bootstrap/ /jek/_site # the stuff I actually want to upload - but don't really want in git 在我的历史中,我一直在处理Django项目布局(这在某种意义上是合理的)或静态布局。我在这里拥有两个独立的构建系统,这让我发疯。 有没有一种更好的方法来构造所有这些垃圾,或者失败了,有没有一种方法可以使bootstrap输出直接进入jek目录?您如何处理像这样的相互依赖的静态网站?

2
Haskell函数组合是管道和过滤器架构模式的实例吗?
管道和过滤器的架构模式定义为一系列处理元素,其排列方式是使每个元素的输出为next的输入。每个示例似乎都考虑通过某种共享缓冲区执行的进程间或线程间连接。 在我看来,Haskell函数组合正在执行相同的任务。我们能否说这只是此模式的一个实例,即使它只是关于函数排序,并且没有显式缓冲区用作管道?如果是,对于非惰性语言,我们可以说同样的话吗?

3
是什么使HTML5和JS应用程序无法像本机应用程序一样运行?
据我了解, HTML是一种标记语言,XAML,XIB以及Android使用的任何内容以及其他本机UI开发框架的内容也是一种标记语言。 JavaScript是一种与之配合使用的用于处理客户端脚本的编程语言,其中包括事件处理,客户端验证以及C#,Java,Objective-C或C ++在各种此类框架中所做的任何其他事情。 在诸如Sencha's,Angular等表单框架中提供了MVC / MVVM模式。 与其他框架一样,我们以sqlite和键值存储的形式提供localStorage,并且您拥有几乎所有它缺少的API规范。 每当本机UI框架必须呈现UI时,它都必须解析相似的标记并呈现UI。 问题分类 在HTML和JS本身中做同样的事情会阻止什么? 为什么不能使Web(以及CSS)和JS表现出相同的方式,而不是将Web控件或浏览器作为两者之间的层? 即使没有层,在其他不使用C ++,C的情况下,.net运行时和JVM也是如此。 因此,让我们以Dalvik之类的Android为例,为什么Chromium不能(HTML与dalvik和NDK一起)成为android标记所做的事情,而JavaScript用于Java所做的事情? 所以问题是 即使当前的实现还不够好,但是从理论上讲,是否有可能使基于HTML5的应用程序像其他本机应用程序一样专门在移动设备上运行?

4
我们应该寻找说谎的代码吗?
这是指答案中的讨论和对该问题的评论:业界对文档的厌恶是什么?。答案声称“代码不能撒谎”,因此应该是定位位置,而不是文档位置。一些评论指出“代码可能存在”。双方都有真相,至少部分是由于文档处理的差劲和不适当。 我们是否应该寻找说谎的代码,并将其与任何现有文档进行比较?还是通常它是所需要做的事情的最佳来源?如果它是敏捷代码,那么它说谎的可能性较小,还是该代码根本不说谎?

4
跟踪类的所有对象
我是面向对象编程的新手,并且一直遇到这个问题。(我正在用Java编程)我一直不太愿意问这个问题,因为它看起来像是一个基本问题,但是我找不到关于它的任何信息,也没有关于它的问题,而且都没有我读过的教科书(在相当基本的水平上)已经涉及到这个问题: 我经常需要跟踪已创建的类的所有对象,以出于各种目的遍历它们。我目前编写程序的方式是这样的,许多对象仅从其他对象中引用,这意味着我没有数组或集合来引用它们。 我认为,由于这似乎是OOP中非常基本的必要,因此应该有一种相当制度化且简单的方法来解决此问题吗?保留一个类的所有对象的单独列表是通常的做法吗? 我想到了一个静态数组或集合,通过其构造函数,将添加创建的每个新对象。但是,这将不适用于子类,因为构造函数没有继承吗? 我意识到这个问题可能没有一个简单的答案。我只是希望有人能启发我一些关于这个问题的知识。我感觉好像我在这里缺乏核心知识。

3
依赖注入如何不仅将复杂性移到一个单独的类中?
我本周一直在研究使用Typhoon框架进行依赖注入。我了解到,分离对象的构造对于在单元测试期间用模拟替换任意组件是有好处的,到目前为止,我仅从中看到了好处。 但是我不禁想到,在我拥有一个包含数十个头导入的庞大的视图控制器类之前,现在我有了一个包含数十个头导入的庞大的工厂类。我应该避免参加大量的工厂培训班吗?

1
MVVM在业务应用程序中的价值(以及当前的开发实践)
2年后,我仍在努力将MVVM作为生产工作软件的实用方法。在某些情况下,这很棒。我做了一个多线程应用程序,它控制着一条小型装配线,如果没有MVVM概念,那将是一场噩梦。从物理装配线中提取的内容几乎是毫无道理的。 但是,我的职业生涯主要围绕内部业务应用程序-规范和优化业务运营。在此类应用程序中,通常存在围绕CRUD和复合操作的业务领域。在LOB中,我的视图模型最终只是业务类方法的一个行包装函数的非常简单的集合,最后最终只会使最简单的任务(如显示消息框或打开窗口)复杂化。当人们对已经存在了数十年的Window.ShowDialog调用进行“依赖注入”和“消息提供程序”的长篇描述时,没有其他人会觉得奇怪吗?在堆栈溢出中还有多少其他问题要求对Winforms中极其简单的任务提供建议? 不要误会我的意思-我得到了MVVM,它对于大型团队进行横向包装和销售的软件包的水平开发具有无价的价值。对视图模型进行单元测试可以避免严重的RTM错误,从而节省数百万美元,而专门的UI开发人员可以提供丰富的体验。但是,当重新部署的成本最小并且所有企业需要支付的只是简单的工作软件时,为什么我的业务逻辑已经进行了单元测试时,为什么我应该花时间对简单的“包装” vm进行单元测试?这项业务真正可以花多少时间让我花在可爱的动画和配色方案上?初级开发人员还有什么要做的事情(在以前查看“ Save_Click”的保存功能中查找错误, 诚然,我真的很喜欢WPF的数据绑定。为了利用它,我将数据上下文设置为窗口本身,在该窗口中它可以访问业务类以及任何其他可观察的属性。是的,我这样做几乎破坏了所有的MVVM“规则”。但是至少我有简单的事件驱动代码,易于阅读,而且可以利用新的数据绑定和验证。问题出在设计师身上-我并没有使用太多,但希望现在可以在2012年更好地进行集成-设计师展示了窗口及其基类具有的数百个属性。 对于那些可以关联的人,您可以指出我的资源,书籍,甚至只是观点的改变而使之更容易被吞噬。我会再试一试MVVM,但是上一次我为担心依赖项注入只是为了显示来自VM的消息框而感到非常愚蠢,我不打算进行单元测试。即使我进行了单元测试,通过对那些令人恐惧的“紧密耦合”应用程序的编译时错误进行交易时测试,我们是否真的能获得更高的质量? 我知道一个答案是只停留在winforms中。但是,作为WebForms的最后支持者之一(我对Web开发的趋势有很多相同的批评),当我发现发现Microsoft认证途径中再也没有WebForms时,我感觉就像是恐龙。前进是唯一的选择,即使我不喜欢它也是如此。
9 wpf  mvvm 

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.