use*_*565 3 oop smalltalk visualworks pharo dolphin-smalltalk
我在Pharo Smalltalk中编写类,但我认为这个问题对其他Smalltalk实现有效.
我知道一种实现具有特定属性的实例的方法是为实例创建提供类方法,然后建议使用类创建方法.但是任何用户都知道可以随时使用new或basicNew.
我想到使new和basicNew无效引发异常,但这似乎是太过激烈的措施,有时我可能需要创建实例来调试.
是否有其他库或机制来强制执行这些特定属性?
那没有.这很好.
以下是您可能会遵循的一些方法:
通过为它们提供验证来确保您的对象有效.这是一个非常广泛的主题,所以我只想说一个验证框架能够检查你的对象,并以某种方式使它明确表达他们无法遵守的任何规则.
根据您正在执行的操作,您可以在对象生成或修改时限制对GUI的验证.但是,更复杂的方法应该允许任何对象决定它是否有效(在给定的上下文中).
从实例端协议中排除单个setter.只提供多个关键字设置器,如果缺少或不合适,将会失败.这意味着您将提供类似的方法Point >> #x:y:,但没有Poit >> #x:或Point >> #y:.
如示例所示,您会发现很难完全采用这种做法,因为基本类不遵循这种风格.另请注意,这种做法需要某种验证,因为只检查notNil通常太天真.
在需要解决这些问题之前,请放松并不做任何事.
换句话说,直到您的软件进化到足以引起您注意其对象的创建和更改方式为止.
我声称事情的原因很好,因为Smalltalk传统上倾向于开放而不是安全,它促进甚至鼓励人们进行实验,即使是以"错误"的方式.旨在防止物体被破坏的每个功能迟早都会阻止您修复它们.更重要的是,它们会消耗大量能量,否则这些能量将被用于更高效的目标.