I have a model *Order* (the model how it looks in [CakePhp](http://book.cakephp.org/2.0/en/models.html#models)), which has a property *status*. This property changed while *Order* goes through processing steps. Currently status changing works in this way: 

I have related model *OrderStatus*, where I have a set of possible statuses, like

```
<?php
OrderStatus::STARTED
...
OrderStatus::PAID
...
OrderStatus::PROCESSED

```

in *Order* model I have a method to change *status*:

```
<?php
/**
 * Save new status value for Order.
 *  
 * @param  int $id Order id
 * @param  int $status   New status value
 * @param  int $current  [Optional] Current status value
 * @return boolean
 */
public function changeStatus($id, $status, $current = null) {
    // some code
}

```

and when I need to change it somewhere in Controller, or another model I just call it like:

```
<?php
$Order->changeStatus($id, OrderStatus::PAID);

```

So far everything works fine with this solution, but now I'm thinking how correct this approach is. What if tomorrow I'll decide to do some additional actions on specific status changing, so I have to add some additional logic and extend changeStatus method. Also what I don't really like is that I have to use *OrderStatus* constants everywhere I need to change order status, so it spreads throughout code.

Isn't more correct to add separate methods to set each new status, use *OrderStatus* constans within these methods and put all related logic there too, and change statuses outside *Order* model in a way like:

```
<?php
$Order->makePaid($id);
// and 
$Order->makeProcessed($id);

```

Which one is better from OOP principles and best practices perspective, or maybe there is another better solution.