似乎与.NET 4.0 Code Contracts一起使用的静态分析器仅适用于Visual Studio的Team Suite版本 - 这使得它远远超出了我的团队的预算.
是否有任何替代方案(开源,免费或价格合理),通过合同样式代码(不一定使用.net代码合同)为设计提供类似的静态分析.我猜这个答案是肯定的,因为只有当BCL本身有合同时才能获得全部价值 - 但有没有哪个部分合作?
我正在使用Resharper(使用StyleCop插件,虽然我不认为这与问题/答案相关)在我们的代码库中强制执行命名约定.几乎无处不在,这种方法非常出色,只有一个例外.
对于测试方法名称,我更喜欢以下约定:
ThingOrBehaviourUnderTest_Action_ExpectedOutcome
目前这导致命名警告不一致,到目前为止我只是忽略了它(我知道我可以在该文件中禁用警告,但是它会禁用所有其他命名不一致的警告).在我可以分配的样式列表中,Resharper提供了驼峰案例,这将导致:
ThingOrBehaviourUnderTestActionExpectedOutcome
或者用下划线分隔的单词:
Thing_or_behaviour_under_test_action_expected_outcome
两者都接近我想要的,但不完全在那里.我想我正在采用一种允许下划线作为驼峰测试方法名称中的有效字符的方法,或者支持自定义命名约定的方法.这可能吗?
观看了Greg Yound关于DDD的视频
http://www.infoq.com/interviews/greg-young-ddd
我想知道如何在内存更改时使用DDD实现命令查询分离(CQS)?
使用CQS,您有两个存储库,一个用于命令,一个用于查询.以及两个对象组,命令对象和查询对象.命令对象只有方法,没有可以公开对象形状的属性,不能用于在屏幕上显示数据.另一方面,查询对象用于向屏幕显示数据.
在视频中,命令总是转到数据库,因此您可以使用查询存储库来获取更新的数据并在屏幕上重新显示.
您是否可以在ASP.NET中使用CQS和编辑屏幕,在内存中进行更改并且在更改持久保存到数据库之前需要使用更改多次更新屏幕?
例如
我能想到的几个可能的解决方案是拥有会话存储库,或者从命令对象获取查询对象的方法.或者CQS不适用于这种情况吗?
在我看来,在视频中的变化会直接传递到数据库,我还没有找到一个带有CQS的DDD示例,它解决了对域对象进行批量更改以及更新修改后的域对象视图的问题.最后发出一个命令来保存域对象.
如果我从一个源选择到另一个源,我可以同时指定排序规则吗?
例如
SELECT Column1, Column2
INTO DestinationTable
FROM SourceTable
Run Code Online (Sandbox Code Playgroud)
其中“DestinationTable”尚不存在。
我知道我可以做类似的事情
SELECT Column1, Column2 COLLATE Latin1_General_CI_AS
INTO DestinationTable
FROM SourceTable
Run Code Online (Sandbox Code Playgroud)
在我的实际问题中,事先不知道列的数据类型,因此我不能只将排序规则添加到每列。它位于遗留应用程序的一个角落,使用大型令人讨厌的存储过程来生成 SQL,我试图让它在 tempdb 中具有不同排序规则的新服务器上运行,只需进行最小的更改。
我正在寻找类似的东西:
SELECT Column1, Column2
INTO DestinationTable COLLATE Latin1_General_CI_AS
FROM SourceTable
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。
在 Serilog 中,当属性值为空时是否可以忽略属性?
我尝试添加 DataMember 属性,但这些属性似乎被忽略:
[DataMember(EmitDefaultValue = false)]
public string Title { get; set; }
Run Code Online (Sandbox Code Playgroud)
进一步研究源代码,我注意到有一个AttributedDestructuringPolicy但这似乎控制渲染属性值而不是省略属性。
我正在玩伊德里斯,我遇到了一些令我困惑的事:
以下类型检查:
conc : Vect n a -> Vect m a -> Vect (n+m) a
conc [] ys = ys
conc (x :: xs) ys = x :: (conc xs ys)
Run Code Online (Sandbox Code Playgroud)
但这不是:
conc : Vect n a -> Vect m a -> Vect (m+n) a
conc [] ys = ys
conc (x :: xs) ys = x :: (conc xs ys)
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
When checking right hand side of conc with expected type
Vect (m + 0) a
Type mismatch between …Run Code Online (Sandbox Code Playgroud)