рдЬрдм рдореИрдВрдиреЗ рдирдИ рдиреМрдХрд░реА рдХреА рддреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдореИрдВрдиреЗ CQRS рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ред рдЬрд┐рд╕ рдХрдВрдкрдиреА рдореЗрдВ рдореИрдВ рдЖрдЬ рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдЙрд╕реЗ рддреБрд░рдВрдд рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЬрд┐рд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛, рдЙрд╕ рдкрд░ CQRS, рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ, рдФрд░ MongoDB рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рдм рд╕реЗ, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ MongoDB рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ред CQRS рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рддреБрд░рдВрдд рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╕рднреА рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореБрдЭреЗ рдбреЗрдЯрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдореЙрдбрд▓ рдХреЛ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛ - рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ред рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ "рдХрд░реНрддрд╡реНрдпреЛрдВ рдХреЗ рдЕрд▓рдЧрд╛рд╡" рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рд╣реБрдЖ, рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдбреАрдбреАрдбреА рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рдерд╛ред
рдЖрдо рддреМрд░ рдкрд░, рдХрдИ CQRS рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдордЧреНрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ "рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╣рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред CQRS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рдЧрднрдЧ рд╣рд░ рдХреЛрдиреЗ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ CQRS + рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдореИрдВрдиреЗ рдХрднреА рднреА CQRS рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓рд╛рдн рдЦреЛ рджреЗрддрд╛ рд╣реИред рдореИрдВ CQRS рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдХреЙрд░реНрдкреЛрд░реЗрдЯ Paralect.Domain рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рд╡рд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдмрджрддрд░ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдмрд╛рдХреА рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдореИрдВ рдпрд╣рд╛рдБ рдХреЗрд╡рд▓ рдХреБрдЫ .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдБрдЧрд╛ред рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВ
NCQRS ,
рд▓реЛрдХрдж CQRS ,
SimpleCQRS ред рдЖрдк рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЬреЛрдирд╛рдерди рдУрд▓рд┐рд╡рд░
рдЗрд╡реЗрдВрдЯ рд╕реНрдЯреЛрд░ рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
CQRS рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
CQRS рдХреНрдпрд╛ рд╣реИ?
CQRS рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрдорд╛рдВрдб рдХреНрд╡реЗрд░реА рд░рд┐рд╕реНрдкреЙрдиреНрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рд╕реЗрдЧреНрд░реАрдЧреЗрд╢рдиред рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЧреНрд░реЗрдЧ рдпрдВрдЧ рд╕реЗ рд╕реБрдирд╛ рдерд╛ред рдпрд╣ рдПрдХ рд╕рд░рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрджреНрдпрддрди рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдореЙрдбрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рд░рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдЧрдВрднреАрд░ рдкрд░рд┐рдгрд╛рдо рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИред (c) рдорд╛рд░реНрдЯрд┐рди рдлрд╛рдЙрд▓рд░
рдпрд╣ рдирд╣реАрдВ рдХрд╣рдирд╛ рдХрд┐ рдПрдХ рд╕рдВрдкреВрд░реНрдг рдкрд░рд┐рднрд╛рд╖рд╛, рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╛рдЙрд▓рд░ рдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдХреНрдпрд╛ рдерд╛ред
рдЖрдЬ рддрдХ, рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдИ рд╣реИ рдХрд┐ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд░ рдХреЛрдИ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рд╕реАрдЖрд░рдпреВрдбреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред CQRS рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рди рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк CQRS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдореИрдВрдиреЗ CQRS рдлреНрд▓реЛрдЪрд╛рд░реНрдЯ рдХрд╛ рдЪрд┐рддреНрд░рдг рдХрд┐рдпрд╛

рдЖрдкрдХреА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЛ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╣реИрдВ, рдПрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП (рдХреНрд╡реЗрд░реА), рдПрдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП (рдХрдорд╛рдВрдбреНрд╕)ред рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рднреА рд╣реИрдВред рдФрд░ рдЬрдм рд╕реЗ рд╣рдо CQRS + рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд░рд╛рдЗрдЯ-рдмреЗрд╕ (рд░рд╛рдЗрдЯ-рдореЙрдбрд▓) рдИрд╡реЗрдВрдЯ рд╕реНрдЯреЛрд░ рд╣реЛрддрд╛ рд╣реИ, рдХреБрдЫ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓реЙрдЧ рдХреА рддрд░рд╣ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рднреА рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╡реЗ рдЬреЛ рд╡реНрдпрд╡рд╕рд╛рдп рдореЙрдбрд▓ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдФрд░ рд░реАрдб-рдмреЗрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ)ред рдФрд░ рд░реАрдб-рдмреЗрд╕ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╡рд┐рдХреГрдд рднрдВрдбрд╛рд░ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рдХреНрдпреЛрдВ рдХрд╣рд╛ рдХрд┐ рд░реАрдб рдмреЗрд╕ рдХреЛ рдЕрд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ? рдмреЗрд╢рдХ, рдЖрдк рд░реАрдб-рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ CQRS + рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд░реАрдб-рдмреЗрд╕ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЬреНрдпрд╛рджрд╛ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рдордп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд▓рд╕ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ NoSQL рдХреА рдУрд░ рджреЗрдЦрддреЗ рд╣реИрдВред
рд▓реЗрдЦрди-рдЖрдзрд╛рд░ рдЖрдо рддреМрд░ рдкрд░ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдпрд╣реА рд╣реИ, рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рднреА рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ
рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХреЗ рдкреАрдЫреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣рд░ рдЙрд╕ рдШрдЯрдирд╛ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдШрдЯрдирд╛рдПрдБ рдЬреЛ рдЙрдирд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдЯреАрдХ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЗрдХрд╛рдИ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рдореЙрдбрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдо рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ рдЦреЗрд▓рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЙрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдпреВрдирд┐рдЯ рдХреЛ рдЙрдард╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
var user = Repository.Get<UserAR>(userId);
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдбреЗрдЯрд╛рдмреЗрд╕ (AR = рдПрдЧреНрд░реАрдЧреЗрдЯ рд░реВрдЯ) рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдПрдХрддреНрд░реАрдХрд░рдг рдХреА рддреИрдпрд╛рд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд╣реАрдВ рд▓реЗрддреА рд╣реИ, рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЙрди рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреА рд╣реИ рдЬреЛ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдПрдЧреНрд░реА рдХреЗ рдСрди () рддрд░реАрдХреЗ рд╕реЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓рддреА рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рд╡рд┐рдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
protected void On(User_CreatedEvent created) { _id = created.UserId; }
рдпреВрдирд┐рдЯ рдХреЗ рдкреВрд░реЗ рд░рд╛рдЬреНрдп рд╕реЗ, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ _id рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкрд╛рд╕рд╡рд░реНрдб, рдирд╛рдо рдЖрджрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЕрдиреНрдп рдШрдЯрдирд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рди рдХреЗрд╡рд▓ User_CreatedEvent, рдХреНрд░рдорд╢рдГ, рдореБрдЭреЗ рдЙрди рд╕рднреА рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЪреВрдВрдХрд┐ рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХреНрд░рдо рдореЗрдВ рд╡рд╛рдкрд╕ рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореИрдВ рд╣рдореЗрд╢рд╛ рдПрдЧреНрд░реАрдЧреЗрдЯ рдХреА рдирд╡реАрдирддрдо рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рд░рд╛рдЬреНрдп рдХреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдСрди () рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦреЗред
рдЖрдЗрдП рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ CQRS + рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЯреАрдо рдмрдирд╛рдирд╛ рдФрд░ рднреЗрдЬрдирд╛
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдореИрдВ рдХрд░реВрдВрдЧрд╛ рд╡рд╣ рд╣реИ рдЯреАрдо рдмрдирд╛рдирд╛ рдФрд░ рднреЗрдЬрдирд╛ред рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрдорд╛рдг рдХрдорд╛рдВрдб рдореЗрдВ рдХреЗрд╡рд▓ рдлрд╝реАрд▓реНрдбреНрд╕ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ рд╣реИ рдФрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИред
public class User_CreateCommand: Command { public string UserId { get; set; } public string Password { get; set; } public string Email { get; set; } }
рдЯреАрдо рдХрд╛ рд╡рд░реНрдЧ рдирд╛рдо рдЖрдкрдХреЛ рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВ, рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХреГрдд рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рддреБрд░рдВрдд рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдЗрдХрд╛рдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рд╣реИред
var command = new User_CreateCommand { UserId = тАЬ1тАЭ, Password = тАЬpasswordтАЭ, Email = тАЬtest@test.comтАЭ, }; command.Metadata.UserId = command.UserId; _commandService.Send(command);
рдлрд┐рд░ рдореБрдЭреЗ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдПрдЧреНрд░реАрдЧреЗрдЯ рдХреА рдЖрдИрдбреА рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕ рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдЙрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдПрдЧреНрд░реАрдЧреЗрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреБрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрдирд╛рддрд╛ рд╣реИ: рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЗрд╕ рдПрдЧреНрд░реАрдЧреЗрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ, рдПрдХ рдирдпрд╛ рдЦрд╛рд▓реА рдПрдЧреНрд░реАрдЧреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдХреНрд░рдо рдореЗрдВ рдПрдЧреНрд░реАрдЧреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЦреЗрд▓рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реГрдЬрди рдЯреАрдореЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рд╕реНрд╡рдпрдВ рдПрдЧреНрд░реАрдЧреЗрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдХрдорд╛рдВрдб рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВред
public class User_CreateCommandHandler: CommandHandler<User_CreateCommand> { public override void Handle(User_CreateCommand message) { var ar = new UserAR(message.UserId, message.Email, message.Password, message.Metadata); Repository.Save(ar); } }
рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпреВрдирд┐рдЯ рдбрд┐рдЬрд╛рдЗрдирд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
public UserAR(string userId, string email, string password, ICommandMetadata metadata): this() { _id = userId; SetCommandMetadata(metadata); Apply(new User_CreatedEvent { UserId = userId, Password = password, Email = email }); }
рд╕рд╛рде рд╣реА, рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдПрдЧреНрд░реАрдЧреЗрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдкрд╣рд▓реЗ рдкрде рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░ рдИрд╡реЗрдВрдЯ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рд╡рд┐рдзрд┐рдпреЛрдВ (
рдСрди рдореЗрдердб
(рдпреВрдЬрд╝рд░_рдХреНрд░рд┐рдПрдЯрдбрд╡реЗрдВрдЯ) рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдореИрдВ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреВрдВрдЧрд╛ред рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рдЗрд╡реЗрдВрдЯ рд╕реНрдЯреЛрд░ рд╕реЗ рдЙрди рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреБрдирд░реБрддреНрдкрд╛рджрди рд╣реИ рдЬреЛ рдЙрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдШрдЯрдирд╛рдПрдБ рд╣реИрдВред рдФрд░ рд╕рдореБрдЪреНрдЪрдп, рд╕рднреА рд╕рдорд╛рди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЬреЛ рд▓рд╛рдЧреВ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЗ рдкреНрд▓реЗрдмреИрдХ рдХреЗ рджреМрд░рд╛рди рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдврд╛рдВрдЪреЗ рдореЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдСрди рд╡рд┐рдзрд┐ (/ * EventType arg * /) рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЬрд╣рд╛рдВ EventType рдЗрд╡реЗрдВрдЯ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдПрдЧреНрд░реАрдЧреЗрдЯ рдХреА рд▓рд╛рдЧреВ рд╡рд┐рдзрд┐ рд╕рднреА рд╣реИрдВрдбрд▓рд░ рдХреЛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рднреЗрдЬрдиреЗ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╕рдореБрдЪреНрдЪрдп рдХреЛ рднрдВрдбрд╛рд░ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рд╕рдореБрдЪреНрдЪрдп рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдПрдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ (!) рд╣реИ, рдЬреЛ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реАрдб рдмреЗрд╕ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИред
public void Handle(User_CreatedEvent message) { var doc = new UserDocument { Id = message.UserId, Email = message.Email, Password = message.Password }; _users.Save(doc); }
рдПрдХ рдШрдЯрдирд╛ рдореЗрдВ рдХрдИ рд╣реИрдВрдбрд▓рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛ рднрд╛рд░реА рд░реВрдк рд╕реЗ рд╡рд┐рдХреГрдд рд╣реЛред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдкрд░ рдЧрдгрдирд╛ рдСрдкрд░реЗрд╢рди рдореЗрд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред рдлрд┐рд░ рдореИрдВ рдПрдХ рдФрд░ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдБрдХрдбрд╝реЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬреЛрдбрд╝реВрдВрдЧрд╛, рддреЛ рдореИрдВ рдХреБрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ 1 рд╕реЗ рдмрдврд╝рд╛ рджреВрдВрдЧрд╛ред рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдХрд╛рдЙрдВрдЯрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╣реАрдВ рдмрдирд╛рдПрдЧрд╛ред рдпрджрд┐ рдореИрдВрдиреЗ CQRS рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рд╛рдорд╛рдиреНрдп ORM рдерд╛, рддреЛ рдореБрдЭреЗ рд╣рд░ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдЪрд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдБ рдЗрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХрд╛рдЙрдВрдЯрд░ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПред
рдФрд░ рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЭреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ EventHandler рдореЗрдВ рдХреЛрдИ рдЧрд▓рддреА рд╣реБрдИ рд╣реИ рдпрд╛ рдореБрдЭреЗ рдЬрд╣рд╛рдВ рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рд╣реА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдЯреАрдо рд╕рддреНрдпрд╛рдкрди рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ? рдкрд╛рд╕рд╡рд░реНрдб рдмрджрд▓рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдореИрдВ рдХреЗрд╡рд▓ рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рдФрд░ ChangePassword () рдПрдЧреНрд░реАрдЧреЗрдЯ рд╡рд┐рдзрд┐ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рдкрд░ рдпрд╣ рдЕрдВрддрд░ рдЖрдо рддреМрд░ рдкрд░ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдХрдорд╛рди рд╕рдВрднрд╛рд▓рдиреЗрд╡рд╛рд▓рд╛
public class User_ChangePasswordCommandHandler: IMessageHandler<User_ChangePasswordCommand> {
рдЕрд▓рдЧ рдЬрдбрд╝
public class UserAR : BaseAR {
рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдЕрдорд╛рдиреНрдп рдШрдЯрдирд╛ рдХреЛ рд▓рд╛рдЧреВ () рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдмреЗрд╢рдХ рдЖрдк рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рд╕реЗрд╡ рди рдХрд░реЗрдВ рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдИрд╡реЗрдВрдЯ рд╕реНрдЯреЛрд░ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ред
рдкрд╛рд╕рд╡рд░реНрдб рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдЕрд╕рдлрд▓ рдкрд╛рд╕рд╡рд░реНрдб рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА, рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдШрдЯрдирд╛ рд▓реЗрдЦрди рдореЙрдбрд▓ рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдлреВрдЯреА рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ рдЯреЗрдореНрдкреЛ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдШрдЯрдирд╛ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрдЪрд╛рдПрдВред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣ рд╕рдм рд╣реИ рдЬреЛ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдмреЗрд╢рдХ, рдпрд╣ CQRS + рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХреЗ рд╕рднреА рдкрд╣рд▓реБрдУрдВ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдПрдВ рднреА рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдмрдиреА рд╣реБрдИ рд╣реИрдВред рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкреВрдЫреЗрдВред рдореБрдЭреЗ рдЙрдирдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИрдВ - рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ
ASP.NET MVC рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдБ рд╣реИ ред
рд╡рд╣рд╛рдБ рдХреЛрдИ рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╣реАрдВ рд╣реИ, рд╕рдм рдХреБрдЫ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдкреЗрдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рднреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП MongoDB рдкрд░ рдИрд╡реЗрдВрдЯ рд╕реНрдЯреЛрд░ рдХрд╛ рдПрдХ рддреИрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред
Global.asax рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕реЗ рдкреЗрдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ InMemoryTransitionRepository рдХреЛ MongoTransitionRepository рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд░реАрдб рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдбреЗрдЯрд╛ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд▓реЗрдЦреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рдХрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред рдФрд░ рд╕реБрдЭрд╛рд╡ рджреЗрдВред рдХрд╣реЛ рдХреНрдпрд╛ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
- рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреНрдпрд╛ рд╣реИрдВ, рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рд╡рд┐рд╡рд░рдг рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдкред
- рдЗрд╡реЗрдВрдЯ рд╕реНрдЯреЛрд░ред
- рдбреЗрдЯрд╛рдмреЗрд╕ рдкреБрдирд░реНрдЬрдирдиред рдЕрд╡рд╕рд░ред рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВред рд╕рд╛рде рдореЗрдВ рдЪрд▓рд╛рдирд╛ред рдкреИрдЪред
- Aggregate Roots рджреНрд╡рд╛рд░рд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ред
- рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЖрд╡реЗрджрдиред рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЖрдЙрдЯрд╕реЛрд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдореЗрд░рд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╣реИред
- рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдПрдХреАрдХрд░рдг рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВред