我正在重构一个类并为它添加一个新的依赖项.该类目前正在构造函数中使用其现有依赖项.因此,为了保持一致性,我将参数添加到构造函数中.
当然,对于单元测试,有一些子类加上甚至更多,所以现在我正在玩改变所有构造函数的游戏来匹配,并且它需要很长时间.
这让我觉得使用带有setter的属性是获得依赖关系的更好方法.我认为注入的依赖项不应该是构造类实例的接口的一部分.您添加了一个依赖项,现在所有用户(子类和任何直接实例化您的用户)突然知道它.这感觉就像打破了封装.
这似乎不是现有代码的模式,所以我希望找出一般的共识是什么,构造函数与属性的优缺点.使用属性设置器更好吗?
有没有人知道如何获得windbg,而无需下载整个620MB WDK ISO?
我可以在网上找到的下载调试器的是这个链接,它说你必须得到整个WDK:http://www.microsoft.com/whdc/devtools/debugging/default.mspx.
我正处于一个非常重视单一责任原则的项目中.我们有很多小班,事情很简单.但是,我们有一个贫血的领域模型 - 我们的任何模型类都没有行为,它们只是属性包.这不是对我们设计的抱怨 - 它实际上看起来效果很好
在设计评审期间,只要将新行为添加到系统中,SRP就会被引出,因此新行为通常会在新类中结束.这使得事情很容易被单元测试,但我有时会感到困惑,因为它感觉就像将行为拉出相关的地方.
我正在努力提高我对如何正确应用SRP的理解.在我看来,SRP反对添加与一个对象共享相同上下文的业务建模行为,因为该对象不可避免地最终要么做多个相关的事情,要么做一件事但是要知道改变形状的多个业务规则其产出.
如果是这样,那么感觉最终结果是一个贫血领域模型,这在我们的项目中肯定是这样.然而,贫血领域模型是一种反模式.
这两个想法可以共存吗?
编辑:一些上下文相关的链接:
SRP - http://www.objectmentor.com/resources/articles/srp.pdf
贫血领域模型 - http://martinfowler.com/bliki/AnemicDomainModel.html
我不是那种喜欢找先知并遵循他们所说的福音的开发者.所以我没有提供这些链接,作为说明"这些是规则"的方式,只是作为两个概念的定义来源.
有没有办法通过单个注释禁用文件或代码段的所有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警告的数字也可以,但我不认为它的工作方式如此?
我似乎记得能够让TortoiseSVN在执行更新时将文件的最后修改时间戳设置为修订版的时间戳.因此,如果有人在五天前提交了一个文件并对其进行了更新,那么修改后的时间戳将是五天前,而不是今天.
选项在哪里?
我有一个关于Castle Windsor的简单问题,我很久没有使用过了.我正在尝试使用特定实例注册服务,该实例将是服务的单例实现.
容器无法尝试创建服务本身的实现,因为它具有容器无法解析的依赖项.我有一个服务实例,我希望它是唯一一个用于请求服务的人的实例.但我似乎很少运气.
我通过使用这段代码暂时提出了希望:
container.Register(Component.For<IMyInterface>().Instance(serviceObj));
Run Code Online (Sandbox Code Playgroud)
但是所有Castle都与实例一起做了一个.GetType()并注册了这个类型.对服务的请求随后将导致容器尝试创建该类型,并在无法填充依赖项时失败.
那么有什么方法可以做我想做的事情吗?如果不是,我将创建某种IServiceProvider来获取服务的实例,并且没有容器的依赖关系来填写.但这比正确的解决方案更像是一种解决方案.
有什么建议?谢谢!
我们在我的工作场所有一个围绕RabbitMQ的包装库,由不再在这里工作的人创建.我正在使用Rabbit设计一个新系统,并且正在制定用于声明队列,交换和绑定的最佳方法.我们的Rabbit架构有一些联邦全局区域,每个区域有多个Rabbit节点.
发布消息和订阅队列的包装器代码每次都重新声明相关的交换,队列和绑定.我担心的是,这可能会在每个消息发布中引入显着的延迟,特别是如果它需要等待确认远程全局区域中存在队列/交换.我希望每秒数百万条消息的基准不会重新声明每次发布的交换.
简而言之,这种方法对我来说似乎有点浪费和偏执,但也许我错过了一些东西.
所以我有几个问题:
我们正在尝试为发布标记定义TeamCity项目.当我们准备发布时,我们使用包含版本号的标签标记trunk.我们希望基于此标记检查构建过程,并在构建完成时将文件移动到名称也基于版本号的文件夹中.
我们只对拥有"最新版本"项目感兴趣,因此每次我们迁移到新版本时,我们都会使用新版本号重新配置现有的TC项目.
我遇到的问题是参数化VCS根URL(SVN).我知道如何为构建过程中可以使用的构建设置变量,我们可以使用它来配置我们将文件移动到的文件夹.但是,我似乎无法找到一种方法来创建我们可以在SVN网址中引用的变量.
有没有办法从变量派生VCS URL?是否可以在VCS根目录和项目配置之间共享一个变量?
我们的项目有大约20个开发人员,但我们的应用程序相对较少使用数据库.我们有大约5个数据库的集合,所有这些数据库都非常小,每个数据库的表少于20个,其中没有数百个行或任何大的数据库.
关于如何随着时间的推移管理数据库的演变,我们有两个选项:
第二个选项似乎被广泛使用,我在这里找到了一个深入的讨论:http://odetocode.com/blogs/scott/archive/2008/01/31/versioning-databases-the-baseline.aspx
我们目前遇到的问题是我们无法访问我们的生产数据库.这意味着要创建一个发布包,我们必须将Production的备份还原到另一个位置,针对该引用数据库生成差异并将脚本提供给生产数据库团队.因此,我们的生产发布与我们的其他环境不同.
这使得运行版本化脚本的想法很吸引人,因为我们在所有环境中使用相同的脚本,并且在部署中没有临时工作(例如,手动恢复prod到参考DB).但鉴于我们有这么小规模的数据库情况,我觉得我们几乎不可能成为数据库工具的困难案例.我们想要的是尽可能简单易懂的东西.
RedGate套件之类的工具是否适用于这种情况,或者我们应该使用版本化脚本吗?成本并不是一个问题,它更多的是创建一个成功的坑,维护和部署数据库是尽可能基本和自动化.
我在调用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后等待吗?
几年前,在大学时,我用 C++ 编写了一个光线追踪器,但现在我几乎记不起来了。只是为了好玩,我决定再次尝试编写光线追踪器,这次是用 C# 编写。但遗憾的是,我正在努力开始从相机坐标到世界坐标的转换。
谁能给我推荐一套关于从头开始编写光线追踪器的好教程?我的数学知识非常基础,所以我需要重新学习矩阵乘法,计算出屏幕上的点在 3D 空间中的位置,以便通过它投射光线。
我认为我可以解决形状和阴影部分的交叉点,但我需要回到相机翻译的基础知识。
谢谢!
我有一个可能不值得苛刻的任务,即编写数据迁移查询来填充现有记录,并将新列的值添加到生产数据库的表中.该表有大约200,000行的某个位置.
值的来源是存储在数据库中的某些XML.我有一些XPath将提取我想要的值,并使用extractValue来获取值似乎一切都很好,直到查询更新的记录数量开始变得比我在测试数据库中的数量更大.
一旦记录集增长到一些随机的大小,大约500行,那么我开始得到错误"ORA-19025:EXTRACTVALUE只返回一个节点的值".确定数据库中有一些奇怪的行,对于XPath没有唯一的结果,我试图限制查询中的记录以隔离坏记录.但是一旦我缩小了记录集,错误就消失了.实际上没有行会为此XPath查询返回多个值.看起来,extractValue会发生一些可疑的事情.
有人对这个有了解吗?我不是SQL专家,即便在SQL Server上花费的时间也比Oracle多.所以,如果我不能让它工作,我想我会留下一些弄乱游标或其他东西.
有什么建议/帮助吗?如果有帮助,我们在服务器上运行10g.谢谢!
c# ×3
svn ×2
3d ×1
amqp ×1
database ×1
deployment ×1
math ×1
matrix ×1
oop ×1
oracle ×1
powershell ×1
rabbitmq ×1
raytracing ×1
resharper ×1
sql ×1
sql-server ×1
teamcity ×1
tortoisesvn ×1
windbg ×1
windows ×1