Last active
March 13, 2018 01:26
-
-
Save jsdecena/38a7fcc0b69df765537b700111655f44 to your computer and use it in GitHub Desktop.
Refactoring sample
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$receivedMessages = collect($user->receivedMessages)->sortByDesc($sort); // current code | |
// Refactor code | |
$user = User::find(1); | |
$userRepository = new UserRepository($user); | |
$receivedMessages = $userRepository->receivedMessages('desc'); | |
dd($receivedMessages); // message Collection; Same output with the current code | |
/** | |
* Benefits: | |
* - Reusable code | |
* - Testable code | |
* Can have: | |
* - Message repository that will get the owner (user) of the message: $message->user | |
* - Unit and Feature tests | |
*/ | |
-------------- | |
//User Model | |
class User extends Model { | |
... | |
public function messages() | |
{ | |
return $this->hasMany(Message::class); | |
} | |
} | |
//Message Model | |
class Message extends Model { | |
... | |
public function user() | |
{ | |
return $this->belongsTo(User::class); | |
} | |
} | |
//User Repository Class | |
use App\User; | |
use Illuminate\Support\Collection; | |
class UserRepository { | |
protected $model; | |
public __construct(User $user) { | |
$this->model = $user; | |
} | |
public function receivedMessages(string $sort) : Collection | |
{ | |
return $this->model->messages()->orderBy('id', $sort)->get(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment