小编Nia*_*ton的帖子

通过构造函数或属性设置器进行依赖注入?

我正在重构一个类并为它添加一个新的依赖项.该类目前正在构造函数中使用其现有依赖项.因此,为了保持一致性,我将参数添加到构造函数中.
当然,对于单元测试,有一些子类加上甚至更多,所以现在我正在玩改变所有构造函数的游戏来匹配,并且它需要很长时间.
这让我觉得使用带有setter的属性是获得依赖关系的更好方法.我认为注入的依赖项不应该是构造类实例的接口的一部分.您添加了一个依赖项,现在所有用户(子类和任何直接实例化您的用户)突然知道它.这感觉就像打破了封装.

这似乎不是现有代码的模式,所以我希望找出一般的共识是什么,构造函数与属性的优缺点.使用属性设置器更好吗?

dependency-injection inversion-of-control

145
推荐指数
9
解决办法
3万
查看次数

在没有整个WDK的情况下获得windbg?

有没有人知道如何获得windbg,而无需下载整个620MB WDK ISO?

我可以在网上找到的下载调试器的是这个链接,它说你必须得到整个WDK:http://www.microsoft.com/whdc/devtools/debugging/default.mspx.

windbg

87
推荐指数
10
解决办法
12万
查看次数

单一责任原则与贫血领域模式反模式

我正处于一个非常重视单一责任原则的项目中.我们有很多小班,事情很简单.但是,我们有一个贫血的领域模型 - 我们的任何模型类都没有行为,它们只是属性包.这不是对我们设计的抱怨 - 它实际上看起来效果很好

在设计评审期间,只要将新行为添加到系统中,SRP就会被引出,因此新行为通常会在新类中结束.这使得事情很容易被单元测试,但我有时会感到困惑,因为它感觉就像将行为拉出相关的地方.

我正在努力提高我对如何正确应用SRP的理解.在我看来,SRP反对添加与一个对象共享相同上下文的业务建模行为,因为该对象不可避免地最终要么做多个相关的事情,要么做一件事但是要知道改变形状的多个业务规则其产出.

如果是这样,那么感觉最终结果是一个贫血领域模型,这在我们的项目中肯定是这样.然而,贫血领域模型是一种反模式.

这两个想法可以共存吗?

编辑:一些上下文相关的链接:

SRP - http://www.objectmentor.com/resources/articles/srp.pdf
贫血领域模型 - http://martinfowler.com/bliki/AnemicDomainModel.html

我不是那种喜欢找先知并遵循他们所说的福音的开发者.所以我没有提供这些链接,作为说明"这些是规则"的方式,只是作为两个概念的定义来源.

oop solid-principles

58
推荐指数
4
解决办法
4969
查看次数

使用注释禁用所有Resharper警告

有没有办法通过单个注释禁用文件或代码段的所有Resharper警告?我正在尝试为潜在的候选人创建一些编码练习,并且Resharper警告会消除我希望候选人发现的问题:P抑制特定警告仍然可以明确问题是什么.

我仍然希望在采访期间有Resharper,我只是希望候选人能够在没有Resharper破坏乐趣的情况下发现这个问题.

编辑:对不起,我会尝试更清楚地知道我在追求什么.我不想永久禁用特定的Resharper警告,我只是希望它不显示在一个特定的文件中,因为练习的目的是看开发者是否理解警告的原因.

举一个例子,有一个Resharper警告使用.Any扩展方法而不是Count()> 0,我希望开发人员指出自己.要禁用该警告,您必须使用以下注释:

// ReSharper disable UseMethodAny.0
Run Code Online (Sandbox Code Playgroud)

围绕代码.这种情况让游戏稍微偏离了一点.

我试图找到类似的东西:

// ReSharper disable all
Run Code Online (Sandbox Code Playgroud)

我可以把它放在班级的顶部,所以它不会泄露我想让开发人员找到的东西.但我似乎找不到办法做到这一点.使用Resharper警告的数字也可以,但我不认为它的工作方式如此?

c# resharper

29
推荐指数
3
解决办法
2万
查看次数

让TortoiseSVN将文件的修改时间设置为最新修订版的时间戳

我似乎记得能够让TortoiseSVN在执行更新时将文件的最后修改时间戳设置为修订版的时间戳.因此,如果有人在五天前提交了一个文件并对其进行了更新,那么修改后的时间戳将是五天前,而不是今天.

选项在哪里?

svn tortoisesvn

20
推荐指数
2
解决办法
7596
查看次数

使用Castle Windsor指定组件注册实例

我有一个关于Castle Windsor的简单问题,我很久没有使用过了.我正在尝试使用特定实例注册服务,该实例将是服务的单例实现.

容器无法尝试创建服务本身的实现,因为它具有容器无法解析的依赖项.我有一个服务实例,我希望它是唯一一个用于请求服务的人的实例.但我似乎很少运气.

我通过使用这段代码暂时提出了希望:

container.Register(Component.For<IMyInterface>().Instance(serviceObj));
Run Code Online (Sandbox Code Playgroud)

但是所有Castle都与实例一起做了一个.GetType()并注册了这个类型.对服务的请求随后将导致容器尝试创建该类型,并在无法填充依赖项时失败.

那么有什么方法可以做我想做的事情吗?如果不是,我将创建某种IServiceProvider来获取服务的实例,并且没有容器的依赖关系来填写.但这比正确的解决方案更像是一种解决方案.

有什么建议?谢谢!

c# dependency-injection castle-windsor inversion-of-control

18
推荐指数
1
解决办法
1万
查看次数

何时使用RabbitMQ声明/绑定队列和交换

我们在我的工作场所有一个围绕RabbitMQ的包装库,由不再在这里工作的人创建.我正在使用Rabbit设计一个新系统,并且正在制定用于声明队列,交换和绑定的最佳方法.我们的Rabbit架构有一些联邦全局区域,每个区域有多个Rabbit节点.

发布消息和订阅队列的包装器代码每次都重新声明相关的交换,队列和绑定.我担心的是,这可能会在每个消息发布中引入显着的延迟,特别是如果它需要等待确认远程全局区域中存在队列/交换.我希望每秒数百万条消息的基准不会重新声明每次发布的交换.

简而言之,这种方法对我来说似乎有点浪费和偏执,但也许我错过了一些东西.

所以我有几个问题:

  • 鉴于全球联合会,重新宣布排队和交流是否会产生重大影响?
  • 是否重新声明每个使用一个好的方法,因为它处理队列/交换由于代理重新启动或显式删除而消失?
  • 我们应该只为每个进程声明一次队列和交换并期望它们能够持续一生吗?
  • 是否应该在Rabbit配置中声明持久的交换和队列,而不是由应用程序声明?
  • 如果应用程序可能继续使用旧配置声明它们,应如何处理队列/交换的配置更改?应用程序是否应该只处理声明失败并继续发布/使用?

amqp rabbitmq

14
推荐指数
1
解决办法
1890
查看次数

使用变量在Team City中定义VCS根URL

我们正在尝试为发布标记定义TeamCity项目.当我们准备发布时,我们使用包含版本号的标签标记trunk.我们希望基于此标记检查构建过程,并在构建完成时将文件移动到名称也基于版本号的文件夹中.

我们只对拥有"最新版本"项目感兴趣,因此每次我们迁移到新版本时,我们都会使用新版本号重新配置现有的TC项目.

我遇到的问题是参数化VCS根URL(SVN).我知道如何为构建过程中可以使用的构建设置变量,我们可以使用它来配置我们将文件移动到的文件夹.但是,我似乎无法找到一种方法来创建我们可以在SVN网址中引用的变量.

有没有办法从变量派生VCS URL?是否可以在VCS根目录和项目配置之间共享一个变量?

svn teamcity continuous-integration

9
推荐指数
2
解决办法
6355
查看次数

管理数据库迁移:脚本与工具

我们的项目有大约20个开发人员,但我们的应用程序相对较少使用数据库.我们有大约5个数据库的集合,所有这些数据库都非常小,每个数据库的表少于20个,其中没有数百个行或任何大的数据库.

关于如何随着时间的推移管理数据库的演变,我们有两个选项:

  • 某种工具.目前,我们正在使用Visual Studio数据库项目,其中包含模式的当前定义,并查看参考数据库以生成diff脚本.然后,我们使用此diff脚本使参考数据库保持最新.
  • 使用版本脚本从基线构建数据库.脚本手动放置在源代码管理中.将数据从旧列/表移动到新数据的任何数据迁移都将成为这些脚本的一部分.在某个地方会有一个版本记录在DB中,升级会运行DB版本和当前版本之间的所有脚本.

第二个选项似乎被广泛使用,我在这里找到了一个深入的讨论:http://odetocode.com/blogs/scott/archive/2008/01/31/versioning-databases-the-baseline.aspx

我们目前遇到的问题是我们无法访问我们的生产数据库.这意味着要创建一个发布包,我们必须将Production的备份还原到另一个位置,针对该引用数据库生成差异并将脚本提供给生产数据库团队.因此,我们的生产发布与我们的其他环境不同.

这使得运行版本化脚本的想法很吸引人,因为我们在所有环境中使用相同的脚本,并且在部署中没有临时工作(例如,手动恢复prod到参考DB).但鉴于我们有这么小规模的数据库情况,我觉得我们几乎不可能成为数据库工具的困难案例.我们想要的是尽可能简单易懂的东西.

RedGate套件之类的工具是否适用于这种情况,或者我们应该使用版本化脚本吗?成本并不是一个问题,它更多的是创建一个成功的坑,维护和部署数据库是尽可能基本和自动化.

database sql-server deployment

7
推荐指数
1
解决办法
6717
查看次数

使用New-Item创建目录的竞争条件?

我在调用New-Item以使用UNC路径在外部计算机上创建目录时看到了竞争条件.代码如下:

New-Item $target -itemType Directory -Force -Verbose |
        %{ Write-Host "Creating dir" $_.FullName }
Run Code Online (Sandbox Code Playgroud)

之后立即使用Test-Path返回false.我放置了一个Test-Path - > sleep 1秒重试循环,睡眠1秒后,Test-Path返回true.

New-Item是阻止通话吗?我应该在打电话给New-Item后等待吗?

windows powershell

7
推荐指数
1
解决办法
631
查看次数

简单的光线追踪教程?

几年前,在大学时,我用 C++ 编写了一个光线追踪器,但现在我几乎记不起来了。只是为了好玩,我决定再次尝试编写光线追踪器,这次是用 C# 编写。但遗憾的是,我正在努力开始从相机坐标到世界坐标的转换。

谁能给我推荐一套关于从头开始编写光线追踪器的好教程?我的数学知识非常基础,所以我需要重新学习矩阵乘法,计算出屏幕上的点在 3D 空间中的位置,以便通过它投射光线。

我认为我可以解决形状和阴影部分的交叉点,但我需要回到相机翻译的基础知识。

谢谢!

c# math 3d raytracing matrix

5
推荐指数
1
解决办法
1万
查看次数

当查询返回许多行时,Oracle extractValue失败

我有一个可能不值得苛刻的任务,即编写数据迁移查询来填充现有记录,并将新列的值添加到生产数据库的表中.该表有大约200,000行的某个位置.

值的来源是存储在数据库中的某些XML.我有一些XPath将提取我想要的值,并使用extractValue来获取值似乎一切都很好,直到查询更新的记录数量开始变得比我在测试数据库中的数量更大.

一旦记录集增长到一些随机的大小,大约500行,那么我开始得到错误"ORA-19025:EXTRACTVALUE只返回一个节点的值".确定数据库中有一些奇怪的行,对于XPath没有唯一的结果,我试图限制查询中的记录以隔离坏记录.但是一旦我缩小了记录集,错误就消失了.实际上没有行会为此XPath查询返回多个值.看起来,extractValue会发生一些可疑的事情.

有人对这个有了解吗?我不是SQL专家,即便在SQL Server上花费的时间也比Oracle多.所以,如果我不能让它工作,我想我会留下一些弄乱游标或其他东西.

有什么建议/帮助吗?如果有帮助,我们在服务器上运行10g.谢谢!

sql oracle

4
推荐指数
1
解决办法
2万
查看次数