我试图找出是否有办法阻止函数/方法被添加(编辑:由其他开发人员)到类的对象的情况是一个模型或DTO,不应包含方法(以防止其他人滥用模特/ DTO,他们可能会尝试添加'帮助'方法等)。
有没有办法实现这个目标?
答案 0 :(得分:5)
如果模型类具有方法,则使用反射并编写单元测试失败。
使用自定义属性标记所有模型类。然后进行单元测试,使用反射来加载给定的程序集,迭代该程序集中的所有类,并检查标记有model属性的类是否没有方法。这应该是使用反射相当直接的。
答案 1 :(得分:3)
我相信您正在尝试解决使用通信的代码的程序问题。
您的同事(我假设)正在使用“完全信任”权限操作代码文件。如果他们打破了这种特权,你应该打开一个对话。将更改作为一个机会,让他们了解预期的设计。也许他们是正确的,你将接受教育!
我建议简单地在课程名称中明确设计预期的设计,并注明说明预期的性质。也许引用通知班级的设计文件。
答案 2 :(得分:2)
您无法阻碍对您的代码库具有完全写入权限的任何人。您可以做的唯一两件事避免它是为评论中的 Christian.K 提及的FXCop创建一些CodeAnalysis规则,或者通过编写DTO类来创建毫无疑问,DTO不应该使用任何方法通过使用该类的明确名称,如果这还不够,请提供一些代码注释,通知编码器不要这样做。
但是,如果使用集合,则可能需要某种方法,例如如果您的DTO的两个实例相等,则需要进行某种比较,因此您必须至少提供Equals
- 和GetHashCode
- 方法。
答案 3 :(得分:0)
您不需要使用结构来阻止添加类。您可以使用sealed
关键字
public sealed class MyDTOObject { ... }
现在,你不能固有一个类,也不能阻止继承(这基本上就是你所要求的)。继承MyDTOObject
的事实是创建一个新类基于不等于,限制或由MyDTOObject
的实现以任何方式定义。< / p>
您可以使用abstract
类来强制派生类实现某些方法,但不能反过来。
如果您想阻止他人从您的类派生并实施帮助方法,您必须使用sealed
关键字,或将该类标记为内部。
答案 4 :(得分:0)
您可以通过标记 final 来阻止该类被扩展或继承,这样就没有人能够扩展您的类,因此无法添加任何行为。但是停下来问问自己是否要这样做,因为那时你将签署一个无形的合同,这个类所需的一切都写在类中,而且这个类不需要进一步添加。
要清楚,我在Java语境中谈论。