TL;DR; SMS .
"". idempotent, , , . "-", , .
, UUID ( ), , UUID . (a.k.a., "Sagas" ) , , , "". , "".
, , UUID SMS PasswordResetRequested. SMS , , .
( ++):
class PasswordResetRequested : public Event {
public:
PasswordResetRequested(const Uuid& userUuid, const Uuid& smsUuid, const std::string& passwordResetCode);
const Uuid userUuid;
const Uuid smsUuid;
const std::string passwordResetCode;
};
class User {
public:
PasswordResetRequested requestPasswordReset() {
Uuid smsUuid = Uuid::random();
passwordResetCode_ = generateRandomString();
return PasswordResetRequested(userUuid_, smsUuid, passwordResetCode_);
}
private:
Uuid userUuid_;
string passwordResetCode_;
};
class PasswordResetProcessManager {
public:
void on(const PasswordResetRequested& event) {
if (!smsRepository_.hasSms(event.smsUuid)) {
smsRepository_.queueSms(event.smsUuid, "Your password reset code is: " + event.passwordResetCode);
}
}
};
, :
-, () , UUID SMS , , .
. , "bob" reset, SMS UUID "1234", (, 2 ) "" reset, UUID "1234" ", SMS, , , .
. UUID, SMS, "bob" , "" SMS-, . UUID , , "" reset "bob" .
-, UUID SMS , User PasswordResetProcessManager ( PasswordResetManager), . , User , SMS, , SMS . User , , SmsQueued , PasswordResetRequested , , SMS, reset , reset .
-, PasswordResetRequested, , PasswordResetProcessManager SMS, SMS , PasswordResetRequested ( ). , "" .
( , , OrderProcessManager: https://msdn.microsoft.com/en-us/library/jj591569.aspx). , , .