рдирдорд╕реНрддреЗ,
рд╕реАрдХреНрдпреВрдЖрд░рдПрд╕ рдкрд░ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░ рд░рд╣рд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирдореВрдирд╛ рднрдВрдбрд╛рд░ рдХреЛрдб рдмрд╣реБрдд рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдордХрд░рдг рдкрд░рдВрдкрд░рд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЖрдо рддреМрд░ рдкрд░ рдХреЛрдИ рд░реЗрдкреЛ рд▓рд┐рдЦрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рднрдВрдбрд╛рд░ ProductsCommandHandler
рдЬреИрд╕рд╛ рд╣реА рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдПрдХ рдЕрдВрддрд░ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ GetProduct
рд╣реИ рдЬрд┐рд╕реЗ рдЖрдо рддреМрд░ рдкрд░ рд╣рдо рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореБрдЭреЗ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ?
public class ProductRepository {
void AddNewProduct(Product newProduct) {
...
}
void RateProduct(int productId, int userId, int rating) {
var product = repository.Find(productId);
if (product != null)
{
product.RateProduct(userId, rating);
repository.Save(product);
}
}
}
рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рди рдХрд░реЗрдВред
@martinmthomas рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд╣рдо рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдкрдпреБрдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрджреНрдпрддрди рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗред
@MikeWasson рдпрд╣рд╛рдБ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
AB#160217 - рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж - рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ
@martinmthomas рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рдПрдХ рднрдВрдбрд╛рд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рднрдВрдбрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ "рдЙрдкрдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ" рдХреЗ рд▓рд┐рдП рд╣реИред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ ProductsCommandHandler
рд╡рд░реНрдЧ рдХреЛ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ IRepository<Product>
рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрддреНрдкрд╛рдж рдХреЛ 5555 рд╕реЗ 4 рд╕реНрдЯрд╛рд░ рд░реЗрдЯ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
{"product":"5555","stars":4}
рд╕рд╛рде рд░реВрдЯ/рджрд░ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИRateProduct
рдХрдорд╛рдВрдб рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрддреНрдкрд╛рдж 5555, рд╕рд┐рддрд╛рд░реЗ 4 рдореЗрдВ рднрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рдпрд╣ рднреА рднрд░рддрд╛ рд╣реИ рдХрд┐ рд░реЗрдЯрд┐рдВрдЧ рдХреМрди рд╣реИредCommandHandler
рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рд╢рд╛рдпрдж рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛) рдФрд░ рдмрд╕ рд╡рд╣рд╛рдВ рдХрдорд╛рдВрдб рд░рдЦреЗрдВ: h.Handle(c); рдЬрд╣рд╛рдВ c рд░реЗрдЯрдкреНрд░реЛрдбрдХреНрдЯ рдХрдорд╛рдВрдб рд╣реИредрддреЛ 3 рд╡рд┐рдХрд▓реНрдк: рдП) рд╣реИрдВрдбрд▓рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдмреА) рдХрддрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рд╕реА) рдПрдХ рдмрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╣реИрдВрдбрд▓рд░ рдпрд╛ рдХрддрд╛рд░ рдореЗрдВ рдЖрджреЗрд╢ рднреЗрдЬрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдВред
рдЖрдк рдЬреЛ рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд░рддреЗ рд╣реИрдВ ... "рдПрдХ рд╢рд╛рд╕реНрддреНрд░реАрдп рднрдВрдбрд╛рд░" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХрднреА рднреА рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╣реА рднрдВрдбрд╛рд░ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдирд┐рдпрдВрддреНрд░рдХ "рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛" (рд╢рд╛рд╕реНрддреНрд░реАрдп рднрдВрдбрд╛рд░) рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ "рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рдЗрд░рд╛рджреЗ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ" (рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░)ред
рдлрд┐рд░ рдпрд╣ рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рд╣реИ - рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдирд╛рдо рдХрд╣рддрд╛ рд╣реИ- рдпрд╣ "рдХрдорд╛рдВрдб рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ" рдЬреЛ рдХрд╣реАрдВ рд╕реЗ рдЖрдпрд╛ рдерд╛ (рдПрдХ рдПрдЪрдЯреАрдПрдордПрд▓ рд╡реЗрдм рдирд┐рдпрдВрддреНрд░рдХ, рдПрдХ рдПрдкреАрдЖрдИ рдирд┐рдпрдВрддреНрд░рдХ, рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди, рдЬреЛ рднреА рд╣реЛ) рдЬрд┐рд╕реЗ рдПрдХ рдЗрд░рд╛рджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рдХрдорд╛рдВрдбрд╣реИрдВрдбрд▓рд░ рд╣реИ (рдЬреЛ рд░рд╛рдЗрдЯ рд╕рд╛рдЗрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ) рдЬреЛ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдбрд╣реИрдВрдбрд▓рд░ рдЙрддреНрдкрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдкреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реЗрдЬ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП), рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЗрд╡реЗрдВрдЯ рд▓реЙрдЧ рдХреЛ рднреА рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рд░реАрдб-рд╕рд╛рдЗрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрд╡реЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд╛рд╣рд░реА рдХрдиреЗрдХреНрдЯрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЬреЛ рднреА рд╣реЛред
рдЙрддреНрдкрд╛рдж рдФрд░ рдЙрд╕рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдХрд╛рд░реНрдп-рдЖрдзрд╛рд░рд┐рдд UI "рдЬрд╣рд╛рдВ" рдЕрднрд┐рдиреАрдд / рд░реЗрдЯрд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд░рдЦрд╛ рдпрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдк рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрддреНрдкрд╛рдж рд╡рд░реНрдЧ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реЗрдЯрдкреНрд░реЛрдбрдХреНрдЯ() рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреИрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВред рдЕрдЪреНрдЫрд╛ред
рд▓реЗрдХрд┐рди... рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП "рдкреБрд░рд╛рдиреЗ" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдкреНрд░рдгрд╛рд▓реА рд╣реИред "рдореЙрдбрд▓" (рдпрд╛рдиреА: рдмрд┐рдЬрдиреЗрд╕ рдорд╛рдЗрдВрдб) рдореЗрдВ рдЙрддреНрдкрд╛рдж рдХреА рдХреЛрдИ "рд░реЗрдЯрд┐рдВрдЧ" рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рд╡рд╛рд▓рд╛ рдореМрдЬреВрджрд╛ рдЙрддреНрдкрд╛рдж рдореЗрдВ рд░реЗрдЯрд┐рдВрдЧ "рдЬреЛрдбрд╝рдирд╛" рдЪрд╛рд╣рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕рднреА рдХрдВрдкрдиреА рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ "рдмрд╛рд╣рд░реА рдЪреАрдЬ" рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЙрддреНрдкрд╛рдж рднрдВрдбрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ? рдпрд╛ рд╢рд╛рдпрдж рдПрдХ рдФрд░ рд╕рд╣рд╛рдпрдХ рднрдВрдбрд╛рд░рдг рддрд╛рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдЙрддреНрдкрд╛рдж рдФрд░ рдЙрддреНрдкрд╛рдж рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреЛ "рд╕реНрдкрд░реНрд╢" рди рдХрд░реЗрдВ?
рдпрджрд┐ рдЖрдк рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓реЗрдЦрди рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред рд╡реЗрдм, рдПрдкреАрдЖрдИ рдФрд░ рд╕реАрдПрд▓рдЖрдИ рд╕рднреА рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рдХреЛ "рдХрдорд╛рдВрдб" рднреЗрдЬреЗрдВрдЧреЗ (рдпрд╛ рддреЛ рд╕реАрдзреЗ, рдХрддрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдХрдорд╛рдВрдб рдмрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛ рд╣реИрдВрдбрд▓рд░ рдпрд╛ рдХрддрд╛рд░ рдореЗрдВ рдмрджрд▓реЗ рдореЗрдВ рд░реВрдЯ рдХрд░реЗрдЧрд╛) рдФрд░ рд╡реЗ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рдпрд╣ рддрдп рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдХреЗрдВрджреНрд░реАрдХреГрдд рдФрд░ рдЫреЛрдЯреЗ рдмрд┐рдВрджреБ рдореЗрдВ "RateProductCommand" рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ mantainability рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
рдлрд┐рд░ рд╣реИрдВрдбрд▓рд░ рддрдп рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЙрддреНрдкрд╛рдж рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдпрд╛ "рдЙрддреНрдкрд╛рдж рдХреА рд░реЗрдЯрд┐рдВрдЧ" рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВред
рддреЛ, рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП:
рдХрдорд╛рдВрдбрд╣реИрдВрдбрд▓рд░ => рдХрд╛ рдПрдВрдЯрд╛рдЗрдЯреНрд╕ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЗрд░рд╛рджреЗ" рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ (рдЬреЛ рдЕрдВрддрддрдГ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрднрд╡рддрдГ рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред
рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА => рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рднрдВрдбрд╛рд░рдгред
рдорджрдж рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред
рдЬрд╝рд╛рд╡реАред
рдЬреИрд╕рд╛ рдХрд┐ @xmontero рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ,
рдпрджрд┐ рдЖрдк рдХрдорд╛рдВрдб рдХреЛ рдХреНрд╡реЗрд░реА рд╕реЗ рдЕрд▓рдЧ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ CQRS рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд CQRS рдХреЗ рд╕рднреА рд▓рд╛рднреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@martinmthomas рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рдПрдХ рднрдВрдбрд╛рд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рднрдВрдбрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ "рдЙрдкрдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ" рдХреЗ рд▓рд┐рдП рд╣реИред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ
ProductsCommandHandler
рд╡рд░реНрдЧ рдХреЛ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВIRepository<Product>
рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИредрдорд╛рди рд▓реЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрддреНрдкрд╛рдж рдХреЛ 5555 рд╕реЗ 4 рд╕реНрдЯрд╛рд░ рд░реЗрдЯ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
{"product":"5555","stars":4}
рд╕рд╛рде рд░реВрдЯ/рджрд░ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИRateProduct
рдХрдорд╛рдВрдб рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрддреНрдкрд╛рдж 5555, рд╕рд┐рддрд╛рд░реЗ 4 рдореЗрдВ рднрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рдпрд╣ рднреА рднрд░рддрд╛ рд╣реИ рдХрд┐ рд░реЗрдЯрд┐рдВрдЧ рдХреМрди рд╣реИредCommandHandler
рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рд╢рд╛рдпрдж рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛) рдФрд░ рдмрд╕ рд╡рд╣рд╛рдВ рдХрдорд╛рдВрдб рд░рдЦреЗрдВ: h.Handle(c); рдЬрд╣рд╛рдВ c рд░реЗрдЯрдкреНрд░реЛрдбрдХреНрдЯ рдХрдорд╛рдВрдб рд╣реИредрддреЛ 3 рд╡рд┐рдХрд▓реНрдк: рдП) рд╣реИрдВрдбрд▓рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдмреА) рдХрддрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рд╕реА) рдПрдХ рдмрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╣реИрдВрдбрд▓рд░ рдпрд╛ рдХрддрд╛рд░ рдореЗрдВ рдЖрджреЗрд╢ рднреЗрдЬрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдВред
рдЖрдк рдЬреЛ рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд░рддреЗ рд╣реИрдВ ... "рдПрдХ рд╢рд╛рд╕реНрддреНрд░реАрдп рднрдВрдбрд╛рд░" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХрднреА рднреА рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╣реА рднрдВрдбрд╛рд░ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдирд┐рдпрдВрддреНрд░рдХ "рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛" (рд╢рд╛рд╕реНрддреНрд░реАрдп рднрдВрдбрд╛рд░) рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ "рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рдЗрд░рд╛рджреЗ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ" (рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░)ред
рдлрд┐рд░ рдпрд╣ рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рд╣реИ - рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдирд╛рдо рдХрд╣рддрд╛ рд╣реИ- рдпрд╣ "рдХрдорд╛рдВрдб рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ" рдЬреЛ рдХрд╣реАрдВ рд╕реЗ рдЖрдпрд╛ рдерд╛ (рдПрдХ рдПрдЪрдЯреАрдПрдордПрд▓ рд╡реЗрдм рдирд┐рдпрдВрддреНрд░рдХ, рдПрдХ рдПрдкреАрдЖрдИ рдирд┐рдпрдВрддреНрд░рдХ, рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди, рдЬреЛ рднреА рд╣реЛ) рдЬрд┐рд╕реЗ рдПрдХ рдЗрд░рд╛рджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рдХрдорд╛рдВрдбрд╣реИрдВрдбрд▓рд░ рд╣реИ (рдЬреЛ рд░рд╛рдЗрдЯ рд╕рд╛рдЗрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ) рдЬреЛ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдбрд╣реИрдВрдбрд▓рд░ рдЙрддреНрдкрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдкреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реЗрдЬ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП), рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЗрд╡реЗрдВрдЯ рд▓реЙрдЧ рдХреЛ рднреА рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рд░реАрдб-рд╕рд╛рдЗрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрд╡реЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд╛рд╣рд░реА рдХрдиреЗрдХреНрдЯрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЬреЛ рднреА рд╣реЛред
рдЙрддреНрдкрд╛рдж рдФрд░ рдЙрд╕рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдХрд╛рд░реНрдп-рдЖрдзрд╛рд░рд┐рдд UI "рдЬрд╣рд╛рдВ" рдЕрднрд┐рдиреАрдд / рд░реЗрдЯрд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд░рдЦрд╛ рдпрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЖрдк рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрддреНрдкрд╛рдж рд╡рд░реНрдЧ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реЗрдЯрдкреНрд░реЛрдбрдХреНрдЯ() рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреИрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВред рдЕрдЪреНрдЫрд╛ред
рд▓реЗрдХрд┐рди... рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП "рдкреБрд░рд╛рдиреЗ" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдкреНрд░рдгрд╛рд▓реА рд╣реИред "рдореЙрдбрд▓" (рдпрд╛рдиреА: рдмрд┐рдЬрдиреЗрд╕ рдорд╛рдЗрдВрдб) рдореЗрдВ рдЙрддреНрдкрд╛рдж рдХреА рдХреЛрдИ "рд░реЗрдЯрд┐рдВрдЧ" рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рд╡рд╛рд▓рд╛ рдореМрдЬреВрджрд╛ рдЙрддреНрдкрд╛рдж рдореЗрдВ рд░реЗрдЯрд┐рдВрдЧ "рдЬреЛрдбрд╝рдирд╛" рдЪрд╛рд╣рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕рднреА рдХрдВрдкрдиреА рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ "рдмрд╛рд╣рд░реА рдЪреАрдЬ" рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЙрддреНрдкрд╛рдж рднрдВрдбрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ? рдпрд╛ рд╢рд╛рдпрдж рдПрдХ рдФрд░ рд╕рд╣рд╛рдпрдХ рднрдВрдбрд╛рд░рдг рддрд╛рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдЙрддреНрдкрд╛рдж рдФрд░ рдЙрддреНрдкрд╛рдж рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреЛ "рд╕реНрдкрд░реНрд╢" рди рдХрд░реЗрдВ?
рдпрджрд┐ рдЖрдк рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓реЗрдЦрди рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред рд╡реЗрдм, рдПрдкреАрдЖрдИ рдФрд░ рд╕реАрдПрд▓рдЖрдИ рд╕рднреА рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рдХреЛ "рдХрдорд╛рдВрдб" рднреЗрдЬреЗрдВрдЧреЗ (рдпрд╛ рддреЛ рд╕реАрдзреЗ, рдХрддрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдХрдорд╛рдВрдб рдмрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛ рд╣реИрдВрдбрд▓рд░ рдпрд╛ рдХрддрд╛рд░ рдореЗрдВ рдмрджрд▓реЗ рдореЗрдВ рд░реВрдЯ рдХрд░реЗрдЧрд╛) рдФрд░ рд╡реЗ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рдпрд╣ рддрдп рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдХреЗрдВрджреНрд░реАрдХреГрдд рдФрд░ рдЫреЛрдЯреЗ рдмрд┐рдВрджреБ рдореЗрдВ "RateProductCommand" рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ mantainability рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
рдлрд┐рд░ рд╣реИрдВрдбрд▓рд░ рддрдп рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЙрддреНрдкрд╛рдж рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдпрд╛ "рдЙрддреНрдкрд╛рдж рдХреА рд░реЗрдЯрд┐рдВрдЧ" рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдпрд╛ рдирд╣реАрдВред
рддреЛ, рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП:
рдХрдорд╛рдВрдбрд╣реИрдВрдбрд▓рд░ => рдХрд╛ рдПрдВрдЯрд╛рдЗрдЯреНрд╕ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЗрд░рд╛рджреЗ" рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ (рдЬреЛ рдЕрдВрддрддрдГ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрднрд╡рддрдГ рдХрдорд╛рдВрдб рд╣реИрдВрдбрд▓рд░ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред
рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА => рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рднрдВрдбрд╛рд░рдгред
рдорджрдж рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред
рдЬрд╝рд╛рд╡реАред