Skip to content

Instantly share code, notes, and snippets.

@jsdecena
Last active March 13, 2018 01:26
Show Gist options
  • Save jsdecena/38a7fcc0b69df765537b700111655f44 to your computer and use it in GitHub Desktop.
Save jsdecena/38a7fcc0b69df765537b700111655f44 to your computer and use it in GitHub Desktop.
Refactoring sample
<?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