와 롤백은 다음 호출로 원격 API있다 :디자인/건축 질문 : 원격 서비스 예를 들어
getGroupCapacity(group)
setGroupCapacity(group, quantity)
getNumberOfItemsInGroup(group)
addItemToGroup(group, item)
deleteItemFromGroup(group, item)
작업은 어떤 그룹에 일부 항목을 추가하는 것입니다. 그룹에는 용량이 있습니다. 먼저 그룹이 가득 차 있지 않은지 확인해야합니다. 그럴 경우 용량을 늘린 다음 항목을 추가하십시오. (예를 들어, API는 SOAP과 노출) 이런 식으로 뭔가 :
function add_item($group, $item) {
$soap = new SoapClient(...);
$capacity = $soap->getGroupCapacity($group);
$itemsInGroup = $soap->getNumberOfItemsInGroup($group);
if ($itemsInGroup == $capacity) {
$soap->setGroupCapacity($group, $capacity + 1);
}
$soap->addItemToGroup($group, $item);
}
이제 addItemToGroup이 실패한 경우 (항목이 나쁜) 무엇을? 그룹의 역량을 롤백해야합니다.
이제는 그룹에 10 개의 항목을 추가 한 다음 일부 속성이있는 항목을 추가해야합니다.이 모든 것을 단일 트랜잭션으로 추가해야합니다. 즉, 중간에 오류가 발생하면 이전 상태로 모든 것을 롤백해야합니다.
IF 및 스파게티 코드가 없어도 가능합니까? 이러한 작업을 단순화하는 라이브러리, 프레임 워크, 패턴 또는 아키텍처 결정 (PHP)
UPD : SOAP은 하나의 예입니다. 솔루션은 TCP가 아닌 모든 서비스에도 적합해야합니다. 문제의 핵심은 비 트랜잭션 API를 사용하여 트랜잭션 동작을 구성하는 방법입니다.
UPD2 :이 문제는 모든 프로그래밍 언어에서 동일하다고 생각합니다. 따라서 PHP뿐 아니라 모든 대답을 환영합니다.
미리 감사드립니다.
죄송합니다. 이것이 도움이되는 방식을 이해할 수 없습니다. 어디에서 예외를 찾아서 롤백 코드를 사용해야합니까? 예, 어쩌면? :-) 감사합니다 – Qwerty