コードに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オブジェクトを取得するには、最初にデータベースからclientIdを返すServiceオブジェクトをインスタンス化します。clientIdを使用して、データベースに再度アクセスすることを含むClientオブジェクトをインスタンス化します(そしてそれをサービスにアタッチします)。雇用主と会社についても同じです。
結合を使用してデータベースからサービス、クライアント、雇用者、会社を一度に取得することもできますが、それではマッパーがより複雑になります。たとえば、クライアント、雇用主、企業はすべて住所を持っているので、これらの列にエイリアスを付けて、それぞれのモデルにマッピングする必要があります。これは、各テーブルからすべての列を個別に取得し、それらを各モデルに個別にマップして(たとえば、下線付きの列をZFキャメルケースに変換するロジックを使用して)、クライアント、雇用者、および会社のマッパーを再利用するよりもクリーンではありません。
ベストプラクティスの解決策はありますか、それとも個人の好みや状況(パフォーマンスと保守性)次第ですか?