一个对象的方法是否可以作用于自己?
我不知道在哪里放一些方法。一个对象的方法是否可以作用于自己?
假设我想发送电子邮件。
我应该选择哪一个下列选项:
email = new Email("title", "adress", "body");
email.send();
或
email = new Email("title", "adress", "body");
Postman.send(email);
因为如何邮件发送自己?是不是更好有一个*对象,处理所有的电子邮件,因为然后他可以规范的事情,如在特定时间发送所有电子邮件,排序邮件,删除邮件等。
此外,如果我想删除一个用户,我应该怎么办:
user.delete();
或
administrator.delete(user);
请分享你如何知道在哪里放置方法的想法。
我不同意阿森。一个电子邮件可以发送自己,而这正是代码应该生活的地方。那是什么方法:可以在对象上执行的操作。
但是请注意,您的方法并不相互矛盾。一封电子邮件的send
操作可能很容易包含将其自身添加到邮递员发送队列的代码,如果您想要规范操作,那可能是个好主意。但是,没有理由不对电子邮件类使用send
方法。
在Ruby中我可以这样做:
email = Email.deliver(recipient, subject, message)
把对应的类会是这个样子:
class Email
def self.deliver(recipient, subject, message)
# Do stuff to send mail
end
end
这是干净的,易于使用。
在删除问题上:删除要删除的对象。所以@user.delete
会是最好的。如果您想注册删除用户的管理员:@user.delete_by(@admin)
所有对电子邮件起作用的合理方法都应该放在电子邮件类中,以方便您班级的用户。但电子邮件对象不应包含与电子邮件内容相关的任何字段(单个责任原则)。
因此,我建议这样的:
class Email
def email(postman)
postman.send(self)
end
end
在静态类型语言,邮递员参数的类型应该绝对是一个接口。
我同意丹尼尔。
在你的第一个例子之后,很多常用的小部件也会有像你提到的“集合”管理器,但它们并不一定。 Tabs小部件可以显示/隐藏其自己的一个选项卡,而不必为每个选项卡指定一个新的Tab类。
我相信功能应该被封装。然而,删除用户的例子稍有不同。在User类上有一个删除方法可以完成像清除自己的内部变量,设置等,但不会删除对自身的引用。我发现删除方法更适合基于集合的类。我本不会把删除方法放在管理类上,而是放在用户“集合”类上。
function Users(){
var users = [];
this.add = function(user){
// add user code
users.push(new User(user));
}
this.remove = function(user){
// remove user code and remove it from array
}
}
我不太怎么看一个对象可以完全添加/删除自身,它是有道理的我有在收藏级别的功能。除此之外,我会说它应该被封装在它所指的类中。