4. OSI参照モデル
(c) 2015 Masashi Shinbara @shin1x1
7.Application
6. Presentation
5. Session
4.Transport
3. Network
2. Data link
1. Physical
5. MVC
(c) 2015 Masashi Shinbara @shin1x1
View
Controller
Model
6. MVCの悩み
7. CakePHP 1.x
(c) 2015 Masashi Shinbara @shin1x1
8. Fat Model
(c) 2015 Masashi Shinbara @shin1x1
• 1,000行を超える Model
• Model の役割が多すぎる
• DAO / バリデーション / ビジネスロジック等々
9. MVC
(c) 2015 Masashi Shinbara @shin1x1
View
Controller
Model
10. MVC + Service
(c) 2015 Masashi Shinbara @shin1x1
View
Controller
Model
Service
11. サービスレイヤを追加
(c) 2015 Masashi Shinbara @shin1x1
• Controller と Model の間のレイヤ
• ビジネスロジックとバリデーションを担う
• 1アクションメソッドに、1サービスクラス
• ビジネスロジックの共通化は、モデル or ビヘイビア
20. Service
public function update(Reservation $reservation, User $user, array $inputs)

{

if ($user->id !== $reservation->user_id) {

throw new PreconditionException('could_not_update');

}



DB::transaction(function () use ($user, $reservation, $inputs) {

$reservation->book->incrementInventory($reservation->quantity);

$this->store($reservation, $user, $inputs);

});

}
21. Service
public function update(Reservation $reservation, User $user, array $inputs)

{

if ($user->id !== $reservation->user_id) {

throw new PreconditionException('could_not_update');

}



DB::transaction(function () use ($user, $reservation, $inputs) {

$reservation->book->incrementInventory($reservation->quantity);

$this->store($reservation, $user, $inputs);

});

}
事前条件の検証
22. Service
public function update(Reservation $reservation, User $user, array $inputs)

{

if ($user->id !== $reservation->user_id) {

throw new PreconditionException('could_not_update');

}



DB::transaction(function () use ($user, $reservation, $inputs) {

$reservation->book->incrementInventory($reservation->quantity);

$this->store($reservation, $user, $inputs);

});

}
ビジネスロジック
Be the first to comment