我试图在我的代码中更好地实现 OOP 和依赖注入,并遇到以下问题。
我为涉及雇主和公司的客户提供服务(使用相应的模型、映射器和数据库表):
class Service
{
protected $clientId;
protected $client;
protected $employerId;
protected $employer;
protected $companyId;
protected $company;
public function setClient(Client $client)
{
$this->client = $client;
}
public function setEmployer(Employer $client)
{
$this->employer = $employer;
}
public function setCompany(Company $company)
{
$this->company = $company;
}
// more
}
为了获得一个 Service 对象,我首先实例化 Service 对象,该对象从数据库中返回一个 clientId。使用 clientId 实例化一个 Client 对象(并将其附加到服务),这涉及再次访问数据库。雇主和公司也一样。
我可以通过连接从数据库中一次性检索服务、客户、雇主和公司,但这会使我的映射器更加复杂。例如,客户、雇主和公司都有地址,所以我需要为这些列加上别名并将它们映射到各自的模型。这比单独从每个表中检索所有列并将它们单独映射到每个模型(例如,使用一些逻辑将带下划线的列转换为 ZF camelCase)、重用我的客户、雇主和公司映射器更不干净。
是否有最佳实践解决方案,还是取决于个人喜好和情况(性能与可维护性)?