代码合约和 MVVM
Posted
技术标签:
【中文标题】代码合约和 MVVM【英文标题】:Code Contracts and MVVM 【发布时间】:2012-05-21 19:36:52 【问题描述】:我有一个 C# MVVM 项目,我想在其中使用代码协定。 所以这是我的场景: 接口:
public interface IC042_Model
void Save(C042 entity);
void Delete(C042 entity);
然后我有合约的抽象类:
[ContractClassFor(typeof(IC042_Model))]
internal abstract class C042_Model_Contracts : IC042_Model
public void Save(C042 entity)
Contract.Requires(entity != null);
public void Delete(C042_CondicaoPagamento entity)
Contract.Requires(entity != null);
在另一个项目中,我的模型实现了接口,如果我调用 this.Save(null) 在任何方法中,都会生成警告。 在我的 ViewModel 中,如果我调用上面相同的方法:this.Save(null),则不会生成警告,但是当我运行应用程序时,上面的行会引发 Contract 异常。
我的方法有什么问题吗?
提前致谢。
我又做了一个例子,我觉得大家比较容易理解:
我在类库项目中创建了以下类:
public static class StringExtensions
public static string TrimAfter(string value, string suffix)
Contract.Requires(suffix != (string)null);
Contract.Requires(!string.IsNullOrEmpty(suffix));
Contract.Requires(value != null);
var index = value.IndexOf(suffix);
if (index < 0)
return value;
return value.Substring(0, index);
当我从如下的 WPF 项目中调用它时:
CodeDigging.StringExtensions.TrimAfter(null, null);
我没有收到关于合同不完整的警告。
这是我的问题,我希望现在更清楚了。
谢谢。
【问题讨论】:
你能把你的问题说得更具体一些吗? 您收到的具体警告是什么? 对不起,我不是很清楚。我的问题是,当我在 ViewModel 中调用 this.Save(null) 时,静态检查不起作用,就在 Model 中。 我从包含更多内容的代码中复制而来,因此我更改了一些内容以使其更具可读性,其中 c042 应该是实体。 类的实现是什么样的?您是否覆盖保存和删除?您可能必须在抽象基类中将它们声明为虚拟的。或者为什么 C042_Model_Contracts 是抽象的? 【参考方案1】:我想你错过了界面上的 ContractClass 属性:
[ContractClass(typeof(C042_Model_Contracts)]
public interface IC042_Model
void Save(C042 entity);
void Delete(C042 entity);
关于代码合约有很好的描述here
【讨论】:
我在两个类中都添加了属性。正如我之前所说,在模型中会出现波浪形,但在我的 ViewModel 中不会。以上是关于代码合约和 MVVM的主要内容,如果未能解决你的问题,请参考以下文章
第一行代码:以太坊-使用Solidity语言开发和测试智能合约