In which class would you put these methods?

If I have a class Userand its account can be suspended by adding an entry to the table suspensions, which of these class / method signatures, in your opinion, is more appropriate?

User::suspend($reason, $expiryDate);
Suspension::add($userid, $reason, $expiryDate);

This is a simple example, but I have this situation throughout my application. On the one hand, I would like to make it a method of the User object, since the action being performed is directly related to this user object, but, on the other hand, its method on the suspension object seems a little cleaner.

What do you think?

+3
source share
10 answers

you pause the user.

User.Suspend()

User.Suspend "" . , , , .

+10

. OO . , () ( ). , , , . , User.

: ? , , .

, / . , , User. , Suspension . , User.

+3

, , , User.

, Suspensions, , :

class SuspensionManager
suspendUser(....)
getSuspendedUser(...)
....
+2

* 100% , , /

. , OOAD. , User Suspension . User , ( ), Suspension , ( ). UserSuspention, .

OOAD SOLID. , Suspension , SRP ( )..., .

API :


  public class UserSuspension
  {
    public void SuspendUser(User user, Suspension suspension) {  ...   }
    public void SuspendUser(Guid userId, string reason, DateTime expiryDate) { ... }
  }

+2

Suspension::add(), . , , , (.. , ), : User::suspend(), , a "suspended" User, - - .

, , User::suspend() , , , User suspended, , , .. , , User , .

+1

-. , , .

, , :

User user = GetUser($userId); // unnecessary database hit?
user.suspend(reason, expiryDate);
0

Account, User Suspension

0

.

, . , , , .

, , . , , suspend - , .

? .

- , "AccountAction" . , AccountAction applyTo, .

, , persitance ORM .

. OO - , . , , .

, . , , , , , , , .

0

, .

User:: suspend() , ( ) , . .

0

, , , . ? ? , //, . , . , , . , , , .

0
source

Source: https://habr.com/ru/post/1716008/


All Articles