我正在研究一个SelectorClassifierAssistant
对象,该对象建议对方法进行可能的分类。
到目前为止,我已实施以下策略:
ifTrue: [^#accessing]
)并且,如果以上所有都失败(即建议为空):
我可以使用其他已知的启发式方法吗?
--- --- EDIT
仅从同一类发送的选择器 - > #private(@Carlos E. Ferro)
已知选择器(#=#hash等 - > #comparing等)
空类别(如果类别为空,则可能是用户刚添加它以对下一个选择器进行分类。)
答案 0 :(得分:1)
不确定。以下是一些其他众所周知的模式:
实例创建
newStringBrick
^ GLMStringBrick new
默认值
defaultDotsText
^ '...'
延迟初始化
items
^items ifNil: [ items := OrderedCollection new ]
当然,还有很多框架/应用程序特定的模式。 Sunit单元测试,海边应用,magritte描述都有特定的模式。一个非常简单的是magritte-description
descriptionArticle
<magritteDescription>
^QCToOneOptionRelationDescription new
accessor: #article;
label: 'Article';
options: self possibleArticles;
priority: 40;
classes: QCArticle allSubclasses;
yourself.
[编辑]然后是启发式:另一个可能很好的建议是我最后使用的那个,或者如果你看到一个短暂的重复周期,那个适合的那个。
是否可以直接为扩展方法找到一个好的类别?
答案 1 :(得分:1)
我认为在您的上一个选项中,不是查看方法中发送的消息类别进行分类,而是最好查找此消息的发件人类别。
这是我经常使用的启发式方法。
我找到的原因是,从这个调用的方法最有可能是一般服务,但是这个方法的发件人将其视为服务并定义了一个使用此消息的“感兴趣区域”。
----编辑----
另一个相关的启发式,非常简单:如果所有发件人都是本地的(这个类或子类),那么“私有”是一个很好的候选者来对它进行分类。没有发件人的方法通常是私人服务。