我正在嘗試創建一個乾淨的服務層,其中服務層作用於一個或多個存儲庫,並且每個存儲庫都在其自己的雄辯模型上運行。如何從服務層分離雄辯?
例如,我可以具有:
ForumService
|
+-- PostRepo extends PostInterface
| |
| +-- Post (Eloquent)
|
+-- UserRepo extends UserInterface
|
+-- User (Eloquent)
每個服務定義它經由ioc
需要的依賴。所以,像這樣:
// MessageService
// ..
public function __construct(UserInterface $userRepository,
MessageInterface $messageRepository) {
// ..
}
我的倉庫通過其綁定在各自的服務供應商解決,如:
class UserRepositoryServiceProvider extends ServiceProvider
{
public function register()
{
$this->app>bind(
'App\Models\Repositories\User\UserInterface',
'App\Models\Repositories\User\UserRepository');
}
}
這一切工作就好了。每個服務都可以獲得它需要的存儲庫。
爲了使服務層不受任何依賴於雄辯的影響,任何留下回購的東西都是一個簡單的,不可變的數據對象。
在日常語言要點:
- 只有回購的談話,以自己的模式直接
- 回購迴歸簡單的,一成不變的,數據對象
- 服務行動,以配合多種回購的一起和現在簡化的對象返回到控制器,最終還是視圖。
然而我不能想出的服務或回購層乾淨的模式associate
雄辯模型給對方。
鑑於Post
模型具有belongsTo(User::class)
關係,我如何在Post
存儲庫層乾淨地創建該關係。
我曾嘗試:
public function associate($authorId)
{
$post->author()->associate($authorId);
}
但associate
期望一個user
雄辯的對象,而不僅僅是一個ID。我可以這樣做:
public function associate($authorId)
{
$post->from()->associate($userRepo->findEloquent($authorId));
}
但我覺得我正在浮出水面模型,進入一個不應該作用於其上的回購。
那麼您還有什麼問題嗎?或者答案是你問的? –