软件工程

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

5
遵循TDD是否不可避免地导致DI?
我学会了同时进行测试驱动开发(TDD),依赖注入(DI)和控制反转(IoC)。当我使用TDD编写代码时,我总是最终在类的构造函数中使用DI。我想知道这是因为我学会了如何进行TDD,还是这是TDD的自然副作用。 所以我的问题是:遵循TDD原理和编写不依赖外部服务的单元测试是否不可避免地导致DI?

2
Django应用策略
我在Django项目上工作了一段时间,该项目最近有所增长。我一直在思考使用哪种策略使其更易于处理。我想得到一些输入的一件事是,如果我应该将我的应用程序拆分为几个较小的应用程序。这将使我的视图和模型文件更小,并分离出一些问题。 让我感到困扰的一件事是,在我的应用程序中,我将有几种将在整个应用程序中使用的辅助方法。此外,某些模型还必须在应用程序之间共享/使用。这有意义吗?这与我希望通过将我的应用程序拆分为几个较小的应用程序来实现的关注点分离并不合适。在各个应用程序之间共享辅助方法,模型等的好方法是什么?

2
什么是好奇心包结构?
对于NASA的星际网络,数据包是什么样的?显然,这是冗余协议的一种形式,存储在接收器中并进行了备份。是否有任何有关数据包结构或通信协议的文档,这些文档必须经过14分钟的通信?

3
您如何分辨是使用复合模式还是树结构,还是第三个实现?
我有两种客户端类型,即“ 观察者 ”类型和“ 主题 ”类型。它们都与组的层次结构相关联。 观察者将从不同层次中与其关联的组中接收(日历)数据。通过合并尝试收集数据的组的“父”组中的数据(每个组只能有一个父组)来计算此数据。 主题将能够在与其关联的组中创建数据(观察者将接收)。当在一个组中创建数据时,该组的所有“子级”也将拥有该数据,他们将能够为数据的特定区域制作自己的版本,但仍链接到创建的原始数据(在在我的特定实现中,原始数据将包含时间段和标题,而子组则为直接链接到其各自组的接收者指定其余数据。 但是,当主体创建数据时,必须检查所有受影响的观察者是否有与此冲突的数据,据我所知,这意味着庞大的递归功能。 因此,我认为这可以归纳为以下事实:我需要具有一个可以在其中上下移动的层次结构,并且某些地方必须能够将它们作为一个整体来对待(基本上是递归)。 另外,我不仅针对可行的解决方案。我希望找到一种相对容易理解的解决方案(至少在体系结构方面),并且足够灵活,以便将来能够轻松接收其他功能。 是否有解决此问题或类似层次结构问题的设计模式或良好实践? 编辑: 这是我的设计: “ Phoenix”类以这种方式命名,因为我还没有想到合适的名称。 但是除此之外,我需要能够为特定的观察者隐藏特定的活动,即使这些活动通过组与之相连。 有点题外话: 就我个人而言,我认为我应该可以将这个问题分解为较小的问题,但这使我无所适从。我认为这是因为它涉及多个相互不关联的递归功能,以及需要以不同方式获取信息的不同客户端类型。我真的不能把头缠住它。如果有人能指导我如何更好地封装层次结构问题,我也将很高兴收到这一消息。

9
如何拆分紧密联系的大型课程?
我有一些巨大的类,它们包含超过2k行代码(并且还在不断增长),如果可能的话,我希望对其进行重构,以实现更加轻巧和简洁的设计。 它之所以如此之大,主要是因为这些类处理大多数方法都需要访问的一组映射,并且方法之间相互联系紧密。 我将举一个非常具体的示例:我有一个名为的类Server来处理传入消息。它有类似的方法joinChatroom,searchUsers,sendPrivateMessage等所有这些方法操纵映射,如users,chatrooms,servers,... 如果我可以有一个类来处理有关Chatrooms的消息,另一个可以处理所有有关Users的消息,等等,这也许会很好,但是这里的主要问题是我需要在大多数方法中使用所有地图。因此,Server由于它们都依赖于这些通用映射,并且方法之间相互联系紧密,因此它们现在都属于该类。 我需要创建一个类Chatrooms,但要引用其他每个对象。类的用户再次引用所有其他对象,等等。 我觉得我做错了什么。

7
与C ++相比,C#是否能给您“更少的绳索来吊死自己”?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 乔尔·斯波斯基(Joel Spolsky)将C ++定义为“足以使自己吊死的绳索”。实际上,他在总结Scott Meyers的“ Effective C ++”: 这是一本书,基本上说,C ++足以将自己吊死,然后再延伸几英里,然后再变成一些伪装成M&M的自杀药。 我没有这本书的副本,但是有迹象表明,这本书的大部分内容与管理内存的陷阱有关,这似乎在C#中显得毫无意义,因为运行时会为您管理这些问题。 这是我的问题: C#是否可以避免仅通过精心编程才能避免的C ++陷阱?如果是这样,在何种程度上以及如何避免? 新C#程序员应该注意C#中是否存在新的,不同的陷阱?如果是这样,为什么不能通过C#设计来避免它们?

3
有人可以向我解释C#的编码约定吗?
我最近开始使用Unity3D,主要是使用C#编写脚本。正如我通常使用Java编程一样,两者之间的差异并不是很大,但是我仍然提到速成课程,只是为了确保自己走上正确的道路。 但是,我对C#的最大好奇是它使用了其方法名称的首字母大写(例如Java:getPrime()C#:GetPrime()aka:Pascal Case?)。是否有充分的理由呢?我从速成课程页面上了解到,我读到的显然是.Net的约定,我无法更改它,但是我很好奇,为什么听到这样的结果而不是正常的(相对的)骆驼案呢?例如Java使用的 注意:我了解语言具有自己的编码约定(Python方法都是小写字母,这也适用于此问题),但是我从来没有真正理解过为什么它没有被正规化为标准。

8
如何停止/避免Scrum团队超时工作?
实际上,我正在帮助一家小型软件商店进行Scrum实施。最近的Scrum Master那里告了我,他有一个问题,因为该小组正在随时间实现范围(承诺积压)。因此它们具有虚幻的速度。 我的正式问题是: 除了在回顾会议上发表讲话外;您认为实施一些硬块以避免超时是一个好主意吗? 如果是这样,您建议使用哪些技术/工具? 修订控制系统(SVN,GIT,HG等),按小时(8到5)划分 工作站按小时数(8到5)还是累计小时数(每天最多8个小时)进行分组? 其他)... 或者,也许不要硬阻这类事情;但是在不合理的加班时间内实施“罚款制度”? 第一:感谢您的快速响应。 @Baqueta(以及其他有类似问题的人):不,他们没有被收取加班费。我对他们的第一个建议是审查他们的估计,因为他们可能低估了他们的估计。这是我最喜欢的建议: 如果他们有兴趣加班,将其删除。开发不是您每周可以工作60个小时并保持高效的东西,并且有大量研究证明了这一点。如果加班费是问题,那就摆脱它,提高他们的基本工资,使他们得到自己所需要的。 另外,我认为(对于该团队)根本问题是以下各项的组合: 告诉开发人员他们在冲刺中必须实现的目标/未就可实现的目标进行咨询/在说太多工作时被忽略。 开发人员始终低估了任务将花费多少时间/每个任务涉及多少个工作单元。 简介:我将与团队讨论评估他们的估算,并与采购订单进行沟通,因为正如您提到的那样,我认为没有就范围进行咨询。
14 agile  scrum 

12
SSL证书对网站有多重要?
我正在引导自己的项目,它有一个注册/登录区域(通过RoR进行设计,当然经过适当的哈希处理和加盐处理)。当我使用子域时,我需要使用iframe访问它们(这确实是有道理的!),我需要涵盖子域的那些昂贵的证书之一。 由于我是用自己的时间和金钱来执行此操作的,所以我不愿意将几百张证书丢掉,再花几个小时研究以前从未尝试过的内容。除了电子邮件地址和密码,我没有存储任何敏感信息。据我了解,唯一的漏洞发生在用户从未加密的网络(例如咖啡店)登录或注册并且有人在监听网络时。 我便宜吗?在放任野蛮之前,我应该解决这个问题吗?我可能应该提到,我有25,000个用户注册了,当我启动时会收到通知,所以我对此感到紧张。
14 security  ssl 

6
什么是最基本,最简单的协作开发平台(PHP项目)?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 我需要使用codeigniter在相当普通的PHP应用程序上与4-5个程序员合作。我们在一个城市中有5个不同的地点,所有程序员的教育程度都不高,我假设他们中的大多数人从未使用过任何版本控制系统。 您是否可以推荐一个非常非常易于使用的平台来与像这样的项目进行协作?我所谈论的只是比共享保管箱文件夹更复杂的东西。

3
编译器如何了解其他类及其属性?
我正在写我的第一种面向对象的编程语言,到目前为止,它与创建单个“类”一样好。但是,假设我要上课,说ClassA和ClassB。只要这两个彼此无关,那么一切都很好。但是,说ClassA创建ClassB-提出了2个相关问题: -如何将编译时,编译器知道ClassA是ClassB即使存在,并且,如果是这样,它是如何知道它的属性? 到目前为止,我的想法是:而不是一次编译每个类(即扫描,解析和生成代码),每个“文件”(本质上不是真正的文件,而是一个“类”)我需要先扫描+解析每个类,然后为所有人生成代码?


1
LGPL和AGPL之间的决定性差异
LGPL(v3)和AGPL(v3)之间的决定性区别是什么? 两者都可以用于商业生产,也可以包装在付费产品中。只要我不更改这些代码的源代码,就不会强迫我在产品中附带这些源代码。 那么,显着差异在哪里? (也在/programming/10996160/the-decisive-difference-between-lgpl-and-agpl中提出,但用户建议在此处提出。)
14 licensing  gpl  lgpl  agpl 

3
Scala隐式函数的历史渊源
我的许多同事都将Scala称为具有复杂功能的复合体,甚至有人指责它具有所有这些新功能。尽管大多数程序员都知道OO功能,并且至少一些体面的程序员也了解函数式编程,但是特别是在Scala中有一个功能,我不知道它的历史渊源。 鉴于我们专业的主要口头禅是不重新发明轮子,我相当有信心,Scala没有任何实际的闻所未闻的功能,但是如果有必要,我会对此进行纠正。 为了解决实际问题,虽然我知道Scala的大多数功能的由来,但我从未见过类似其implicit声明的内容。是否有其他(较旧的!)语言也提供此功能? 区分隐式的不同情况(因为它们可能源自不同的来源),即隐式转换和隐式参数,是否有意义?

5
Java中未定义的行为
我在SO上阅读了这个问题,讨论了C ++中一些常见的未定义行为,我想知道:Java是否也具有未定义的行为? 如果是这样,那么Java中未定义行为的一些常见原因是什么? 如果不是,那么Java的哪些功能使其摆脱了此类行为,为什么没有使用这些属性实现最新版本的C和C ++?

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.