软件工程

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

5
使用NInject建立工厂的最佳方法是什么?
我对在MVC3中使用NInject进行依赖项注入非常满意。在MVC3应用程序中工作时,我使用NInject开发了一个自定义的Controller Creation Factory,因此所创建的任何控制器都将通过此Controller Factory注入依赖项。 现在,我开始开发Windows应用程序,我想使用应用程序范围依赖注入。即,必须通过NInject创建每个对象,以简化单元测试。请指导我确保创建的每个对象都只能通过NInject Factory。 例如,如果在Button_Click事件的任何Windows窗体上我都写: TestClass testClass = new TestClass() 并且TestClass有任何依赖,例如,ITest必须自动解决。我知道我可以使用: Ikernel kernel = new StandardKenel() //AddBinding() TestClass testClass = kenel.get<TestClass>(); 但是我发现每次要创建对象时都要执行此操作很麻烦。它还迫使开发人员以特定方式创建对象。可以做得更好吗? 我可以有一个用于对象创建的中央存储库,然后每个对象创建都会自动使用该存储库吗?

2
DDD-聚合根的存储库是否处理保存的聚合?
我正在对现有应用程序的未开发模块使用类似DDD的方法;由于架构原因,它不是100%DDD,但我正在尝试使用一些DDD概念。我有一个界上下文(我认为这是适当的期限-我仍然在学习DDD)由两个实体:Conversation和Message。对话是根源,因为没有对话就不存在消息,并且系统中的所有消息都是对话的一部分。 我有一个ConversationRepository类(尽管它实际上更像是一个网关,但我使用术语“存储库”)可以在数据库中找到会话。当找到会话时,它还会(通过工厂)为该会话创建消息列表(作为属性公开)。这似乎是正确的处理方式,因为似乎不需要完整的MessageRepository类,因为只有在检索到对话时才存在该类。 但是,在保存消息时,由于它是Message的聚合根,这是ConversationRepository的责任吗?我的意思是,我是否应该在ConversationRepository上有一个名为AddMessageMessage 的方法,该方法将Message作为参数并将其保存到数据库中?还是应该有一个单独的存储库来查找/保存消息?逻辑上似乎是每个实体一个存储库,但是我也听说过“每个上下文一个存储库”。


6
写评论的初学者指南?
是否有针对初学者的明确代码编写注释指南? 理想情况下,它将涵盖何时(不应该)使用注释以及应包含哪些注释。 这个答案: 不要评论您正在做什么,但为什么要这样做。 WHAT由干净,可读和简单的代码处理,并通过适当选择变量名称来支持它。注释显示了代码本身无法(或很难)显示的更高层次的结构。 接近,但是对于没有经验的程序员来说,这有点简洁(我认为在几个示例和极端情况的基础上进行扩展非常好)。 更新:除了这里的答案,我认为这个答案对另一个问题也非常重要。

10
您如何避免在错误的分支上工作?
通常,小心就足以防止问题发生,但是有时我需要通过检查随机变量的源代码控制路径来仔细检查我正在处理的分支(例如 “嗯……我在dev分支中,对吗?”)文件。 在寻找一种更简便的方法时,我想到了相应地命名解决方案文件的名称(例如 MySolution_Dev.sln),但是每个分支中的文件名不同,因此我无法合并解决方案文件。 没什么大不了的,但是您有没有使用任何方法或“小技巧”来快速确保您位于正确的分支中?我正在将Visual Studio 2010与TFS 2008一起使用。

7
引发ArgumentNullException有何帮助?
假设我有一个方法: public void DoSomething(ISomeInterface someObject) { if(someObject == null) throw new ArgumentNullException("someObject"); someObject.DoThisOrThat(); } 我受过训练,相信抛出的错误ArgumentNullException是“正确的”,但是“对象引用未设置为对象的实例”错误意味着我有一个错误。 为什么? 我知道,如果我要缓存对引用的引用someObject并在以后使用它,那么最好在传入时检查是否为空,并尽早失败。但是,如果我在下一行取消引用,为什么要进行检查?它将以一种方式或另一种方式引发异常。 编辑: 这只是我想到的...担心被取消引用的null是否来自不检查您的C ++之类的语言(即,它只是尝试在内存位置0 +方法偏移处执行某些方法)?
27 c#  null 

7
您如何编码而不冒犯?
我的意思是,您如何着手与已经使用多年并且非常熟悉它的开发人员共享代码库? 我不想踩任何人的脚,但是我对操作方式的抱怨不是那么微妙,无论是我用空白代码还是频繁检入SVN。因此,尽管我可以轻松更改这些内容,但总体而言,我想成为一个更好的团队开发人员。 除了询问外,我不确定该怎么做,但也许你们有一些想法可以付诸实践。 更新 没有任何样式指南可以说,只是人们不习惯共享代码库。每个人都有自己的孤立的代码世界。 这是一家Perl商店,但是我敢肯定,这适用于任何语言 更新2 后来成为首席执行官的CTO完全是大狂,是这些投诉的主要来源。如果您没有按照他的喜好来做任何事情,无论是使用Mac还是Emacs,或者使用4个制表符而不是2,或者以某种方式修饰,那您就很自卑。我试图纠正这种可怕的情况,但是对我来说唯一正确的答案就是离开。 我坚信这是在工作场所中欺负的一个例子,随后,我更加意识到在工作环境中可能存在细微的欺凌和不当行为。 对于寻求此类情况答案的任何开发人员,请立即离开。您不能通过团队合作来摆脱糟糕的团队环境。
27 teamwork 

11
为什么会有这么多竞争的文件系统设计?[关闭]
只是一个简单的问题,但是为什么今天仍然有如此多的文件系统在竞争和使用?(ntfs,fat32,ext3(ffs)等) 文件系统设计人员似乎可以就每种类型的系统的最佳方面达成共识,并实现“最佳”文件系统,不是吗?只是想一想,由于这些文件系统已经存在了一段时间,并且至少应该明显看出哪些文件系统具有优于其他文件系统的质量,我们可以将每个文件系统的优点结合起来,创建一个更好的最终系统

5
您将在什么基础上将您的捐款分配给开源团队成员而不会发生任何冲突?[关闭]
我是SourceForge托管的开源项目的开发人员。 它最初是一个小应用程序,然后在发布后受到越来越多的欢迎,并且开始消耗我更多的时间和精力。因此,我在SourceForge中启用了捐赠选项。 我热衷于继续免费开发它,但是(如果有)赚进来的钱,我应该如何与我的团队分摊? 我应该在团队成员中平均分配金额吗?(50-50,因为现在是两人组) 团队成员的班级数量,提交次数或任何其他有价值的意见? 还有其他想法吗? 在这种情况下您会怎么做?请发表您的意见。 我希望这个问题对其他人有用。

7
如何学习编写惯用的C ++?
我是一名计算机科学专业的学生,​​因此,我被教导C ++是带有类的C的更好版本。我最终试图在需要解决复杂问题的时候重新发明轮子,直到后来才发现,某种语言功能或某些标准库例程可能为我完成了这项工作。 我所有的舒适与我char*和*(int*)(someVoidPointer)成语,但最近,制作到一个开源项目(未成年人)的贡献之后,我觉得这不是一个人应该如何编写C ++代码时认为。它与C有很大的不同。 考虑到我对面向对象的编程非常了解,并且我的学习曲线也不错,当我编写C ++时,您对我有什么建议可以使我进入C ++轨道?
27 c++ 

11
在文本编辑器中显示行号有什么优势?
当我在文本编辑器中没有行号的IDE中编辑代码时,我感到很奇怪。 我的问题是: 行号在视觉上是否过多,尤其是当您选择的IDE中存在按行查找功能时? 显示行号有什么用?
27 ide 

4
为什么每次重新启动后,我的本地.NET站点都需要一些时间才能首次加载?[关闭]
我正在开发基于.NET平台的网站。我通常将这些站点部署在本地IIS上,以便在上线之前对其进行测试并查看其功能。但是,每次我重新启动Windows时,站点似乎都需要很长时间才能首次运行。 我了解JIT,也知道这个问题,但是它不能回答我的问题。 每次重新启动Windows都会发生JIT吗?它与w3wp.exe进程的创建有关吗?为什么站点在每次重新启动后对第一个请求的响应如此缓慢?
27 .net  asp.net  performance  iis  jit 



8
应该使用什么标准来确定程序员的薪水?[关闭]
最近,我参与了有关确定程序员薪水时应使用哪些标准的讨论:从“这取决于雇主的选择”到其他考虑个人的教育程度,经验和对技术的理解的争论不等。等等。不久前,我在Stack Exchange博客上读了一篇关于该主题的精彩文章,我对此表示同意,但是没有多少雇主遵循所描述的逻辑。 根据您的经验,在确定程序员的薪水时,哪些要素是最重要的?在这些情况下最常使用哪些标准?最应该采用哪些标准?最后,正规教育(学院,大学)在确定工资的重要程度是什么?

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.