Ich versuche eine Clean-Cut-Service-Schicht zu erstellen, wobei die Service-Schicht auf einem oder mehreren Repositories agiert und jedes Repository auf seinem eigenen eloquenten Modell agiert.Wie eloquent von der Service-Schicht zu entkoppeln?
Zum Beispiel kann ich:
ForumService
|
+-- PostRepo extends PostInterface
| |
| +-- Post (Eloquent)
|
+-- UserRepo extends UserInterface
|
+-- User (Eloquent)
Jeder Dienst definiert es Abhängigkeiten über ioc
erforderlich ist. Also, so etwas wie:
class UserRepositoryServiceProvider extends ServiceProvider
{
public function register()
{
$this->app>bind(
'App\Models\Repositories\User\UserInterface',
'App\Models\Repositories\User\UserRepository');
}
}
Das alles funktioniert ganz gut:
// MessageService
// ..
public function __construct(UserInterface $userRepository,
MessageInterface $messageRepository) {
// ..
}
sind meine Repositories über ihre Bindungen in ihren jeweiligen Service-Provider, wie aufgelöst. Jeder Dienst erhält die erforderlichen Repositories.
Um die Serviceebene von jeder spezifischen Abhängigkeit von eloquent zu befreien, ist alles, was ein Repo verlässt, ein einfaches, unveränderliches Datenobjekt.
Schlüsselpunkte in der Alltagssprache:
- Nur die direkt , um ihre eigenen Modelle Rede Repo
- Repo Rückkehr einfach, unveränderlich, Datenobjekte
- Dienstleistungen mehrere Repo zusammen und Gegenwart binden handeln vereinfachte Objekte zurück zu den Controllern und schließlich zu den Ansichten.
jedoch Ich kann nicht mit einem sauberen Muster associate
eloquent Modelle miteinander im Dienst oder Repo-Schicht kommen.
Angesichts der Post
Modell hat eine belongsTo(User::class)
Beziehung, wie ich diese Beziehung auf der Post
Repository-Schicht sauber erstellen.
Ich habe versucht:
public function associate($authorId)
{
$post->author()->associate($authorId);
}
Aber associate
erwartet eine user
eloquent Objekt, nicht nur eine ID. Ich konnte tun:
public function associate($authorId)
{
$post->from()->associate($userRepo->findEloquent($authorId));
}
Aber ich fühle mich wie ich ein beredtes Modell bis zu einem Repo am Belag, der nicht auf sie handeln sollte.
Nun, haben Sie noch Fragen? oder die Antwort war, was du gefragt hast? –