软件工程

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

4
在函数式编程中处理状态问题
我已经从OOP的角度开始学习如何编程(我敢肯定,像我们大多数人一样),但是我已经花了很多时间试图学习如何以函数方式解决问题。我对如何使用FP解决计算问题有很好的了解,但是当涉及到更复杂的问题时,我总是发现自己会转向需要可变的对象。例如,如果我正在编写粒子模拟器,则希望更新具有可变位置的粒子“对象”。使用函数式编程技术通常如何解决固有的“状态”问题?

13
程序员为什么会忽略ISO标准?[关闭]
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我经常遇到的一件事是由不符合ISO标准的程序引起的问题。 一个示例不是使用ISO国家/地区表,而是自己编写简写,这对于美国(US)或荷兰(NL)来说还可以,但对于英国(GB,而不是英国)或西班牙来说则明显错误(ES,而不是SP)和许多其他国家/地区。 另一个示例是内部日期符号。为什么会有人将日期存储为01/02/2014?目前尚不清楚是2月1日还是1月2日,而如果使用ISO标准,则只存储2014-02-01 *,而2月1日则是明确的。 我的问题:有ISO标准可用时,程序员什么时候以及为什么要自己构造结构? *存储2014-02-01,并在将其显示给最终用户时相应地格式化日期。

1
Microsoft为什么在Windows Store应用程序中放弃了RESW的RESX模型?
Microsoft为什么选择从.NET的RESX文件中更改资源管理系统? RESX具有有用的代码生成功能,可为开发人员提供自动完成的资源名称填写以及输出恕我直言的易读代码。 据我所知,新的RESW格式是相同的裸XML文件,但是没有任何代码生成,从而迫使开发人员编写更多代码,并使它们无法进行编译时错误检测。
18 c#  .net  winrt 

2
在哪里可以找到“针对Git用户的SVN”资源?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 因此,我从事了该公司使用SVN的工作(但将来会转移到Git)。问题是我不了解SVN。我已经尝试过许多Google查询,而我所能找到的都是SVN-> Git教程,“为什么Git比SVN更好”博客以及一个特定的“备忘单”,它给出了(一些)可比的命令。 缺少阅读O'Reilly关于SVN的书,对于Git用户,向SVN的简要说明(但不是太简短)是什么?
18 git  svn 

3
即使工作顺利,与上级和老板一起审查课程是否很好?
在我公司中,在交付任何项目之前,老板要求我的前辈审查由我或其他团队成员编写的程序,有时老板也会坐在一起与我们一起审查。 我认为这是获取知识的一种好方法,但是有时候程序运行良好时,经过审查它们就无法正常工作,因此我需要再次查看我的程序。 他们说,评审有助于优化程序和查询的执行,但是相对于程序的实际功能,我们能否更喜欢优化?

1
我应该使用哪种算法来创建自动人员调度功能?
想象一下一个有几十个兼职员工的小型本地企业(在我的情况下是狗托儿所)。目标是自动创建每周员工计划。我的问题是针对该问题探索哪种算法方法。 需要牢记许多限制,主要是(1)人员配备和(2)每个班次的需求,不仅是每个班次需要多少员工,而且每个班次需要的技能(例如某个班次,您可能需要一个知道如何开车去接送狗的人,或者另一个需要知道如何给狗洗澡的人等等。 其他限制包括诸如避免或要求某些员工连任的事情-一方面可能是由于人格冲突,或者另一方面是由于渗透需要从高级到初级员工进行培训。 另外,还有一些偏好要考虑在内。有些工作人员更喜欢连续两天早上而不是星期一和星期四,等等。我们知道我们不能总是适应每个人的喜好。实际上,我们有一个层次结构,即员工在选择时会优先考虑。 我很想知道有一种方法可以将这个问题减少或表达为现有的,已经解决的算法。但是我不知道该探索哪种算法。哪种现有的特定算法最有前途?
18 algorithms 

4
为什么通常将字符串资源保留在代码外部而不是代码内部?
通常,在许多平台上,我都将字符串资源写入.resx或.xml文件,然后使用某种依赖于平台的方法来获取它们。 也就是说,在iOS上,我通过NSBundle.MainBundle和Context.Resources在Android上使用来获取它们。 这种方法的优点是什么,为什么不直接在代码中访问它,例如: 在跨平台项目中,任何平台都可以直接访问它,而无需集成。 在构建过程中,无需担心资源是否构建良好。 编码人员可以使用多种语言处理功能 长话短说:以这种方式构造字符串资源的原因是什么? [编辑] 假设我的文件是其他项目之间共享的“核心”项目的一部分。(考虑一下PCL跨平台项目文件结构。) 并假设我的文件与.resx / .xml文件完全相似,看起来像这样(我不是xml专业人士,对不起!):参数Paramètres 因此,这基本上是一个自定义xml,您在其中指向键/语言以获取正确的字符串。 该文件将成为应用程序的一部分,就像您在应用程序内添加任何可访问文件一样,并且系统将访问使用PCL编码的字符串资源。这会增加应用程序的开销吗?

1
将Scala函数传递给Java 8方法
以下Scala代码可以正常工作,并且可以传递给需要功能的Java方法。有没有更清洁的方法可以做到这一点?这是我的第一遍: val plusOne = new java.util.function.Function[Int,Int] { override def apply(t:Int):Int = t + 1 override def andThen[V](after:function.Function[_ >: Int, _ <: V]): function.Function[Int, V] = ??? override def compose[V](before:function.Function[_ >: V, _ <: Int]): function.Function[V, Int] = ??? } 这是我的第二遍-它使用Java-8 Function接口的通用包装器来简化Scala语法: // Note: Function1 is Scala's functional interface, // Function …

4
持久性如何适合纯功能性语言?
使用命令处理程序处理持久性的模式如何适合于一种纯函数式语言,在这种语言中,我们希望使与IO相关的代码尽可能的薄? 当以面向对象的语言实现域驱动设计时,通常使用命令/处理程序模式执行状态更改。在这种设计中,命令处理程序位于您的域对象之上,并负责无聊的与持久性相关的逻辑,例如使用存储库和发布域事件。处理程序是您域模型的公开面孔;诸如UI之类的应用程序代码在需要更改域对象的状态时会调用处理程序。 C#中的草图: public class DiscardDraftDocumentCommandHandler : CommandHandler<DiscardDraftDocument> { IDraftDocumentRepository _repo; IEventPublisher _publisher; public DiscardDraftCommandHandler(IDraftDocumentRepository repo, IEventPublisher publisher) { _repo = repo; _publisher = publisher; } public override void Handle(DiscardDraftDocument command) { var document = _repo.Get(command.DocumentId); document.Discard(command.UserId); _publisher.Publish(document.NewEvents); } } 该document域对象是负责执行业务规则(如“用户应该有权丢弃文档”或“你不能放弃一个已经被丢弃的文件”),并产生我们需要发布域事件(document.NewEvents会是一个IEnumerable<Event>,并且可能包含一个DocumentDiscarded事件)。 这是一个不错的设计-易于扩展(您可以通过添加新的命令处理程序来添加新用例,而无需更改域模型),并且不知道对象的持久化方式(可以轻松地将NHibernate存储库换成Mongo存储库,或将RabbitMQ发布者替换为EventStore发布者),这使得使用伪造品和模拟进行测试变得容易。它还遵循模型/视图分离-命令处理程序不知道批处理作业,GUI或REST API是否正在使用它。 在Haskell这样的纯功能语言中,您可以大致像这样对命令处理程序进行建模: newtype CommandHandler = CommandHandler {handleCommand :: …

2
如何通过依赖项注入管理配置?
我是DI / IOC的忠实粉丝。它非常适合处理/抽象出硬依赖关系,并使生活更轻松。 但是,我对此有些疑惑,我不确定该如何解决。 DI / IOC的基本思想是,当实例化对象时,其所有依赖项都将在构造函数中预先填充。 但是恕我直言,构造函数有几种类型的参数(尤其是当您的对象是不可变的时)。 依赖关系(您的对象正常工作所需的对象) 配置(有关工作所需环境的信息) 参数(完成工作的数据) 我发现IOC可以很好地处理依赖关系。但我仍在尝试找出与其他两个人打交道的最佳方法。但是,由于构造函数是要由IOC容器运行的,因此似乎需要将这些项目放入IOC容器中。 我想知道人们采用什么策略/模式,人们发现了哪些优点和缺点。 注意 我知道这是一个高度主观的问题,并且根据SE指南已尝试将其设为“好”主观问题。

6
Scrum如何适应志愿者设置?
我最近加入了一个年轻的hackerspace,但仍处于自我设置过程中。我们很幸运,因为该空间有一些需要开展的内部项目,并且不乏志愿者来开展工作。 关于如何组织这些项目已经进行了一些讨论。我最近的专业经验是在Scrum上工作的,因此我正在考虑为我们的软件项目推荐一种Scrum方法,但是我不确定这是否合适。 尽管我已经看到Scrum在小型全职团队中表现良好,但该组织的性质却有所不同: 成员是志愿者。有些是全日制学生。其他人全职工作。我们不能指望任何人会持续不断地贡献自己的生命,因为他们的现实生活被放在首位。 尽管几乎每个人都有多年编写软件的经验,但很少有成员以专业或团队的方式这样做。 目前没有任何商品所有者。这些项目的要求由委员会确定。该委员会的成员还将致力于实施。这意味着我们将没有一个专门的产品负责人。 我们没有最后期限(无论是硬性还是硬性)。项目完成后将完成。 这些是相当大的差异,但是我不相信它们会阻碍应用Scrum。我认为一些小的调整可以使我们克服这一障碍: 如果我们将Sprint更改为具有固定的故事点大小,但持续时间(时间)固定,我们仍然可以从迭代发布中受益,而不会给志愿开发人员带来不切实际的交付压力。 我们可以抛弃燃尽图和速度计算。如果我理解正确,那么这些工具和指标可以充当开发团队和管理层之间的桥梁。它们以对开发人员和利益相关者都有意义的形式报告进度。考虑到我们没有人要报告(没有项目经理,没有产品负责人,也没有外部利益相关者),我相信我们可以完全放弃。 我认为我们可以从中受益的事情不需要进行调整: 在需求收集会议(一个或多个)。每个人都围坐在一张桌子旁讨论用户故事,草拟UI模拟,并建立产品待办清单。 冲刺回顾。对于我们来说,这将是一种有趣的方式,使其可以汇聚成一个对我们作为志愿者团队有效的开发过程。 我不确定的事情: 每日站立训练应如何治疗?我想知道它们在我们的环境中是否会具有很大的价值。我对站立仪式的理解是,它可以通过在团队中自然传播信息来帮助交流。考虑到我们的Sprint所提供的复杂性可能比普通Sprint少得多,因此与其他团队成员的进度/发展并驾齐驱的需求可能会更少。 我应该为XP推动诸如持续集成,代码审查和TDD之类的事情吗?我担心这会要求很多。一旦人们更加熟悉Scrum并以团队的方式工作,我会更倾向于将这些概念引入未来的项目中。 我的问题: Scrum是否可以适应基于志愿者的环境? 而且,到目前为止,我计划的方法是否朝着正确的方向发展?

5
数据库表何时应使用时间戳记?
首先要注意的是,我认为这个问题可能属于数据库交换,但我认为它总体上与编程解决方案有关,而不是与数据库有关。如果人们认为那是最好的,它将转向数据库交换。 我想知道何时在数据库表中添加创建和更新的时间戳? 第一个明显的答案是,如果任何业务逻辑需要知道什么时候进行了更新(例如事务完成日期等),则必须将其输入。 但是非业务逻辑案例呢?例如,我可以想到这样的场景:了解行更改的日期时间以帮助进行故障查找是非常有用的,例如某些业务逻辑发生故障并查看相关的数据库行,从而有可能在更新之前确定一行正在更新导致错误的另一行。 在这种用例下,给每个表一个更新并创建时间戳是有意义的(也许最琐碎的枚举表可能不会被应用程序的任何部分更新)。 为每个表提供时间戳肯定是快速停顿数据库的好方法(尽管可能是错误的)。 那么什么时候数据库表应该使用创建和更新时间戳?

2
帮助处理复杂的MVVM(多个视图)
我需要在以下情况下创建视图模型的帮助: 深层次数据 同一数据集的多个视图 每个视图都是基于活动选择的单个动态变化的视图 根据属性的值,在选项卡控件中显示不同类型的选项卡 我的问题: 我应该为每个视图(VM1,VM2等)创建视图模型表示吗? 1. Yes: a. Should I model the entire hierarchical relationship? (ie, SubVM1, HouseVM1, RoomVM1) b. How do I keep all hierarchies in sync? (e.g, adding/removing nodes) 2. No: a. Do I use a huge, single view model that caters for all views? 这是单个视图的示例 …
18 wpf  mvvm 

4
转换应该是什么意思?
当使用CI之类的低级语言进行编码时,发现强制转换有时意味着“重新解释这些字节,就像它一直是其他类型一样”,而在其他时候则是“将值智能地转换为其他类型”。 这个词的原始含义是什么,什么时候期望进行转换以及什么时候期望进行原始重新解释?

3
构造函数应该有多复杂
我正在与我的同事讨论一个构造函数可以完成多少工作。我有一个类B,它内部需要另一个对象A。对象A是类B需要完成其工作的几个成员之一。它的所有公共方法都依赖于内部对象A。有关对象A的信息存储在DB中,因此我尝试通过在构造函数中的DB上进行查找来进行验证和获取。我的同事指出,除了捕获构造函数参数外,构造函数不应做太多工作。由于如果使用构造函数的输入未找到对象A,所有公共方法都将失败,因此我认为与其允许创建实例并在以后失败,不如让它早于构造器。 别人怎么想?如果这有任何区别,我正在使用C#。 阅读是否有理由在构造函数中完成对象的所有工作?我想知道通过转到DB来获取对象A是“使该对象准备好使用所需的任何其他初始化”的一部分,因为如果用户将错误的值传递给构造函数,我将无法使用其任何公共方法。 构造函数应实例化对象的字段,并进行其他任何必要的初始化,以使对象可以立即使用。这通常意味着构造函数很小,但是在某些情况下这将需要大量的工作。
18 c#  constructors 

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.