这是最重要的规则之一,有助于让您的课程保持专注并且更易于维护。你见过多少次:
class XXXRepository
{
public function findOneByCode($code);
public function findOneByParams($params);
public function findAllByParams($params);
public function findActive($params);
public function findForProductList($params);
... 5000 lines of spaghetti
}
取而代之的是,拥抱接口,使您的应用程序依赖于抽象,而不是实现细节:
interface ProductByCode
{
public function findByCode(string $code): ?Product;
}
interface ProductsByName
{
public function findByName(string $name): array;
}
使用依赖注入组件,您可以将接口别名为其实现。每个接口都去实现。您可以使用一个抽象类,该类将帮助您通过您选择的框架与持久层进行通信。
final class ProductByCodeRepository extends BaseRepository implements ProductByCode
{
public function findByCode(string $code): ?Product
{
return $this->findOneBy(['code' => $code]);
}
}