如果你觉得必须要有非默认的Equals或GetHashCode实现,请考虑创建一个IEqualityComparer<T>。它不属于数据模型,所以其他人可以理解你的做法是非标准的行为。
同样,你可能希望为排序提供一个或多个Comparer<T>类。
ICloneable
众所周知,我们不应该实现ICloneable接口,因为我们从来都不知道一个对象克隆是深拷贝还是浅拷贝。
当然,这并不意味着你绝对不应该提供克隆方法。如果你选择提供克隆方法,就应该非常清楚地了解被克隆的内容。或者可以将其称为ShallowClone或DeepClone。
总结性思考
模型是构建和理解应用程序的基础。你花在弥补缺口上的时间,比如不一致的命名约定、缺少的特性和不正确实现的接口,最终都会获得回报。
关于作者
Jonathan Allen 在90年代后期开始为一家健康诊所开发MIS项目,将逐步从Access和Excel迁移成为一个企业解决方案。在为金融行业开发自动交易系统五年后,他成为各种项目的顾问,其中包括机器人仓库的用户界面、癌症研究软件的中间层以及大型房地产保险公司的大数据解决方案。在空闲时间,他喜欢学习有关16世纪武术的东西。
查看英文原文:Models and Their Interfaces in C# API Design
总结










