Config\Services
是一個用于減少單例上大量代碼開發的類。不幸的是,我犯了一個錯誤。
從 getShared 獲取 repositoryFacade 時,
Services::repositoryFacade(Services::userRepository(), TRUE);
代碼將失敗并說:
Config\Services::repositoryFacade(): Return value must be of type App\Domain\Core\IRepositoryFacade, null returned
以下代碼已設定在app/Config/Service.php
public static function repositoryFacade(IRepository $repository, bool $getShared = false): IRepositoryFacade{
if ($getShared) {
return self::getSharedInstance('resourceFacade');
}
return new RepositoryFacade($repository);
}
public static function userRepository(bool $getShared = true): IRepository
{
if ($getShared) {
return self::getSharedInstance('userRepository');
}
return new UserRepository(model(UserModel::class));
}
RepositoryFacade
是在基礎設施層IRepository
一個個服務領域介面,而UserRepository
在基礎設施層是一個具體的類,它的職責是讓RepositoryFacade
執行ORM,不涉及到領域層。
getShared 一點用都沒有嗎?TRUE
洗掉值時沒有錯誤。
Services::repositoryFacade(Services::userRepository());
uj5u.com熱心網友回復:
這行代碼在邏輯上是不正確的。
Services::repositoryFacade(Services::userRepository(), TRUE);
將其更改為以下效果完美。
Services::repositoryFacade(Services::userRepository(TRUE));
可以使多個RepositoryFacade
類實體為 Repository 實體提供服務,例如UserRepository
, ProductRepository
,因此我們不需要獲取相同的 RepositoryFacade 實體。
UserRepository 應該始終保持不變。因此,我們可以通過以下方式獲得相同的 UserRepository 實體:
Services::userRepository(TRUE)
如果需要多次使用帶有 UserRepository 的外觀,只需
$facade = Services::repositoryFacade(Services::userRepository(TRUE));
// use multiple times with the facade
$result = $facade->findById(5);
if (!empty($result)) $facade->delete(5);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/470294.html
上一篇:我從github克隆了一個專案,在localhost上運行后出現此錯誤-找不到類“Redis”
下一篇:在c中使用定義效率低下?