我想了解是否有一种方法可以阻止其他开发人员向类中添加函数/方法(编辑:其他开发人员),对于对象是模型或DTO的情况,这些对象不应包含方法(以防止他人“滥用”模型/DTO,可能会尝试添加“助手”方法等)。
有没有办法实现这一点?
我想了解是否有一种方法可以阻止其他开发人员向类中添加函数/方法(编辑:其他开发人员),对于对象是模型或DTO的情况,这些对象不应包含方法(以防止他人“滥用”模型/DTO,可能会尝试添加“助手”方法等)。
有没有办法实现这一点?
使用反射并编写一个单元测试,如果模型类具有方法,则该单元测试将失败。
使用自定义属性标记所有模型类。然后编写一个单元测试,使用反射加载给定程序集,迭代该程序集中的所有类,并检查标记有模型属性的类是否没有方法。这应该是相当简单的使用反射来实现。
您的同事(我假设)正在以“完全信任”的权限操作代码文件。如果他们破坏了这个权限,您应该开展对话。利用这次变更的机会向他们介绍预期的设计并教育他们。也许他们是正确的,您将从中受益!
我建议在类名中明确表明预期的设计,并使用注释说明其预期的性质。可以引用为这个类提供信息的设计文档。
你不需要使用结构体来防止对类的添加。你可以使用 sealed
关键字。
public sealed class MyDTOObject { ... }
MyDTOObject
就是创建了一个新的类,它不等于、受限于或以任何方式由MyDTOObject
的实现定义。abstract
类来强制派生类实现某些方法,但反过来则不行。sealed
关键字,或将类标记为internal。你可以通过将类标记为final来防止该类被扩展或继承,这样就没有人能够扩展你的类,因此也无法添加任何行为。但是请停下来问问自己是否要这样做,因为那样你就签署了一个隐形合同,即该类所需的所有内容都已写入该类中,而且该类不需要进一步添加。
明确一点,我是在Java上下文中谈论的。
/* 嘿,你,别这样做 */
并打耳光给那些这样做的人之外,没有办法让编译器强制执行这一点。 - Asad Saeeduddin