关于面向对象和MVC设计的一些具体问题

时间:2010-03-28 20:11:26

标签: php model-view-controller oop

我有两个对象,用户和邮件。用户创建Mail对象并将其发送给其他用户。

  1. 如果我想获取用户的所有邮件,我可以创建一个方法,如GetMail(),它将返回该用户拥有的Mail对象数组。
  2. 但是,如果我想在整个系统中收到所有邮件,那么“类型”的对象会对此负责吗?
  3. 为了解决这个问题,我通常会创建一个Manager,它是一个负责处理特定类型对象集合的对象。 MailManager处理Mail对象的集合。 GetMailForUser()是一种方法,GetAllMail()是另一种方法。 User对象调用MailManager并执行GetMailForUser(me)。这是愚蠢的吗?
  4. 当用户执行控制器CreateMail时,会创建一个新的Mail对象实例。 Mail对象看到它正在创建一个类型为“已发送”的新邮件,它决定继续为收件人创建第二个邮件对象,类型为“已接收”。创建一个Mail对象会触发创建第二个Mail对象。这是愚蠢的吗?控制器是应该创建两个Mail对象,还是仅创建第一个'已发送'对象?
  5. 当两个用户是朋友时,该关联存储在关系表中。我为关系使用一个简单的对象。 RelationshipManager有一个名为GetFriendsForUser()的方法。 User对象有一个方法GetFriends(),它调用RelationshipManager。这是愚蠢的吗?

1 个答案:

答案 0 :(得分:1)

  1. 恕我直言,根据OOP,getAllMail是一个消息,可能是合理的放在Mail类作为静态方法。在集合不是一等公民的语言中,类往往被用作具有相同行为,状态或身份的对象集。很自然地,为了获得某些类的对象集,你必须要求它为它设置。
  2. 绝对不是傻瓜,它总是取决于背景。如果您需要一个单独的单例类来管理对象,您应该问自己。你会将这个对象与Mail类分开使用吗?你想继承它还是使用其他一些oo机制?
  3. 嗯,这是一个我无法真正掌握的设计,你能说出它给你带来的好处吗?我不确切知道你的上下文是什么,但我可能只有两个用户关联的Mail对象,一个用于发件人,另一个用于收件人。这样可以节省一半的对象,并便于通过对象图从一个用户通过邮件导航到其他用户。
  4. 再次,取决于您从分离中获得的背景和优势。