
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рджреЛ рд╣реАрд░реЛрдЬ рд╣рдорд╛рд░реЗ рдиреНрдпреВрдЬрд╝рдлрд╝реАрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░-рдмреЗрдХрд░реНрд╕ - рдмреЛрд░рд┐рд╕ рдФрд░ рдорд╛рд░реНрдХрд╕ред рдмреЛрд░рд┐рд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡реНрдпрдХреНрддрд┐ рдФрд░ рдПрдХ рдкреВрд░реНрдгрддрд╛рд╡рд╛рджреА рд╣реИ, рдФрд░ рдорд╛рд░реНрдХрд╕ рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рдирдореНрд░ рдФрд░ рдЧреНрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИ рдЬреЛ рдмрд╛рд╣рд░ рдЦрдбрд╝рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реЗрд╡рд╛ рдореЗрдВ рд░рд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рд░реНрдХрд╕ рдиреЗ рдмрд╣реБрдд рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреАред
рдпрд╣ рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рд╣реИ - рдЬрд╛рд░реА рд╣реИред рдЖрдЬ, рдХрд╣рд╛рдиреА рдХреЗрд╡рд▓ рдорд╛рд░реНрдХрд╕ рдХреЛ рдЫреВрддреА рд╣реИред рд╡рд╣ рдореБрдЦреНрдп рдХрд┐рд░рджрд╛рд░ рд╣реИред
рддреЛ, рдХрд╣рд╛рдиреА рдХрдЯ рдХреЗ рдиреАрдЪреЗ рд╣реИред
рдореВрд▓ рдкреЛрд╕реНрдЯ:
рдХреИрд╕реЗ рджреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд░реЛрдЯреА рд╕реЗрдВрдХрддреЗ рд╣реИрдВрдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдореВрд▓ рдкреЛрд╕реНрдЯ рдореЗрдВ рдмреЛрд░рд┐рд╕ рдкрд░ рдмрд╣реБрдд рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдорд╛рд░реНрдХрд╕ рдХреЛ рдмрд╣реБрдд рдХрдоред рд╢рд╛рдпрдж рдЙрд╕рдХреА рд╡рд┐рдирдп рдХреЗ рдХрд╛рд░рдгред рдкреЛрд╕реНрдЯ рдордЬреЗрджрд╛рд░ рдереА, рдореИрдВрдиреЗ рдФрд░ рдХрдИ рдиреЗ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд┐рдпрд╛ред рдФрд░ рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ
рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ
рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рддреНрд░рд┐рдпреЛрдВ рдкрд░ рдЧреЛрд▓реА рдЪрд▓рд╛рдИред рдФрд░ рдорд╛рд░реНрдХрд╕ рд╡рд┐рдЬрдпреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реА рд╕реИрд▓реНрд╡реЛ рдерд╛, рдпрд╣ рдЧреБрдВрдЬрд╛рдЗрд╢ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдерд╛ред рдореВрд▓ рдкреЛрд╕реНрдЯ рдореЗрдВ рдПрдХ рдЪрд╛рд▓ рдереА - рдмреЛрд░рд┐рд╕ рдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдордиреЗ рдЖрдпрд╛, рдФрд░ рдорд╛рд░реНрдХрд╕ рдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рдмрд╛рд╣рд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкреАрдЫреЗ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдПрдХ рднрдпрд╛рдирдХ рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдерд╛ред
рдЖрдЬ рдореИрдВ рдорд╛рдХреНрд░реНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреБрдирд░реНрд╡рд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдкреЛрд╕реНрдЯ YAGNI рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реЛрдЧреАред рдпрд╣ рдХреЗрд╡рд▓ YAGNI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрдИ рдХрд┐рддрд╛рдмреЗрдВ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рджрд┐рдЦрд╛рддреА рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдХрд┐рддрд╛рдмреЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреБрднрд╡ рдФрд░ рдХрд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрди рдХреМрд╢рд▓ рдХреЛ рдЬрдиреНрдо рджреЗрддреЗ рд╣реИрдВред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпреЗ рдХреЛрдб рдХреМрд╢рд▓ рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ рд╕рд┐рджреНрдзрд╛рдВрддред рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдореИрдВ рднреА рдЖрдкрд╕реЗ рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦреВрдВред рдпрд╣ рдкрдж рдХреЗрд╡рд▓ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ рдФрд░ рдХрд╛рд░реНрдп C # рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдЬреЛ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдВрднрд╛рд╡рд┐рдд рджрд░реНрд╢рдХреЛрдВ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЛрдИ рдФрд░ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рдЦреБрдж рд╡рд┐рд░реЛрдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рдпреВрдПрдордПрд▓ рд╢реНрд░реЗрдгреА рдХреЗ рдЪрд┐рддреНрд░ рдореБрдЭреЗ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рдорд╛рд░реНрдХрд╕ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдЙрдиреНрд╣реЗрдВ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рдереАред
рдореИрдВ рдЖрдкрд╕реЗ рдпрд╣ рднреА рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ C # рдХреЗ рд╕реНрдЯрд╛рдЗрд▓ рдФрд░ рдХреЛрдб рдореЗрдВ рдУрд╡рд░рд╕рд╛рдЗрдЯреНрд╕ рдкрд░ рдЬреНрдпрд╛рджрд╛ рдзреНрдпрд╛рди рди рджреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рд░ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВред рдФрд░ рдЫреЛрдЯреА-рдЫреЛрдЯреА рдмрд╛рддреЛрдВ рдкрд░ рдЕрдкрдирд╛ рдзреНрдпрд╛рди рди рдЫрд┐рдбрд╝рдХреЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЯреАрдбреАрдбреА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рднреА рдкреЛрд╕реНрдЯ рдмрд╣реБрдд рд╣реА рдЪрдордХрджрд╛рд░ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, TDD, рдмреЗрд╢рдХ, рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдорд╛рдпреЛрдЬрди рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдорд╛рд░реНрдХрд╕ рдиреЗ рдРрд╕рд╛ рдмреБрд░рд╛ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЙрд╕рдиреЗ YAGNI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореВрд▓ рдкреЛрд╕реНрдЯ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИред
рдФрд░ рд╣рд╛рдВ, рдореИрдВ рддреБрдЪреНрдЫ рдмрд╛рддреЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред рдмрд╣реБрддреЛрдВ рдХреЗ рд╕рд╛рде, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдЬреИрд╕рд╛ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╡реЗ рдЗрд╕ рддрд░рд╣ рдХреА рдкреЛрд╕реНрдЯ рдХреЛ рдФрд░ рднреА рдмреБрд░рд╛ рдХрд╣реЗрдВрдЧреЗред рдФрд░ рдХреБрдЫ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИрдВ (рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рдореИрдВ рдорд╛рдХреНрд░реНрд╕ рд╣реВрдВред рд╕рдЪ рд╣реИ, рдореИрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдорд╛рдХреНрд░реНрд╕ рд╣реВрдВ рдФрд░ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ред
рдЖрд╡рд╢реНрдпрдХрддрд╛ рез- рджреЛрд╕реНрддреЛрдВ, рд╣рдореЗрдВ рд░реЛрдЯреА рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИрдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд░реЛрдЯреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд░реЛрдЯреА рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдХрд╛рдИ рд╣реИред рдпрд╣ рдХреЛрдИ рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЗрдВрдЯ рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдпрд╛ рдирд┐рд░реНрдорд┐рдд рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИред рддреЛ рд░реЛрдЯреА, рдпрд╣ рдПрдХ рдирдпрд╛ рдЕрд▓рдЧ рд╡рд░реНрдЧ рд╣реИред рдХреНрдпрд╛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╢рд░реНрдд рдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ? рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдЖрдЯрд╛ (рдЖрдЯрд╛, рдЧреЗрд╣реВрдВ рдпрд╛ рд░рд╛рдИ ...) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдХрд┐ рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреЛрд░ рдореЗрдВ рдЦрд░реАрджрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░рд╛ рдирд┐рдЬреА рдЬреНрдЮрд╛рди рд╣реИред рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╛ рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╢рдмреНрдж рдирд╣реАрдВ рдХрд╣рд╛ рд╣реИред рдФрд░ рдХрдм рд╕реЗ рдореИрдВ рдПрдХ рдЖрд▓рд╕реА рд╡реНрдпрдХреНрддрд┐ рд╣реВрдВ, рднрд▓реЗ рд╣реА рдореИрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рдПрдХ рдмрдЯрди рдирд╣реАрдВ рджрдмрд╛рдпрд╛, рдмрд┐рдирд╛ рд╕реАрдзреЗ рд╕рдВрдХреЗрдд рджрд┐рдП рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреНрдпрд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
рд╣рдо рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ: рд░реЛрдЯреА рдореЗрдВ рдПрдХ рд░рд╛рдЬреНрдп рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рд░реЛрдЯреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реА # рднрд╛рд╖рд╛, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╛ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдереЛрдбрд╝рд╛ рдФрд░ рдЙрдкрджреНрд░рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН: рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдХрдм рд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╢рдмреНрдж рднреА рдирд╣реАрдВ рдХрд╣рд╛, рд╣рдо рдирд╛рдо рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реИрдВ, рд╣рдо рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реИрдВ, рдЕрдм рддрдХ рдореИрдВрдиреЗ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдХреБрдЫ рднреА рд╣реЛ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдиреЗ рдХрд╛ рд╣рдореЗрд╢рд╛ рд╕рдордп рд╣реЛрдЧрд╛ред рдореИрдВ рдПрдХ рдРрд╕рд╛ рдирд╛рдо рдЪреБрдирддрд╛ рд╣реВрдВ рдЬреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рд╕рдмрд╕реЗ рдФрд╕рдд рд╕рдордЭ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛред рддреЛ рдкрд╣рд▓рд╛ рдХреЛрдб рд╣реИ:
class Bread { } class BreadMaker { public static Bread MakeBread() { return new Bread(); } }
рдЖрд╡рд╢реНрдпрдХрддрд╛ реи- рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рд░реЛрдЯреА рди рдХреЗрд╡рд▓ рдмрдирд╛рдИ рдЬрд╛рдП, рдмрд▓реНрдХрд┐ рдУрд╡рди рдореЗрдВ рдкрдХрд╛рдпрд╛ рдЬрд╛рдПрдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХрднреА-рдХрднреА рдЧреНрд░рд╛рд╣рдХ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдмрдЬрд╛рдп рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рд╣рдХ рдХреА рдЗрдЪреНрдЫрд╛рдПрдВ рдореБрдЭреЗ рд╢рд╛рд░реАрд░рд┐рдХ рдпрд╛ рдордиреЛрд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкрд╛рд╕ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд░реЛрдЯреА рдХрд╣рд╛рдБ рд╕реЗ рдорд┐рд▓реАред рдФрд░ рдЬрдм рддрдХ рдЙрд╕рдиреЗ рдРрд╕реА рдЗрдЪреНрдЫрд╛ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХреА - рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рд▓рд┐рдП - рдореИрдВ рд░реЛрдЯреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрд╕реЗ рджреЗрддрд╛ рд╣реВрдВ рдпрд╣ рдЙрд╕рдХрд╛ рдЧреНрд░рд╛рд╣рдХ рд╡реНрдпрд╡рд╕рд╛рдп рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд┐рдирдореНрд░рддрд╛ рд╕реЗ рдорд╛рдВрдЧ рд╕реЗ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЦреБрд╢реА рд╣реИ рдХрд┐ рд╡реЗ рдЖрд▓рд╕реНрдп рдХреЗ рд▓рд┐рдП рдФрд░ рдкреИрд╕рд╛ рджреЗрддреЗ рд╣реИрдВред
рдореИрдВ рдЕрднреА рддрдХ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рд╕реНрдЯреЛрд╡ рдпрд╛рдж рд╣реИред рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдУрд╡рди рдХреЛ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рди рд╣реА рдЙрдирдХреЗ рдорддрднреЗрдж, рди рд╣реА рд░реЛрдЯреА рдкрд░ рдЙрдирдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рднрд╛рд╡ред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдУрд╡рди рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛, рддреЛ рд╡реИрд╕реЗ рднреА рдЬрд▓реНрджреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ - рд░реЛрдЯреА рд╕рдорд╛рди рд╣реИред
рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд╣рдо рдорд╛рд▓рд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдЦрдж рдЪреАрдЬреЗрдВ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╣реА рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдпрд╣ рдЕрд░реНрде рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛред рдЕрд░реНрдерд╛рддреН: рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд░реЛрдЯреА рдУрд╡рди рдореЗрдВ рдкрдХрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдПрдХ рджреБрдХрд╛рди рдореЗрдВ рдирд╣реАрдВ рдЦрд░реАрджрд╛ рдЬрд╛рдПрдЧрд╛ред рдмрд╕ рд░реЛрдЯреА рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ:
class BreadMaker { public static Bread BakeBread() { return new Bread(); } }
рдЖрд╡рд╢реНрдпрдХрддрд╛ рей- рд╣рдореЗрдВ рдЧреИрд╕ рдЪреВрд▓реНрд╣рд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмрд┐рдирд╛ рдЧреИрд╕ рдХреЗ рдмреЗрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдУрд╣! рдирдИ рдЬрд╛рдирдХрд╛рд░реА рдЖ рдЧрдИ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХ рдЧреИрд╕ рднрдЯреНрдареА рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдиреНрдп рднрдЯреНрдЯрд┐рдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рд╕рдЪ рд╣реИ, рдЕрдиреНрдп рднрдЯреНрдЯрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЪреНрдЫрд╛, рдареАрдХ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╣реЛрдиреЗ рджреЗрдВред
рдЖрдЗрдП рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди 1ред
enum Oven { GasOven, OtherOven } class BreadMaker { public static double GasLevel { get; set; } public static Bread BakeBread(Oven oven) { return oven == Oven.GasOven && GasLevel == 0 ? null : new Bread(); } }
рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред рдХреЙрд▓ рд╕реЗ BakeBread () рддрдХ рдЧреИрд╕ рд╕реНрддрд░ рдЕрд▓рдЧ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЕрдВрддрд░рд╛рд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдмрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдХреНрд╖реЗрддреНрд░ рдЦреБрд▓рддрд╛ рд╣реИред рдЗрди рдХреАрдбрд╝реЗ (рдХреАрдбрд╝реЗ) рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣рдорд╛рд░реЗ рдЦреЗрдд рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддреА рд╣реИ, рдлрд┐рд░ рдЧреЗрд╣реВрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП, рд░реЛрдЯреА рдирд╣реАрдВ рд╣реЛрдЧреАред
рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЕрд▓рдЧ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдФрд░ рд╣рдо рдЗрд╕ рдкреАрдбрд╝рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ) рдЧреИрд╕ рднрдЯреНрдареА рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЧреИрд╕ рд╕реНрддрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рддрдм рдЧреИрд╕ рдХрд╛ рд╕реНрддрд░ рдУрд╡рди рдХреА рдкрд┐рдЫрд▓реА рд╕реЗрдЯрд┐рдВрдЧ рд╕реЗ рдмрдирд╛ рд░рд╣ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рдмреНрд░реЗрдб рдХреЛ рдмреЗрдХ рдХрд┐рдпрд╛ рдерд╛ред рдЕрдЧрд░ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рдорд┐рд▓реЗрдЧрд╛ред
рд╣рдо рдпрд╣ рднреА рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рд╕реНрдерд┐рд░ рд╣реИред рдЬреЛ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдЧреИрд╕ рд╕реНрддрд░ рд╣реИред рд▓реЗрдХрд┐рди рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рд╕реЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди реиред
enum Oven { GasOven, OtherOven } class BreadMaker { public static Bread BakeBread(Oven oven, double gasLevel) { return oven == Oven.GasOven && gasLevel == 0 ? null : new Bread(); } }
рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ред рдФрд░ рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдВрдЧрдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдореЗрд╢рд╛ BakeBread () рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЧреИрд░-рдЧреИрд╕ рднрдЯреНрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП GasLevel рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрджреНрдпрдкрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХрд╛рдо рдХрд░реЗрдЧреА, рдЧреИрд░-рдЧреИрд╕ рднрдЯреНрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреИрд╕рд▓реЗрд╡реЗрд▓ рдХрд╛ рдХрд╛рд░реНрдп рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░реЗрдЧрд╛ред рдФрд░ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди 3. рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдХреНрд╖рд╛рдУрдВ рдХреА рддрд░рд╣ рдкреНрд░рддреАрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рднрдЯреНрдареА рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд░реЛрдЯреА рд╣рдореЗрд╢рд╛ рдЪрд▓рддреА рд╣реИ, рдФрд░ рдЧреИрд╕ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрд╛рдиреА рджреЛ рдХрдХреНрд╖рд╛рдПрдВ, рдЖрднрд╛рд╕реА рддрд░реАрдХреЗ, рдЕрдзрд┐рднрд╛рд░ред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдореЙрдбрд┐рдлрд╝рд╛рдпрд░ рдХреИрд╕реЗ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдУрд╡рди рдЕрдкрдиреЗ рджрдо рдкрд░ рди рдмрдирд╛рдПрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ BakeBread () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛, рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред
рдФрд░ рдлрд┐рд░ рдпрд╣ рдореБрдЭ рдкрд░ (рдорд╛рд░реНрдХрд╕)! рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдмрд╕ рдпрд╣ рдХрд░реЗрдВ:
class BreadMaker { public static Bread BakeBreadByGasOven(double gasLevel) { return gasLevel == 0 ? null : new Bread(); } public static Bread BakeBreadByOtherOven() { return new Bread(); } }
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдЕрднреА рддрдХ рдПрдХ рд╢рдмреНрдж рднреА рдирд╣реАрдВ рдХрд╣рд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕реНрдЯреЛрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдРрд╕рд╛ рдХреЛрдб рдХрд╛рдлреА рд╕рдВрддреЛрд╖рдЬрдирдХ рд╣реИред
рдЖрд╡рд╢реНрдпрдХрддрд╛ рек- рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдУрд╡рди рднреА рдкреЗрдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ (рдорд╛рдВрд╕ рдХреЗ рд╕рд╛рде, рдЕрд▓рдЧ рд╕реЗ - рдЧреЛрднреА рдХреЗ рд╕рд╛рде), рдФрд░ рдХреЗрдХ рдмреЗрдХ рдХрд░ рд╕рдХреЗрдВредрдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╣рд╛рдБ, рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ! рдФрд░ рдЕрдЧрд░ рдЖрдк рдУрд╡рди рдореЗрдВ рддрд╛рдкрдорд╛рди рдХрд╛ рд╕реНрддрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕рдореЗрдВ рдЖрдЗрд╕рдХреНрд░реАрдо рд╕реЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЪреБрдЯрдХреБрд▓рд╛ред рдореИрдВ, рдорд╛рд░реНрдХрд╕, рдЧрдВрднреАрд░ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ - рддрд╛рдкрдорд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╢рдмреНрдж рдирд╣реАрдВред рдЖрдкрдХреЛ рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ, рдЧреНрд░рд╛рд╣рдХ))
рддреЛ, рдкрд╛рдИ рдФрд░ рдХреЗрдХред рдЗрддрдирд╛ рд╣реА рдирд╣реАрдВ, рджреЛ рддрд░рд╣ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣, рд╣рдо рдЬреАрд╡рди рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдВрд╕ рдкрд╛рдИ рдФрд░ рдЧреЛрднреА рдкрд╛рдИ рдХреЗрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИред рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХреАред рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ, рдХреЗрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЕрдм рддрдХ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ - рдХреЗрдХ рд▓рдЧрднрдЧ рдЪреЗрд░реА рдХреЗ рд╕рд╛рде рдкрд╛рдИ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ - рд╡реЗ рд╕рднреА рд╕рдорд╛рди рд╣реИрдВред рдХреНрдпрд╛ рдЙрдирдХрд╛ рдХреЛрдИ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ? рдирд╣реАрдВред рдХреНрдпрд╛ рдХреЛрдИ рд╢рд░реНрдд рд╣реИ? рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдЬреНрдЮрд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдФрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреНрд░рд╛рд╣рдХ рдХреА рдЗрдЪреНрдЫрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛, рдЬреЛ рдХрд▓ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛, рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП - рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рд╕рдмрд╕реЗ рд╕рд╣реА рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ред рд▓реЗрдХрд┐рди рдирд╣реАрдВред рдпрд╣ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдпрджрд┐ рд╡рд╣ред
рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рд╣рдо рдирд╛рдореЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЕрдм рд╣рдо рд░реЛрдЯреА рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдмреЗрдХрд░реА рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдкрдХрд╛ рд░рд╣реЗ рд╣реИрдВред
public enum BakeryProductType { Bread, MeatPasty, CabbagePasty, Cake } public class BakeryProduct { public BakeryProduct(BakeryProductType bakeryProductType) { this.BakeryProductType = bakeryProductType; } public BakeryProductType BakeryProductType { get; private set; } } class BakeryProductMaker { public static BakeryProduct BakeByGasOven(BakeryProductType bakeryProductType, double gasLevel) { return gasLevel == 0 ? null : new BakeryProduct(bakeryProductType); } public static BakeryProduct BakeByOtherOven(BakeryProductType breadType) { return new BakeryProduct(breadType); } }
рдЖрд╡рд╢реНрдпрдХрддрд╛ рел- рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░реЛрдЯреА, рдкрд╛рдИ рдФрд░ рдХреЗрдХ рдХреЛ рд╕реЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдПрдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХреЛрдб рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░, рд╣рдо рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреЗрдХрд░реАрдкреНрд░реЛрдбрдХреНрдЯ рдЯрд╛рдЗрдк рдХреА рдЕрджреНрднреБрдд рд╕реВрдЪреА рд╣реИред рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЕрдирд╛рдбрд╝реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд┐рд╕реА рддрд░рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ, рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рдХрд░реАрдм рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдиреБрд╕реНрдЦрд╛ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ! рдмреНрд░реЗрдб рдФрд░ рд░реЛрд▓ рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмреЗрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдирд╣реАрдВред рдФрд░ рд╣рдорд╛рд░реЗ рд╕рд╛рде, рд╢рд╛рдпрдж, рдиреБрд╕реНрдЦрд╛ рд░реЛрд▓ рдбрд┐рдЬрд╛рдЗрдирд░ рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрддред рдХреЗрд╡рд▓ рд╡рд┐рдХрд╛рд░ рд╣реА рдмрд╛рди рд╕рдВрдкрддреНрддрд┐ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЦреБрдж рд╣реА рдЗрд╕реНрддреАрдлрд╛ рджреЗ рджрд┐рдпрд╛ рд╣реЛрддрд╛ред рдХреЛрдб рдкрд░ рдпрдВрддреНрд░рд╡рддреН рд░реВрдк рд╕реЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореБрдЭреЗ рдиреБрд╕реНрдЦрд╛ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рдЕрдВрддрд░ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╛рдиреА рдиреБрд╕реНрдЦрд╛ рдмрд╛рдж рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рд╕реАрдзрд╛ рдХрд╛рд░рдг рд╣реИред рдмреЗрд╢рдХ, рдЬреАрд╡рди рдореЗрдВ, рд╣рдо рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрд╛рдирддреЗ рд╣реИрдВ - рд╡реЗ рди рдХреЗрд╡рд▓ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдЙрдирдореЗрдВ рдПрдХ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рднреА рд╣реИред рд▓реЗрдХрд┐рди рдкрд░рд╡рд╛рд╣ рдХрд┐рд╕реЗ рд╣реИ? рдХреНрдпрд╛ рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА? рдирд╣реАрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реБрдЖред рд╣рдореЗрдВ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА - рд╣рдо рдмрд╛рдж рдореЗрдВ рдмрд╛рдВрдз рджреЗрдВрдЧреЗ, рд╣рдо рдХреБрдЫ рдХреЗ рд╕рд╛рде рдЖрдПрдВрдЧреЗред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рд░рдЦрд╛ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рд░рд╣реЗрдЧреА, рдФрд░ рдЧрдгрдирд╛ рдПрдХ рдиреБрд╕реНрдЦрд╛ рд░рд╣реЗрдЧреАред рд╣рдорд╛рд░реА рдмреЛрд▓реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реВрдЪреА рдХрд╛ рдПрдХ рд╕рдореВрд╣ рди рдмрдирд╛рдПрдВред рдХрд╛рд░реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рдЯреАрдХ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИред рд╕рдордЭреМрддрд╛?
public enum Recipe { Bread, MeatPasty, CabbagePasty, Cake } public class BakeryProduct { public BakeryProduct(Recipe recipe) { this.BakeryProductType = recipe; } public Recipe BakeryProductType { get; private set; } } class BakeryProductMaker { public static BakeryProduct BakeByGasOven(Recipe recipe, double gasLevel) { return gasLevel == 0 ? null : new BakeryProduct(recipe); } public static BakeryProduct BakeByOtherOven(Recipe recipe) { return new BakeryProduct(recipe); } }
рдЖрд╡рд╢реНрдпрдХрддрд╛ рем"рд╣рдореЗрдВ рдИрдВрдЯреЛрдВ рдХреЛ рдУрд╡рди рдореЗрдВ рдЬрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред"рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдпрджрд┐ рдЖрдк рд╕рдЪрдореБрдЪ рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдФрд░ рд╕рднреА рд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдИрдВрдЯ рдХреЗрдХ рдпрд╛ рдмреНрд░реЗрдб рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдордЬреЗрджрд╛рд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рдИрдВрдЯ рдЬрд╛рдо рдкрд╛рдИ рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдорд╛рдВрд╕ рдкрд╛рдИ рд╕реЗред рдЬреИрд╕реЗ рд░реЛрдЯреА рд╕реЗред рдЗрд╕рд▓рд┐рдП, рдмрд╣реБрдд рд╣реА рдЕрддрд┐рд░рдВрдЬрд┐рдд, YAGNI рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдХреЗрд╡рд▓ "рдУрд╡рди рдЙрддреНрдкрд╛рдж", рдЬреЛ рдПрдХ рдИрдВрдЯ рднреА рд╣реИ, рдЖрджрд┐ рдореЗрдВ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рде рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЗрд╕рдХрд╛ рдкреВрд░рд╛ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХрд╛ рд░рд╛рдЬреНрдп рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░) рдФрд░ рдХреНрдпрд╛ рд╣реИ рдирд┐рдЬреА (рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░)ред рдпрджрд┐ рди рддреЛ рдПрдХ рд╣реИ рдФрд░ рди рд╣реА рджреВрд╕рд░рд╛ рд╣реИ, рддреЛ рдПрдХ рдЧрдгрдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рд╡рд░реНрдЧ рдФрд░ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред
рдХреНрдпрд╛ рдЖрдк рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдиреЗ рдХреЛрдб рдореЗрдВ рд╣реЙрд░рд░ рджреЗрдЦрд╛ рдерд╛? рд╢рд╛рдпрдж рдЗрд╕ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ? рд╣рд╛рдБ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдмреЛрд░рд┐рд╕ рдХрд╛ рдХреЛрдб рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рд╡реЙрд▓реНрдпреВрдо рдЕрдзрд┐рдХ рд╣реИ, рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдгред рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛? рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдгред
рдмреЗрд╢рдХ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдореВрд▓ рдкрдж рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдереАрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЛ рд╡рд┐рд╕реНрддреГрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди YAGNI рд╢реИрд▓реА рдХреЛ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЖрдЧреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдирд┐рднрд╛рддреЗ рд╣реИрдВред
рдЖрд╡рд╢реНрдпрдХрддрд╛ 7"рддреБрдордиреЗ рдХреИрд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛?" рд╣рд░ рдЪреВрд▓реНрд╣рд╛ рдИрдВрдЯ рдирд╣реАрдВ рдЬрд▓рд╛ рд╕рдХрддрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдУрд╡рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдЕрдЪреНрдЫрд╛, рдареАрдХ рд╣реИред рд╣рдо рдЧрдгрдирд╛ (рд╡реНрдпрдВрдЬрдиреЛрдВ?) рд╕реЗ рдИрдВрдЯ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд╛рдо рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдЕрд▓рдЧ рдЦрд╛рд▓реА рдИрдВрдЯ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВред рдФрд░ рдПрдХ рдирдИ рд╡рд┐рдзрд┐:
public static Brick MakeBrickByFurnace() { return new Brick(); }
рд╡реИрд╕реЗ, рддрд░реАрдХреЛрдВ рдХреА рдкреНрд░рдЪреБрд░рддрд╛ рдЬрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ рдмрд┐рд▓реНрдХреБрд▓ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдХреБрдЫ рд▓рдЪреАрд▓реЗ рддрд░реАрдХреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ, рдЕрдЧрд░ рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЕрднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд▓рдЪреАрд▓реЗрдкрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХрдо рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЕрдХреНрд╕рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдХреЛрдб рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрд╡рд╕рд░ рдкрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рдВ, рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд╕рд╛рде C # рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдбрд┐рдХреЙрдЙрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдмрд╣реБрдд рдорд╛рдВрдЧ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдорд╛рд░реНрдХрд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЦреЗрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдЖрд╡рд╢реНрдпрдХрддрд╛ 8- рдкреНрд░рддреНрдпреЗрдХ рдиреБрд╕реНрдЦрд╛ рдореЗрдВ рдЙрддреНрдкрд╛рджреЛрдВ рдФрд░ рдЙрдирдХреА рдорд╛рддреНрд░рд╛ (рд╡рдЬрди) рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдорд╛рдВрдЧ рдореЗрдВ рд╡реНрдпрдВрдЬрди рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВредрдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдкрд╣рд▓рд╛ рдЦреВрди рдЬреЛ рдмреЛрд░рд┐рд╕ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдЖрдЗрдП рднрдпрд╛рдирдХ рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдпрд╣рд╛рдВ рдмрдирдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ рдФрд░ рд╣рдореЗрдВ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реИ?
рдиреБрд╕реНрдЦрд╛ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрд╛рдж рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред рдиреБрд╕реНрдЦрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рди рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рдмрдирд╛рдПрдЧрд╛ (рдпрд╛ рдПрдХ рд╣реА рдЪреАрдЬрд╝, рдЦреБрдж рдХрд╛ рдирд╛рдо), рдмрд▓реНрдХрд┐ рдЙрдирдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рднреАред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдПрдХ рд╕рдЦреНрдд рд╕реЗрдЯ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреБрд╕реНрдЦрд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдпрд╣ рдмрджрд▓рддрд╛ рдирд╣реАрдВ рд╣реИред (рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ YAGNI рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреЛрд╕реНрдЯ - рдирд╣реАрдВ "рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд░рд┐рдЬрд░реНрд╡ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ!" рдирд╣реАрдВ рдЕрдЪрд╛рдирдХ, рдЖрдЬ - рдпрд╣ рдЖрдЬ рд╣реИ, рдФрд░ рдХрд▓ - рдпрд╣ рдХрд▓ рд╣реИ)ред
рдпрд╛рдиреА рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рдХрд┐ рдиреБрд╕реНрдЦрд╛ рдореЗрдВ рдЙрддреНрдкрд╛рдж рдФрд░ рд╡рдЬрди рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рддрдп рдорд╛рдорд▓рд╛ рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рдФрд░ рд╕рдЦреНрдд рд╣реИред рдФрд░ рд╣рдо рд╣рдореЗрд╢рд╛ рдЕрдзрд┐рдХ рд╕реАрдорд┐рдд рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдпрд╣ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░рд▓ рдФрд░ рдХрдареЛрд░ рд╣реЛрдирд╛ рд╣реИред
рдФрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдПрдХ рд╕рдЦреНрдд рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдиреБрд╕реНрдЦрд╛ - рдмреЗрд╣рддрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдиреБрд╕реНрдЦрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рд▓рд┐рдЦрдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рд╕рд┐рд░реНрдл рд╕реНрдерд┐рд░рд╛рдВрдХ рд░рдЦреЗрдЧрд╛ред
рдФрд░ рдХреБрдЫ рдФрд░ рд╡рд┐рдЪрд╛рд░ред рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓, рдХреЛрдб рдореЗрдВ рд╡реНрдпрдВрдЬрди рдХреЗрд╡рд▓ рдПрдХ рджрд┐рдпрд╛ рд╣реБрдЖ рд╕рдВрдЪрдп рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдВрдХрд▓рди рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рдЕрдЧрд░ рдХреЛрдИ рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЬрд╛рд╣рд┐рд░ рд╣реИ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдирд╛ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕реЗ, рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рд╕рднреА рд╡реНрдпрдВрдЬрдиреЛрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡реЗ рд╕реАрдзреЗ рдХреЛрдб рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЖрдк рдПрдХ рдПрдиреНрдпреВрдорд░реЗрд╢рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд┐рдирд╛ рдирдпрд╛ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред рдпрд╣рд╛рдБ рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рд░реЗрд╕рд┐рдкреА рдирд╛рдо рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рд░реЗрд╕рд┐рдкреА рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреБрдирд┐рдпрд╛ рдХрд┐рддрдиреА рдЕрд╕реНрдерд┐рд░ рд╣реИред рдЕрдм рд╕реВрдЪреА рдХреЗрд╡рд▓ рдиреБрд╕реНрдЦрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЪреБрдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╕ рддрд░рд╣:
public enum RecipeName { Bread, MeatPasty, CabbagePasty, Cake } public enum RecipeProduct { Salt, Sugar, Egg, Flour } public class Recipe { private Recipe() { } public RecipeName Name { get; private set; } public IEnumerable<KeyValuePair<RecipeProduct, double>> Products { get; private set; } private static Dictionary<RecipeName, Dictionary<RecipeProduct, double>> predefinedRecipes; static Recipe() { predefinedRecipes = new Dictionary<RecipeName, Dictionary<RecipeProduct, double>> { { RecipeName.Bread, new Dictionary<RecipeProduct, double> { {RecipeProduct.Salt, 0.2}, {RecipeProduct.Sugar, 0.4}, {RecipeProduct.Egg, 2.0}, {RecipeProduct.Flour, 50.0} } } .................. }; } public static Recipe GetRecipe(RecipeName recipeName) { Recipe recipe = new Recipe(); recipe.Name = recipeName; recipe.Products = predefinedRecipes[recipeName]; return recipe; } }
рдЖрдкрдХреЛ рдХреБрдЫ рднреА рддреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдПрдХ рдЙрддреНрдкрд╛рдж рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреБрд╕реНрдЦрд╛ рдХрд╛ рдирд╛рдо рдЕрднреА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╣рдо рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рд╣рдо рдЦреБрдж рдиреБрд╕реНрдЦрд╛ рдкрд░ рдкрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдЗрд╕ рдХреЛрдб рдореЗрдВ, рд╣рдордиреЗ рдмрд╕ рдПрдХ рд░реЗрд╕рд┐рдкреА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рд░реЗрд╕рд┐рдкреА рдХрд╛ рдирд╛рдо рдЬреБрдбрд╝рд╛ред рдпрд╣ рдиреБрд╕реНрдЦрд╛ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ "рдЦрд░рд╛рдм" рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдХреЛрдИ рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ - рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдХрд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рд╡рд░реНрдЧ рд╡рд░реНрдЧ рдмрди рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд░рд┐рд╕ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ YAGNI рд╣реИ, рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рд╕реЗ рдбрд░рддреЗ рдирд╣реАрдВ рд╣реИрдВред
рдЖрд╡рд╢реНрдпрдХрддрд╛ репрд╣рдорд╛рд░реЗ рдЕрдирд┐рдпреЛрдЬрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд┐рд▓реЗ рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдЗрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
"рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдиреБрд╕реНрдЦрд╛ рдмрджрд▓ рдЬрд╛рдПред" рдФрд░ рд╕реНрдЯреЛрд╡ рдХреБрдХ рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдиреБрд╕реНрдЦрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрдХрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛редрд╣рдо рдПрдХ рдзреНрд░реБрд╡реАрдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ:
- рдХреИрд╕реЗ рдмрджрд▓реЗрдВ?
- рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд░рд╕реЛрдЗрдпрд╛ рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЛ рддрдп рдХрд┐рдпрд╛ рд╣реИ? рдФрд░ рд╡рд╣ рдПрдХ рдЕрд▓рдЧ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЕрдВрдбреЗ, рдЪреАрдиреА рдЖрджрд┐ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
- рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдХрд┐рд╕ рддрд░рд╣ рдХреА рд░реЛрдЯреА рдорд┐рд▓реЗрдЧреА? рдХреНрдпрд╛ рд╣рдореЗрдВ рдХреБрдЫ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП? рд░реЛрдЯреА, рдХреЗрдХ рдпрд╛ рдХреЗрдХ? рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЕрдЧрд░ рд╡реНрдпрдВрдЬрди рдЕрд▓рдЧ рд╣реИрдВ, рддреЛ рд░рд╕реЛрдЗрдпрд╛ рдХреБрдЫ рдФрд░ рдЦрд╛рдПрдЧрд╛ред
- рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрдХ рд╕реНрд╡рд╛рдж рдореЗрдВ рдЕрд▓рдЧ рд╣реИ, рдЕрдзрд┐рдХ рдореАрдард╛, рдХрдо рдореАрдард╛ред рд░реЛрдЯреА рднреАред рддреЛ, рдХреБрдЫ рд╣рдж рддрдХ, рд╡реНрдпрдВрдЬрдиреЛрдВ рдореЗрдВ рдЕрдВрддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд╕реВрдЪреА рд╕реЗ рдХреБрдЫ рдЙрддреНрдкрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред
- рдпрд╛рдиреАред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдХреБрдХ рдХреА рд░реЗрд╕рд┐рдкреА рдореЗрдВ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдирд┐рдХрдЯрддрдо рдиреБрд╕реНрдЦрд╛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
- рд╣рд╛рдВредрдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рд╢реНрдЪрд┐рдд рд╡реНрдпрдВрдЬрди рд╣реИрдВред рдЕрдм рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЛ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦреЗрдВред рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдкреВрдЫрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ред рдЕрдиреНрдпрдерд╛, рд╡рд╣ рд╣рдорд╛рд░реЗ рдорд╛рдирдХреЛрдВ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рднреА рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдмрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИрдВ:
private Recipe() { } public Recipe(IEnumerable<KeyValuePair<RecipeProduct, double>> products) { Dictionary<RecipeProduct, double> copiedProducts = new Dictionary<RecipeProduct, double>(); foreach (KeyValuePair<RecipeProduct, double> pair in products) { copiedProducts.Add(pair.Key, pair.Value); } this.Products = copiedProducts; }
рдПрдХ рджреВрд╕рд░рд╛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╣реИ C # рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ - тАЛтАЛрдбрд┐рдлреЙрд▓реНрдЯ рд▓рд┐рдВрдХреНрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ред рдХрдХреНрд╖рд╛ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ рдЖрдк рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рдмрд╛рдж рдореЗрдВ рдиреБрд╕реНрдЦрд╛ рдХреЗ рдЕрд╡рдпрд╡реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реА рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдорд╛рдирдХ рдУрдУрдкреА рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рд╢реЗрд╖ рдмрдЪреЗ рд▓реИрдореНрдмреНрдбрд╛ рдФрд░ рдЬрд╝реЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рддрд╛рдХрд┐ рдПрдХ рдмрдбрд╝рд╛ рджрд░реНрд╢рдХ рд╕рдордЭ рд╕рдХреЗ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреЛрдб рдХреЛ рдЕрд▓рдЧ рдФрд░ рд╕рд░рд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп рд╕реНрд╡рдпрдВ YAGNI рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рдХреЛрдб рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реИ, рдФрд░ рд╢рд╛рд░реНрдк рдХреА рд╡рд┐рднрд┐рдиреНрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдирд╛ рд╣реИред рдмреЗрд╢рдХ, рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рддрд░реАрдХреЗ рднрд╛рд╖рд╛ рдФрд░ рдЙрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред
рджреВрд╕рд░рд╛ рдирд┐рд░реНрдорд╛рдг, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдиреБрд╕реНрдЦрд╛ рдХрд╛ рдирд╛рдоред рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдЙрддреНрдкрд╛рдж рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдХреЛ рджрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рд╡реЗ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╡рд╣рд╛рдБ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдирд┐рдХрдЯрддрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "рд╕реНрдорд╛рд░реНрдЯ" рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд╡реНрдпрд╛рдореЛрд╣ рд╕реЗ рдкреАрдбрд╝рд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ рдФрд░ рд╕реГрдЬрди рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ, рд╡рд┐рдирд╛рд╢ рдирд╣реАрдВред
рд╣рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рдХрдЯрддрд╛ рд╡рд┐рдзрд┐ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдмрд╕реЗ рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рд▓рд┐рдЦреЗрдВрдЧреЗред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХрд╛ рдПрдХ рдЕрд▓рдЧ "рд╡рдЬрди" рд╣реИред рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрдЫ рд╡рдЬрд╝рди рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдмрд╛рдж рдореЗрдВ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
private double GetDistance(Recipe recipe) { Dictionary<RecipeProduct, double> weights = new Dictionary<RecipeProduct, double>(); weights[RecipeProduct.Salt] = 50; weights[RecipeProduct.Sugar] = 20; weights[RecipeProduct.Egg] = 5; weights[RecipeProduct.Flour] = 0.1; double sum = 0.0; foreach(KeyValuePair<RecipeProduct, double> otherProductAmount in recipe.Products) { var productAmounts = this.Products.Where(p => p.Key == otherProductAmount.Key); if (productAmounts.Count() == 1) { sum += Math.Pow(productAmounts.First().Value - otherProductAmount.Value, 2) * weights[otherProductAmount.Key]; } else { return double.MaxValue; } } return sum; } private RecipeName GetRecipeName() { IEnumerable<Recipe> etalons = ((RecipeName[])Enum.GetValues(typeof(RecipeName))) .Select(recipeName => Recipe.GetReceipt(recipeName)); IEnumerable<KeyValuePair<RecipeName, double>> recipeNamesWithDistances = etalons .Select(e => new KeyValuePair<RecipeName, double>(e.Name, GetDistance(e))); double minDistance = recipeNamesWithDistances.Min(rd => rd.Value); if (minDistance == double.MaxValue) { throw new Exception(" "); } return recipeNamesWithDistances.First(rd => rd.Value == minDistance).Key; }
рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЙрд▓ рдореЗрдВ, рдХреНрд░рдорд╢рдГ рдирд╛рдордХрд░рдг рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ:
public Recipe(IEnumerable<KeyValuePair<RecipeProduct, double>> products) { Dictionary<RecipeProduct, double> copiedProducts = new Dictionary<RecipeProduct, double>(); foreach (KeyValuePair<RecipeProduct, double> pair in products) { copiedProducts.Add(pair.Key, pair.Value); } this.Products = copiedProducts; this.Name = GetRecipeName(); }
рдпрд╣ рд╣рдореЗрд╢рд╛ рдордХреНрдЦреА рдкрд░ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХрд┐рд╕реА рдХреЛ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдФрд░ рдЧреИрд░-рдирд┐рд╢реНрдЪрд┐рдд рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╛рдордХрд░рдг рдХреЗ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд░реНрддрдорд╛рди рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рддреЛрдбрд╝рд╛ред рдФрд░ рдЕрднреА рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░ рдЪреБрдХреЗ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдФрд░ рдЕрдиреБрдорд╛рди рди рд▓рдЧрд╛рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд░рд╛рд╡рдирд╛ рд╣реИред рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рд╛рдзрд╛рд░рдг рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдХреЛрдб рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реАред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд░рд╛рдХреНрд╖рд╕ рд╣реИ рдЬрд┐рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдЕрдм рдпрд╣ рдпрдереЛрдЪрд┐рдд рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдХреЛрдб рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдЬрд╝реЗрдиреЗрд░рд┐рдХреА рдФрд░ рд▓реИрдореНрдмреНрдбрд╛ рдореЗрдВ рднрд╛рдЧ рд╕рдХрддрд╛ рд╣реВрдВред рддреЛ рдХреЛрдб рдЫреЛрдЯрд╛ рдФрд░ рдХреНрд▓реАрдирд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЕрдкрд░рд┐рдЪрд┐рдд рдкрд╛рдардХреЛрдВ рдХреА C # рдФрд░ рд▓рдВрдмреЛрджрд░ рдХреА рд╕рдордЭ рдХреЛ рдЪреЛрдЯ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗрдЧреАред рдмреЗрд╢рдХ, рдЗрд╕реЗ рдФрд░ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдзрд┐рдХ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реЗ рдмрдВрдзреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред YAGNI рдпрд╛ рдирд╣реАрдВ? рдпрд╣рд╛рдВ рд╣рдо рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдЧреНрд░рд╛рд╣рдХ рдХреЛ рддреБрд░рдВрдд рдПрдХ рджреГрд╢реНрдпрдорд╛рди рдкрд░рд┐рдгрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕рд╛ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдмрд╛рдж рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕ рдПрдХ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЦрд░реНрдЪ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдЫ рд▓рд┐рдЦреЗрдВ рдФрд░ рдЪреБрдиреЗрдВред рдпрд╛ рдХреЛрдб рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рднреА рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдирд┐рдХрдЯрддрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдЧрд╛ред
рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╡рд╕рд╛рдп, рдЕрдм рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдиреБрд╕реНрдЦрд╛ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╡реНрдпрдВрдЬрдиреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╛рдиреА рдЗрд╕ рддрд░рд╣:
public class BakeryProduct { public BakeryProduct(Recipe recipe) { this.BakeryProductType = recipe.Name; } public RecipeName BakeryProductType { get; private set; } }
рдФрд░:
public static BakeryProduct BakeByGasOven(Recipe recipe, double gasLevel) { return gasLevel == 0 ? null : new BakeryProduct(recipe); } public static BakeryProduct BakeByOtherOven(Recipe recipe) { return new BakeryProduct(recipe); }
рдпрд╣рд╛рдВ рдкрд░ рд░рд┐рдлрд▓реЗрдХреНрдЯрд┐рдВрдЧ рдЕрдзрд┐рдХ рддрдирд╛рд╡ рд╕реЗ рджреВрд░ рд╣реИред
рдЖрд╡рд╢реНрдпрдХрддрд╛ резрежрдХрдкрдЯреА рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдХрд┐рд╕реА рддрд░рд╣ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдФрд░ рд╕рдмрд╕реЗ рджрд░реНрджрдирд╛рдХ рдЬрдЧрд╣ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рд╕реНрддреБрдд рд╣реИред
рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 9 рдмрд╛рд░ рдЕрдкрдардиреАрдп рд╕реНрдкреЗрдЧреЗрдЯреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдордиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░рд╛ рдХреЛрдб рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдмреЛрд░рд┐рд╕ рдЙрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдЬрд┐рд╢ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рдФрд░ рд╡реЗ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред- рдФрд░ рдЕрдм рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рднрдЯреНрдЯрд┐рдпреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдЪреАрдЬреЗрдВ рдПрдХ рд╕реНрдЯреЛрд░ рдореЗрдВ рдмреЗрдЪреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЙрддреНрдкрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдЯреЛрд░ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕рд╛рдорд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдЙрддреНрдкрд╛рдж рдХреА рдПрдХ рдХреАрдордд рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕реНрдЯреЛрд░ рдореЗрдВ рд╕рднреА рд╕рд╛рдорд╛рдиреЛрдВ рдХреА рдХреАрдордд рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реА рд╕рдордп, рдИрдВрдЯ рдФрд░ рд░реЛрд▓ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢реНрд░рдорд┐рдХ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдкрддрд╛ рд╣реИред рд╡реЗ рд╕реНрдЯреЛрд╡ (рдЕрдореВрд░реНрдд)) рдореЗрдВ рдмрд╕ рдХрдЪреНрдЪреЗ рдорд╛рд▓ рднрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрддреНрдкрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рдорд╛рд▓ рдХреЛ рд╕реНрдЯреЛрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИредрдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдХрднреА-рдХрднреА рд╣рдорд╛рд░реЗ рдУрд╡рди рдореЗрдВ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдЪреАрдЬреЗрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рдереАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдИрдВрдЯред рд░реЛрд▓ рдХреЗ рд╕рд╛рде рдЙрдирдХрд╛ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рдЬ рдирд╣реАрдВ рд╣реИред рдФрд░ рдареАрдХ рд╣реА рддреЛ, рд╣рдо рдХреИрд╕реЗ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рдХреНрдпрд╛ рд╕рдорд╛рдирддрд╛ рд╣реИ? рдирд╣реАрдВ, рдмреЗрд╢рдХ, рдЬреАрд╡рди рдореЗрдВ рд╣рдо рдИрдВрдЯреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рд░реЛрдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдЙрдиреНрд╣реЗрдВ рдмрд╛рдж рдореЗрдВ рдПрдХ рдЙрддреНрдкрд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдирд╛ тАЛтАЛрдЪрд╛рд╣реЗрдВрдЧреЗред рдлрд┐рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдУрд╡рд░рд▓реИрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдИ рдПрдХ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧреАред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреЛрдИ рдкреВрд░реНрд╡рдЬ рдирд╣реАрдВ рдерд╛ред рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПредрдлрд┐рд░, рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрд▓реНрдХрд┐ рдмреБрд░рд╛рдИ рд╣реИред рдХреЛрдб рдХреА рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрди рдХреА рддрд░рд╣ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдзрд┐рдпрд╛рдВ рдереАрдВ рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИрдВ рдмреЗрд╣рддрд░ рд╣реИ, рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдо рддреБрд░рдВрдд рдПрдХ рднрдЯреНрдЯреА рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдХрд┐рд╕реА рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред рдмреЛрд░рд┐рд╕ рдХреИрд╕реЗ рд╣реБрдПред рдФрд░ рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдЙрддреНрдкрд╛рдж рдЬрд╛рд░реА рдХрд░реЗрдЧреАред рдЙрддреНрдкрд╛рдж рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реИред рдЬрд┐рд╕рдХрд╛ рдореВрд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рдЕрд╡рд╕реНрдерд╛ рд╣реЛред рд▓реЗрдХрд┐рди рд╣рдо, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд╛рдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВред рдпрд╣рд╛рдВ, рдУрд╡рди рдЙрддреНрдкрд╛рдж рдмрдирд╛рддрд╛ рд╣реИред рдкрд╛рдИ рдирд╣реАрдВред рдпрд╛рдиреА
рдпрд╣ рдкрд╛рдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрднреА рд╣реЛрддреА рд╣реИ рдЬрдм рд╣рдо рдЗрд╕реЗ рдУрд╡рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдПрдХ рдЙрддреНрдкрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЕрдЪрд╛рдирдХ рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдереА рдХрд┐ рдЗрд╕рдореЗрдВ рдХрд┐рддрдирд╛ рдорд╛рдВрд╕ рдерд╛ред рдФрд░ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдореЗрдВ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдорд╛рдВрд╕ рдкрд╛рдИ рдореЗрдВред рдлрд┐рд░ рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХрд┐рд╕реА рдЙрддреНрдкрд╛рдж рд▓рд┐рдВрдХ рдХреЛ рдЙрд╕рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдВрдХ рдкрд░ рд▓рд╛рдПрдВредрдФрд░ рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдмрд╕ рдкрд░реЗрд╢рд╛рдиреА рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рддрдХ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдм рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╛рдиреА
рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреА рдЧрдВрднреАрд░рддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрд╣ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдХреМрди рд╕рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдпрд╛ рдбрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рд╢рд╛рдЦрд╛рдПрдВ рдмрдирд╛рдПрдВ, рдпрджрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реИ, рддреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдлреЗрдВрдХ рджреЗрдВ рдЖрджрд┐редрдпрд╛рдиреА
рд╕рдордпрдкреВрд░реНрд╡ рд▓рдЪреАрд▓рд╛рдкрди рди рдХреЗрд╡рд▓ рдлрд╛рдпрджреЗрдордВрдж рд╣реИ, рдмрд▓реНрдХрд┐ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рд╣реИредрд▓реЗрдХрд┐рди рдЕрдм рд╣рдореЗрдВ рдЕрд╕рд▓реА рдХреА рдЬрд░реВрд░рдд рд╣реИредрдЗрд╕рд▓рд┐рдП, рд╣рдо рдЦреБрдж рдЗрд╕ рд╕рдордп рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ: тАЬрд▓реЛрдлреНрд╕ рдХреЛ рдиреБрд╕реНрдЦрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛрдИ рдИрдВрдЯ рдирд╣реАрдВред рдИрдВрдЯреЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдУрд╡рди рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдИрдВрдЯреЗрдВ (рд░реЛрд▓ рдирд╣реАрдВ) рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рд╣рдореЗрдВ рдХрдЪреНрдЪреЗ рдорд╛рд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдорд╛рд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрдиреНрд╕ рдФрд░ рдИрдВрдЯреЗрдВ рдПрдХ рдХрдореЛрдбрд┐рдЯреА рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рд╕рдХреА рдХреАрдордд рд╣реЛрддреАрд╣реИред рдмрдиреНрд╕ рдФрд░ рдИрдВрдЯреЛрдВ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рдЬ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ - рдорд╛рд▓ред public abstract class Article { public double Price { get; private set; } public Article(double price) { this.Price = price; } }
рдЗрдирд╣реЗрд░рд┐рдЯ рдХреНрд▓рд╛рд╕реЗрд╕: public class BakeryProduct : Article { public BakeryProduct(Recipe recipe, double price): base(price) { this.BakeryProductType = recipe.Name; } public RecipeName BakeryProductType { get; private set; } } public class Brick: Article { public Brick(double price) : base(price) { } }
рдФрд░ рд╣рдо рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдореВрд▓реНрдп рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИредрдХреБрдЫ рдЗрд╕ рддрд░рд╣:
public static BakeryProduct BakeByOtherOven(Recipe recipe, double price) { return new BakeryProduct(recipe, price); }
рдпрд╣ рд▓рдЧрднрдЧ рдЖрдзреА рд▓рдбрд╝рд╛рдИ рд╣реИред рдмрд╣реБрдд рдХрдо рдЪреАрдЬреЗрдВ рдмрдЪреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрдж рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд┐рд░реНрдл рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдПрдХ рдРрд╕рд╛ рддрд░реАрдХрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рдорд╛рд▓ рд╡рд╛рдкрд╕ рдЖ рд╕рдХреЗред рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рдХрдЪреНрдЪреЗ рдорд╛рд▓ рдФрд░ рд╡рд╛рд░рд┐рд╕ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рд╣реЛрдЧрд╛ - рд░реЛрд▓ рдХреЗ рд▓рд┐рдП рдХрдЪреНрдЪрд╛ рдорд╛рд▓ рдФрд░ рдИрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдЪреНрдЪрд╛ рдорд╛рд▓ред рд░реЛрд▓ рдХреЗ рд▓рд┐рдП рдХрдЪреНрдЪреЗ рдорд╛рд▓, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдПрдХ рдиреБрд╕реНрдЦрд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдХрдХреНрд╖рд╛рдПрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдмрд╕ рдорд╛рдкрджрдВрдбреЛрдВ (рдЧреИрд╕ рд╕реНрддрд░, рдиреБрд╕реНрдЦрд╛, рдЖрджрд┐) рдХреЗ рдПрдХ рд╕реЗрдЯ рд╕реЗ рд╣рдо рдЕрдЬреАрдм рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдмрдирд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдЪреНрдЪреЗ рдорд╛рд▓ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рдордиреНрд╡рд┐рдд рдкреИрдХрд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВредрдорд╛рд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо, рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ, рдЬреЛ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХрдЪреНрдЪреЗ рдорд╛рд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рдпрд╛ рд╣реЛрддрд╛ред рдЧрдгрдирд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб рдХреЛ рд░реЛрдХрдирд╛ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рддреА рд╣реИ, рдЖрдк рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдореВрд░реНрдд рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЗрд╕рдореЗрдВ рдЕрддрд┐рднрд╛рд░рд┐рдд рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдЪреНрдЪреЗ рдорд╛рд▓ рдФрд░ рдПрдХ рд╕реНрдЯреЛрд╡ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рдХрдЪреНрдЪреЗ рдорд╛рд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЖрдиреЗ рдкрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реИред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдХрд╡рд░ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реИред рддрд░реАрдХреЗ рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЫреЛрдЯрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рд╣рдореЗрд╢рд╛ рд╕рднреА рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд▓рдЪреАрд▓реА рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХрд╛рдлреА рдХрдард┐рди рд╣реИред рдмреЛрд░рд┐рд╕ рдХрд╛ рдХреЛрдб рдПрдХ рддрд┐рд╣рд╛рдИ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдлрд┐рд╕рд▓ рдЧрдпрд╛ред рдФрд░ рдпрд╣ рдПрдб рдЗрдирдлрд┐рдирд┐рдЯрдо рдореЗрдВ рддрдмреНрджреАрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рд╣рдореЗрд╢рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред YAGNI рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╣ рдпрд╣ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╕реНрдкрд░реНрд╢ рди рдХрд░реЗрдВред рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдФрд░ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, YAGNI рд╕рд┐рджреНрдзрд╛рдВрдд рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рддрднреА рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдХрд╛рд╕ рддрдХрдиреАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИредрд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдкреЛрд╕реНрдЯ рдореЗрдВ рдХреЛрдб рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рд▓рдХреНрд╖реНрдп рдХреЗрд╡рд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рджрд┐рдЦрд╛рдирд╛ рдерд╛ред рдореБрдЭреЗ рдкреВрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдХрдИ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде, рдФрд░ YAGNI рд╕рдорд░реНрдердХ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рд╣рд░ рдХрд┐рд╕реА рдХрд╛ рдЕрдкрдирд╛ рдирд┐рдЬреА рдЕрдиреБрднрд╡ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрдкрдиреА рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ рддрдХрдиреАрдХреЗрдВ рд╣реИрдВред рдФрд░ рдпрд╣ рдЕрднреА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдзрди рд╣реИред