2009-10-17 5 views
1

my previous 질문에 두 번째 기회를 주려고합니다. 나쁜 예를 선택한 것 같습니다.상태를 사용한 동작 후에 객체 상태가 변경됨

질문은 내가 뭔가를 사용하고 새로운 상태가 무엇을하고 있는지에 관련 되어도 개체가 여전히 바뀔 수있는 상황을 어떻게 다뤄야하는지입니다. 의사 코드에서

예 :

class Book 
    method 'addChapter': adds a chapter 

class Person 
    method 'readBook': read an object of class Book 

가 지금은 사람이 객체 참조에 의해 전달 될 것이다 적어도 PHP에서 책을 읽고 질문 할 때,이 책의 목적은 여전히 ​​변경할 수 있습니다. 그 사람이 이미 제 6 장을 읽는 동안 제 3 장과 4 장 사이에 장을 삽입 할 수 있습니다. 어떻게 이러한 상황을 처리 할 수 ​​있습니까?

+0

"읽는 동안 만지지 마십시오"또는 "업데이트 중입니다 : 읽지 않습니다"라는 상태를 추가하는 것과 같은 의미입니까 ?? – jldupont

+0

더 많은 것 : 안녕 '사람', 당신은 '책'을 읽었다 고 했지, 4 장에 대해 어떻게 생각하니? – koen

답변

2

위의 답변 중 어떤 것이라도 비즈니스 요구 사항에 따라 좋은 해결책이 될 수 있습니다.

당신은 질문 "어떻게 상황에 대처해야 ..."그것은 의존 : 이미 사용자에게 법적 책을 제공 한 후

이 장을 추가? 그렇지 않다면 - 당신은 예외를 던져야합니다 (PHP가 예외를 지원하는지 모르겠지만 어쨌든 - 당신은 오류 상황으로 취급해야합니다).

또 다른 해결책은 노출하고 개체가 이미 전체이며 변경이 이루어질 것으로 기대하지 않는 것입니다. 특히 이러한 종류의 '스트리밍'을 사용하기로 결정한 경우 유효한 해결책 일 수 있습니다. 성능 지향적이지만이 섹션은 성능 병목 현상이라는 실제적인 증거가 없습니다.

이제는 새 장 추가가 합법적입니다.

변경 사항을 기존 클라이언트 또는 새 클라이언트에만 알려야합니까?

전자의 경우 알림 로직을 구현해야합니다 (suggeted 양식 중 하나는 게시자/구독자 패턴이지만 다른 것이 있습니다).

도서 개체를 변경할 수 없도록 변경해야하므로 기존 클라이언트에서는 변형 작업이 표시되지 않고 새로운 클라이언트 (사람)에게 전달되는 완전히 새로운 책이 만들어집니다.

나는 계속해서 갈 수는 있지만, 다음 번에 당신이 볼 수있는 것처럼 동일한 문제가 다른 영역에서 다른 해결책을 가질 수 있기 때문에 해결하려고하는 정확한 문제에 대해 자세히 설명 할 것을 제안합니다.

3

아마도 책이 변경되었음을 알리는 사람이 있습니까? 이벤트로 수행 할 수 있습니다 (PHP에서 이벤트가 작동하는 방식을 모르는 경우). 또 다른 방법은 Observer/Observable 패턴을 구현하는 것입니다.

+0

+1 관측자 (a.k.a 발행 - 구독) 패턴 – orip

0

동시 작업을 수행하려고합니다. 물론 PHP의 경우에는 액티비티를 객체에 직렬화하는 것이 좋습니다.

관련 문제