我认为这在很大程度上取决于上下文和选择一个有意义的隐喻。例如 ActiveRecord 使用类方法“find”来查找数据库中的记录,这是一个比“输入 user_id,输出用户”更有意义的想法。例如:
User.find(user_id)
User.find_by_email(user_email)
对于转换,我通常喜欢编写转换方法以使其易于在高阶函数中使用。例如在 ruby 中,转换通常使用to_*
实例方法完成,例如将 a 转换Foo
为 a对所有 fooBar
都有一个to_bar
方法是有意义的,因此您可以编写:
foo = Foo.new(...) # make a new Foo
bar = foo.to_bar # convert it to a Bar
然后要转换一堆 foo,您可以简单地:
bars = foos.map(&:to_bar)
Ruby 也倾向于Foo.parse(str)
将字符串转换为对象。
对于 javascript,我喜欢使用类方法(我从标准 ml 中获得),例如:
Foo.toBar = function(foo) {
return new Bar(...);
};
然后你也可以映射它(在这个例子中使用下划线):
var bars = _.map(foos, Foo.toBar);
标准 ML 约定是结构(类)方法。示例 fn 类型:
Foo.toBar : foo -> bar
Foo.fromBar : bar -> foo
你会像这样使用它:
val bar = Foo.toBar foo;
val bars = map Foo.toBar foos;