软件工程

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

6
在Java中使用静态构造函数
我没有完全理解Java中的静态构造函数。如果允许,为什么要允许?在什么情况下会使用它?它有什么作用?有人可以给我一个简单的例子吗?
11 java 

10
测试与不要重复自己(DRY)
为什么如此鼓励通过编写测试来重复自己? 看起来测试基本上表达了与代码相同的内容,因此是代码的重复(从概念上讲,不是实现)。DRY的最终目标不包括消除所有测试代码吗?
11 testing  dry 

3
整个MVC网站中的全局常数值
我的MVC(.NET)在整个站点中都有一些常量值,例如电话号码,实际地址,电子邮件地址等。 我想一次存储此值,因此将来的更新更容易更改它们的详细信息。 为了简化我的问题,我只关注电话号码。 我的问题是在哪里以及如何存储此数字,这是我面临的决策问题。此刻,我选择将其作为静态方法存储在Global.asax文件中,例如 public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { //logic } public static string GetPhoneNumber() { return "012345 678 910"; } } 效果很好,在我的控制器中,我可以添加对此方法的引用并将其分配给ViewBag public ActionResult Contact() { ViewBag.Phone = MvcApplication.GetPhoneNumber(); } 在许多网站上,电话号码将显示在每个页面的顶部,因此,将其放在其中_Layout.cshtml是合乎逻辑的。 我遇到的问题是_Layout.cshtml没有控制器(我不知道),而我可以传递值的唯一方法是为每个视图(例如EG)设置一个ViewBag.Phone public class HomeController : Controller { // // GET: /Home/ public ActionResult …
11 mvc 

1
我如何在没有C#知识的情况下进行认真的F#项目?
因此,基本上我希望承担的项目是SVG编辑器。我更喜欢使用WPF,因为这样我就可以在应用程序布局中使用XAML(那个设计师是如此漂亮)。不幸的是,我仅使用.NET框架仅几个月,而对大多数类名仍然不熟悉。 目标是使用F#,因为它是一种功能编程语言,并且F#的递归和与元组结合的出色列表操作将很好地实现我想要实现的目标。而目标是使用.NET,因为它拥有大量可用的和有文档的示例类库。 我已经看过这个问题了。/software/3129/is-there-a-canonical-book-on-f 但答案仅适用于F#,并假定您已经知道C#,这对我来说并不是特别有用。 回答上述问题的顶级书籍是《 Real-World Functional Programming:F#和C#中的示例》。但是,这本书上的三星级亚马逊评论虽然相当苛刻,甚至可能被夸张地正确说明了我的问题。 如果您对函数式编程感兴趣,但是您不是想学习F#的C#,则可以安全地跳过这本书。 我在网上查看了WPF F#示例,到处都有各种代码片段,但是没有实质性的内容或证明它在单个文件脚本.fsx之外使用,也没有真正的企业级甚至专业级的代码。 因此,即使Microsoft确实也没有很多关于如何在F#中执行.NET的示例。我发现的示例通常仅是F#特有的功能。看一下F#的基础和高级部分,您会发现它们仅教语法。例如,Line类在WPF上的MSDN上在F#中没有任何代码示例。 向下滚动F#的代码示例选项卡时,它只是说 No code example is currently available or this language may not be supported. 由于可用的代码示例很少,因此我很难进行这个项目。 我的问题 是对我不太了解C#时应如何使用F#处理该项目的帮助,我们将不胜感激。
11 wpf  f# 

3
强制性代码审查的良好指南和做法[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我们正在尝试对每次提交进行强制性代码审查-对于几个冲刺,没有任何东西被未经过至少1个人(而不是作者)验证的主人掌握。我们从开发人员和管理层那里都买进了(这是一个令人惊奇的情况),我们希望获得一些众所周知的好处: 明显减少错误 更加了解项目周围发生的变化 “我知道有人会看这个的,所以我不会偷懒” /反牛仔效应 增加项目内/项目间的一致性 但是我们正在引入一种已知的降低速度的方法,如果做错了,可能会在提交管道中创建一个愚蠢的官僚主义步骤,除了占用时间外什么也不做。我担心的事情: 评论只涉及尼特采摘 (大作)人们在两行提交审查中提出了巨大的架构问题。 我不想在其他事情上偏answers答案。 虽然我们都是有理智的人,并且会进行大量的自我分析,但我们可以肯定地使用一些赢得战争的见识,以了解我们应该在审查会议中尝试完成哪些事情才能真正使评论对我们有用。您发现可以使用的一些准则和政策是什么?

3
如何用硬编码对象模拟方法?
我正在研究具有多层的应用程序。数据访问层从数据源检索和保存数据,业务逻辑处理数据,用户界面在屏幕上显示数据。 我还对业务逻辑层进行了单元测试。唯一的要求是测试业务层逻辑流。因此,我使用Moq框架来模拟数据访问层,并使用MS Unit对业务逻辑层进行单元测试。 我正在使用接口编程来使设计尽可能地分离,以便可以进行单元测试。业务层通过接口调用数据访问层。 当我尝试测试一种业务逻辑方法时,我遇到了一个问题。该方法完成了一些工作并创建了一个对象,并将其传递给数据访问层。当我尝试模拟该数据访问层方法时,则无法成功模拟。 在这里,我试图创建一个演示代码来显示我的问题。 模型: public class Employee { public string Name { get; set; } } 数据访问层: public interface IDal { string GetMessage(Employee emp); } public class Dal : IDal { public string GetMessage(Employee emp) { // Doing some data source access work... return string.Format("Hello {0}", emp.Name); …

2
在进行具有雇主特定更改的开源项目时,最好的Git工作流程是什么?
在我目前的雇主那里,我们正在使用托管在Github上的开源项目作为应用程序的一部分。我一直在从事这个项目,既添加了我们需要的一些功能,又将其与我们的构建系统集成在一起。我的经理和我都同意,我们将在合理范围内尽可能多地将我们的工作提交给开源项目。我的问题是,最好的工作流程/技术是什么,以这样一种方式来维护我的Git提交,以便我可以轻松地分离出有意义的东西,并重新添加到开源项目中-漏洞修复和足够通用的新功能-特定于我们项目的内容,例如构建位置和应用程序常量。 到目前为止,我一直在维护一个私有的Git分支,在其中我以适当的粒度提交所有更改。然后cherry-pick,我用于将可开源的提交添加到master分支,并将其提交回Github。 似乎我应该使用merge来执行此操作,这样我就不会继续创建具有相同内容的单独提交,但是我不确定如何在排除公司特定的提交并保持合理的工作流程的同时执行此操作。 例如,我想我可以在私有分支上对master和公司特定的东西提交可开源的东西,然后根据需要将master合并到该分支中,而使master分支指向合并之前的提交,这样我就可以再次向其提交可开源的内容,然后再次合并。这个工作流程似乎很尴尬,因为我要做的每件事都要事先确定它属于哪个分支,将其处理为看起来像完成的部分,然后提交并合并再进行测试。我真正喜欢Git的一件事是,要做任何使应用程序正常工作的事情,然后决定以后如何以及在何处提交更改,这是多么容易。据我所知,如果您目前在分支机构中并且已经完成了一些工作, 我正在做一个合理的工作流程以获得长期贡献吗?有人可以推荐一个可能更好的不同工作流程吗?为什么会更好?
11 git 

5
如何比较两条曲线的特征?
我需要比较两条曲线f(x)和g(x)。它们在相同的x范围内(例如-30到30)。f(x)可能会有一些尖锐的峰值或平滑的峰值和谷值。g(x)可能具有相同的峰和谷。如果是这样,我想衡量一下这些功能在没有视觉检查的情况下的重合程度。我试图通过以下方式解决此问题。 通过将每个数据点除以函数的总面积来归一化这两个函数。现在归一化函数的面积为1.0 在每个x处获得f(x)和g(x)中的最小值。这将给我一个新函数,基本上是f(x)和g(x)之间的重叠区域。 当我整合步骤2的结果函数时,我得到的总重叠面积超过1.0 但是,这不能告诉我峰谷是否重合。我不确定是否可以这样做,但是如果有人知道一种方法,我将不胜感激。 ==编辑==为了澄清起见,我包括了一张图片。 两条曲线(黑色和蓝色)之间的差异可能并不相同,但将具有互补的形状。 背景:函数是化合物的原子轨道的预计状态密度(PDOS)。所以我有s,p,d轨道的状态。我想确定材料是否具有sp,pd或dd杂交(轨道混合)。我仅有的数据是PDOS。如果说s轨道(函数f(x))的PDOS具有与p轨道(函数g(x))的PDOS的能量(x值)相同的峰和谷,则该材料中存在sp混合。
11 geometry 

1
MVC + 3层;ViewModels在哪里发挥作用?
我正在使用ASP.NET MVC 4设计一个三层应用程序。我使用以下资源作为参考。 CodeProject:MVC + N层+实体框架 在ASP.NET MVC中分离数据访问 到目前为止,我有以下目的。 表示层(PL) (主MVC项目中,中号的MVC被转移到数据访问层): MyProjectName.Main Views/ Controllers/ ... 业务逻辑层(BLL): MyProjectName.BLL ViewModels/ ProjectServices/ ... 数据访问层(DAL): MyProjectName.DAL Models/ Repositories.EF/ Repositories.Dapper/ ... 现在,PL引用BLL,而BLL引用DAL。这样,下层不依赖于其上一层。 在这种设计中,PL调用BLL的服务。PL可以将视图模型传递给BLL,而BLL可以将视图模型传递回PL。 同样,BLL调用DAL层,而DAL层可以将模型返回给BLL。BLL可以依次构建视图模型并将其返回给PL。 到目前为止,这种模式一直在为我工作。但是,我遇到了一个问题,其中某些ViewModel需要在多个实体上进行联接。在普通的MVC方法中,在控制器中,我使用LINQ查询执行joins,然后执行select new MyViewModel(){ ... }。但是现在,在DAL中,我无法访问在(在BLL中)定义ViewModel的位置。 这意味着我无法在DAL中加入联接并将其返回给BLL。看来我必须在DAL中进行单独的查询(而不是在一个查询中进行联接),然后BLL将使用这些结果来构建ViewModel。这非常不方便,但是我不认为我应该将DAL暴露给ViewModels。 有什么想法可以解决这个难题吗?谢谢。

2
用重构注释扩展代码是一个好主意吗?
我正在研究“意大利面条代码”项目,并且在修复错误和实现新功能的同时,我还进行了一些重构,以使代码可以进行单元测试。 这些代码通常紧密耦合或非常复杂,以至于修复一个小错误将导致许多类被重写。因此,我决定在代码中停止重构的位置画一条线。为了清楚起见,我在解释这种情况的代码中添加了一些注释,例如: class RefactoredClass { private SingletonClass xyz; // I know SingletonClass is a Singleton, so I would not need to pass it here. // However, I would like to get rid of it in the future, so it is passed as a // parameter here to make this change …

5
代码重复与多负责任的方法
我尝试遵循“单一职责原则”(SRP),并且也省略代码重复。但是,通常在某些地方存在代码重复,这些代码重复不过是调用的代码块,这些代码块无法将其提取到至少有意义的命名方法中: DoAction1(); DoAction2(); if (value) DoAction3(); DoAction4(); 将此类代码提取到方法中的最佳方法是什么?如何命名?

1
为什么yield关键字与return和break结合使用,而不是单独使用?
在C#中,您可以构造返回类型为IEnumerable<T>和并使用yield return和yield break控制流程的方法。这是使用两个控件的简单示例: public IEnumerable<int> GetEvens(int start, int end) { if(end < start) yield break; if(start & 2 != 0) start++; for(int i = start; i <= end; i+=2) { yield return i; } } 我的问题是,为什么它最初设计为与一起使用两个关键字,yield而不是像下面那样使用单个关键字yield“产生返回值”来使用它: public IEnumerable<int> GetEvens(int start, int end) { if(end < start) return; // stop completely …
11 c# 

3
.NET为什么需要CIL和CLR?
我在这里看到了这张漂亮的照片。我了解到所有支持.net语言的编译器都将源代码转换为CIL格式。现在,Microsoft永远不会.NET通过为所有操作系统编写CLR来引入所有操作系统。那么为什么要保留这样的中间代码格式和CLR来执行该CIL。这不是要处理的头痛。微软为什么选择这样? 编辑这种架构有其代价。它会降低性能,不是吗?Java这样做是为了保持平台独立性,因为.NET是出于什么原因呢?为什么不保留一个简单的普通C类编译器。如果我需要添加任何新语言,则任何方式都将需要编译器将代码转换为CIL,这唯一的区别就是目标语言。Tat的全部。
11 .net 

1
GitHub组织的跨多个存储库的项目?
我已经启动了一个项目,该项目至少涉及GitHub上的三个存储库。 其中一个存储库是一个通用的文档和示例转储,另外两个存储库包含两个程序的实现,这些程序构成了项目的主干。 我是否应该使用GitHub Organization处理此类配置?还是我应该将所有信息与其他十个完全不相关的存储库一起转储到我自己的帐户中?

2
SQL Server数据工具和实体框架-这里有协同作用吗?
从使用Linq2Sql进行的一个项目中,我怀疑下一个(更大)的项目可能会将我推入Entity Framework的怀抱。我已经对该主题进行了一些阅读,但是我没有找到一个连贯的故事,关于如何/应该/可能将SQL Server数据工具和实体框架一起使用。 它们是完全分开构想的,并且一起使用会产生错误的结果吗? 它们是否完全正交,我错过了要点? 我认为我可能同时想要这两个原因: SSDT非常适合“编译”(检查)且易于版本控制的sql和schema 但是,SSDT的“迁移/更新”故事(在我看来)并不令人信服:“更新任何内容”对于架构都可以,但是(AFAIK)绝不可能对数据起作用。 另一方面,我还没有尝试过EF迁移来了解它是否存在类似的问题,但是Up / Down位看起来非常方便。

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.