你会把这些方法放在哪个班级?

rye*_*guy 3 oop

如果我有一个User类,并且可以通过在suspensions表中添加条目来暂停其帐户,那么您认为哪个类/方法签名更合适?

User::suspend($reason, $expiryDate);
Suspension::add($userid, $reason, $expiryDate);
Run Code Online (Sandbox Code Playgroud)

这是一个简单的例子,但我在整个应用程序中到处都有这种情况.一方面,我想让它成为User对象的一个​​方法,因为执行的动作与该用户对象本身直接相关,但另一方面使它成为悬挂对象上的方法似乎更清晰.

你怎么看?

Jas*_*son 10

暂停一个用户.

User.Suspend()
Run Code Online (Sandbox Code Playgroud)

在您的User.Suspend方法中,您实际上可以将它们添加到"暂停"表中,或者调用暂停对象.这将导致更清晰的界面,因为您所要做的就是调用一种方法.

  • @ Meta-Knight:我不确定耦合会有多紧.特别是如果您正在利用DI和/或接口来保持概念独立于实现. (2认同)
  • @nelson - 我的想法完全正确.如果一个对象仅作为另一个对象的辅助对象,它们的耦合可以根据需要紧密,因为它们是一个包处理. (2认同)