私は3つのテーブルを持っています、
Business:
id
name
Office:
id
name
business_id
Employee:
id
name
office_id
Employee は office_id を外部キーとして持ち、Office は business_id を外部キーとして持ちます。
それぞれに関連するドメイン オブジェクト/エンティティと、それぞれに関連するデータベース マッパー オブジェクトがあります。
ビジネス名、オフィス名、従業員名から提供されたときに新しい従業員を挿入する方法は?
最初に、ロジックは次のようになるはずだと思います。
$businessMapper = new businessMapper();
$business = $businessMapper->findBusinessByName($business_name);
if ($business == false) {
$business = new businessEntity(array(
'businessName' => $business_name,
));
$businessMapper->save($business);
}
$officeMapper = new officeMapper();
$office = $officeMapper->getOfficeByName($office_name, $business);
.......etc.......
しかし、その後、新しいビジネスを保存する必要がある場合、オフィスや従業員を確保する方法がないため、それらを取得しようとするのは無駄なクエリであることに気付きました. そこで、if/else 構造を作成する必要があると考えました。
get business entity by business_name
if ($business == false) {
create business entity
save business entity
create office entity
save office entity
create employee entity
save employee entity
} else {
get office entity by office_name + business_id
if (office == false) {
create office entity
save office entity
create employee entity
save employee entity
} else {
......etc......
}
}
しかし、非常に多くの重複したロジックがあり、非常に拡張性が低く、汚れています。
では、それはどのように達成されるべきでしょうか?
そして第二に、ロジックはどこに行くべきですか?従業員のマッパーに入るべきですか?または「従業員の追加」アクションのコントローラーですか、それとも新しいモデルが必要ですか?
フレームワークとして Zend を使用していますが、質問はすべての MVC スタイル構造に当てはまると思いますので、フレームワークの好みに関係なく、お気軽に回答してください :)