如何防止方法被添加到类中?

本文关键字:添加 何防止 方法 | 更新日期: 2023-09-27 18:13:30

我试图找出是否有一种方法可以阻止函数/方法被添加(编辑:由其他开发人员)到一个类的情况下,对象是一个模型或DTO,不应该包含方法(防止"滥用"模型/DTO由其他人,谁可能会尝试添加'助手'方法等)。

有办法做到这一点吗?

如何防止方法被添加到类中?

使用反射并编写一个单元测试,如果模型类有方法,则该单元测试会失败。

用自定义属性标记所有的模型类。然后进行单元测试,使用反射来加载给定的程序集,迭代该程序集中的所有类,并检查标有model属性的类是否没有方法。

我相信你是在试图解决一个程序问题的代码,你应该使用通信。

你的同事(我假设)正在以"完全信任"权限操作代码文件。如果他们打破了这一特权,你应该展开对话。利用这个变化作为一个机会,让他们了解预期的设计。也许他们是正确的,你会受到教育!

我建议简单地在类名中明确预期的设计,并加上说明预期性质的注释。也许可以引用告知类的设计文档

您不能阻止任何对您的代码库具有完全写访问权限的人这样做。要避免发生,您可以做的唯一两件事是为FXCop创建一些代码分析规则,如Christian所提到的。K在注释中,或者通过编写您的DTO类,使它无疑是一个不应该有任何方法的DTO,通过使用类的明确名称,如果这还不够,提供一些代码注释,通知编码员不要这样做。

然而,如果使用集合,您可能需要某种方法,例如,如果您的DTO的两个实例相等,则需要某种比较,因此您必须提供至少一个Equals -和GetHashCode -方法。

您不需要使用结构体来阻止对类的添加。可以使用sealed关键字

public sealed class MyDTOObject { ... }

现在,你既不能固有一个类,也不能防止继承(这就是你所要求的)。继承MyDTOObject的事实是创建一个基于的的新类,该类不等于、限制或以任何方式由MyDTOObject的实现定义。

您可以使用abstract类,强制派生类实现某些方法,但不能使用其他方法。

如果您想防止其他人从您的类派生并实现助手方法,您必须使用sealed关键字,或者将类标记为内部。

您可以通过标记final来防止类被扩展或继承,这样就没有人能够扩展您的类,从而无法添加任何行为。但是停下来问问你自己,你是否想要这样做,因为这样你就签署了一个无形的契约,这个类所需要的一切都写在这个类中,这个类不需要再添加任何东西。

要清楚,我是在Java上下文中讨论的。