рдкрд░рд┐рдЪрдп
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреБрдЫ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рд╣реИрдВ:
- рдЙрдкрдпреЛрдЧреА рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдПрдВ - рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрд░ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЗрдВрд╕реНрдЯреЙрд▓рд░ред
- рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рдн рджрд┐рдЦрд╛рдПрдВ рдФрд░ рд╕рд┐рдЦрд╛рдПрдВ рдХрд┐ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреИрд╕реЗ рдмрдирд╛рдПрдВред
рд▓реЗрдЦреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдореИрдВ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЛ рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдкрдиреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рдХрд╛рд░рдг рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓рд░ (рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреЗ рд╕рд╛рде) рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рд╡рд┐рдХрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдореЗрдВ рдХрдореА рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рд╡рд┐рд╖рдп рдЕрд▓рдЧ рд╣реИред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд╣рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реЛрдВрдЧреА:
- рд▓реЗрди-рджреЗрди рддрдВрддреНрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдФрд░ рд▓реЗрдирджреЗрди рдореЗрдВ рди рдХреЗрд╡рд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рд▓реЗрдирджреЗрди рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд▓реЗрдирджреЗрди рднреА рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдУрдПрд╕ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдЬреБрдбрд╝реЗ рд▓реЗрдирджреЗрди, рдЬреИрд╕реЗ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЖрджрд┐ред
- рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдмреЗрд╕ рдХреА рд╡реНрдпрд╛рдкрдХрддрд╛, рдпрд╛рдиреА рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдорд╛рдВрдб (рдСрдкрд░реЗрд╢рдВрд╕) рдХреЛ рдЬреЛрдбрд╝рдирд╛, рд▓реЗрдирджреЗрди рд╕рдорд░реНрдерди рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рджреЛрдиреЛрдВред
рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕рдиреНрдирд┐рдХрдЯрди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рд╡рд┐рд╡рд░рдгред
- рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рдордирдорд╛рдирд╛ рд╕реЗрдЯред
рдореИрдВ рдПрдХ XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдорд╛рдВрдб рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддрд╛ рд╣реВрдВ рдХрд┐ .NET рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ XML рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдХреНрд░рдорд╛рдВрдХрд┐рдд / рдбреАрд╕рд░реНрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕рд░рд▓ рдХрдХреНрд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рджреЗрд░реА рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдХреЗ рдореБрдЦреНрдп рддрд░реНрдХ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдЧрд╛ред рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВред
рдкреИрдХреЗрдЬ рд╕реНрд╡рдпрдВ рдПрдХ TAR рдЖрд░реНрдХрд╛рдЗрд╡ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реЛрдЧрд╛, рдЬреЛ рд╕рдВрднрд╡рддрдГ GZIP рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдЕрдзреАрди рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЬрдм рдкреИрдХреЗрдЬ рдХреЗ рднрдВрдбрд╛рд░рдг рд╡рд┐рдзрд┐ (рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╕рдВрдкреАрдбрд╝рди рд╡рд┐рдзрд┐) рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рд╣рдореЗрдВ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рдиреНрдпреВрдирддрдо рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЖрдЗрдП рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЗ рд╕реЗрдЯ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВред
- рдлрд╝рд╛рдЗрд▓ рд╕рдВрдЪрд╛рд▓рди
- рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рдВрдЪрд╛рд▓рди
- IIS рд╕рд░реНрд╡рд░ рдкреНрд░рдмрдВрдзрди
- рд╢рд╛рдпрдж рдХреБрдЫ рдФрд░ ...
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдХрдорд╛рдВрдб рдХреЗ рд╕реЗрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ - рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛрд░ - рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдкреНрд▓рдЧ-рдЗрди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред
рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрд░реА рд╕рд╛рдВрд╕ рд▓реЗ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдХрд┐рддрдиреЗ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░ рджреВрдВрдЧрд╛ рдХрд┐ рдЬрд┐рд╕ рд╕рдордп рдореИрдВ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕ рд╕рдордп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рддрдХ рд╕рднреА рдШреЛрд╖рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЕрднреА рднреА рдЗрд╕реЗ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлрд╝рд╛рдЗрд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд▓реЗрдирджреЗрди рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдФрд░ SQL рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдПрдХ рд╣реА рд▓реЗрдирджреЗрди рдореЗрдВ рдХреИрд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдЕрднреА рддрдХ рдкреНрд▓рдЧрдЗрди рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдХрдорд╛рдВрдб рд╕реЗрдЯ рдореЗрдВ рдПрдХ рдирдИ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рдиреЗ рд╕реЗ 4 рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдмрд╕ рдПрдХ рдирдИ рдХрдХреНрд╖рд╛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд╛рдо рдПрдХ рдЕрдирд┐рдпреЛрдЬрд┐рдд рдХреНрд╖реЗрддреНрд░ рд╣реИред
рдкрд╣рд▓реЗ рд╕рдиреНрдирд┐рдХрдЯрди рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╡рд░реНрдЧ рдЖрд░реЗрдЦ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЗрд╕рдореЗрдВ рд╕рднреА рдСрдкрд░реЗрд╢рдВрд╕ (рдХрдорд╛рдВрдбреНрд╕) рдХреА рдкреИрд░реЗрдВрдЯ рдХреНрд▓рд╛рд╕ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рд╕реЗ рдХрдИ рдХрдорд╛рдВрдбреНрд╕ (CreateFileCommand рдФрд░ DeleteFolderCommand) рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ, рдЬреЛ рдЕрдВрдд рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╣реЛрдЧрд╛ред PackageBuilder рд╡рд░реНрдЧ рднреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИред PackageBuilder рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдкреИрдХреЗрдЬ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрди рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЫрджреНрдордХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
void CreatePackage() {
рдмреЗрд╢рдХ, рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЕрднреА рднреА рдХрдИ рдХрд╛рдпрд╛рдкрд▓рдЯреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХрд╣реАрдВ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдмреЗрд╕рд┐рдХ рдХрдорд╛рдВрдб рд╕рд┐рд╕реНрдЯрдо
рдЖрдЗрдП рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХрдорд╛рдВрдб рдХреА рдореВрд▓ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдпрд╣рд╛рдВ рдореИрдВ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреА рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рдЕрд╡рд╕рд░ рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
рдпрд╣рд╛рдВ рдореИрдВ рдЙрди рдореВрд▓ рд╡рд╛рдпрд░рдлреНрд░реЗрдо рдХрдорд╛рдВрдбреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдЖрдкрдХреЛ рдмрд╛рдХреА рдЯреАрдореЛрдВ рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВред рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╕рднреА рдЖрджреЗрд╢реЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдореЗрдВ рдПрдХ рдПрдХрд▓ Do () рдкрджреНрдзрддрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдЧрдИ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, DeleteFile рдХрдорд╛рдВрдб рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрд╕ рдбреВ () рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдмрдирд╛рдПрдЧреА, рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрдкрддреНрддрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ FilePath рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рддрд░реНрдХ (рд╣рдЯрд╛рдП рдЧрдП рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде) рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реЗрдЧреАред рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:
public abstract class Command { public abstract void Do(); } public class DeleteFile: Command { public string FilePath { get; set; } public override void Do() { File.Delete(FilePath); } }
рдЕрдиреНрдп рд╕рднреА рдЖрджреЗрд╢реЛрдВ рдХреЛ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдХрдорд╛рдВрдб рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдХрдорд╛рдВрдб рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИ, рдФрд░ рдЕрдкрдиреА рдбреВ () рд╡рд┐рдзрд┐ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╢реНрд░реЗрдгреА рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕рдиреНрдирд┐рдХрдЯрди рдореЗрдВ, рдореИрдВрдиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ рдкреИрдХреЗрдЬрдмреБрд░реНрд▓ рдореЗрдВ рдЯреАрдореЛрдВ рдХреЛ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЕрдирдореНрдпрддрд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХрдорд╛рдВрдб рдХрд╛ рдЕрдиреБрдХреНрд░рдо рд▓рдХреНрд╖реНрдп рдорд╢реАрди рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рдЗрдЯ рд╕реНрдерд╛рдкрдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рдХреНрд╖реНрдп рдорд╢реАрди рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдЖрдИрдЖрдИрдПрд╕ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдмрд╣реБрдд рдирд┐рд░реНрднрд░ рд╣реИред рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреЛ рд▓рдХреНрд╖реНрдп рдорд╢реАрди рдкрд░ рдЖрд╡рд╢реНрдпрдХ COM рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрди рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХреБрдЫ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдкрдврд╝реЗ рдЧрдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣рд╛рдБ рд╕реЗ рд╣рдореЗрдВ рдЖрдзрд╛рд░ рд╕реЗрдЯ рдореЗрдВ рдПрдХ рд╕рд╢рд░реНрдд рдирд┐рд╖реНрдкрд╛рджрди рдХрдорд╛рдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реБрдИ, рдЪрд▓реЛ рдЗрд╕реЗ ExecuteIf рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЗрд╕рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
public class ExecuteIf : Command { public string ArgumentName { get; set; } public Command Then { get; set; } public Command Else { get; set; } public void Do(); }
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ Do () рд╡рд┐рдзрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рд╕реЗ рдПрдХ рдмреВрд▓рд┐рдпрди рдЪрд░ рдХрд╛ рдирд╛рдо рд╣реИ рдЬрд┐рд╕реЗ ArgumentName рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рд╕рддреНрдп рд╣реИ, рддреЛ рдпрд╣ рддрддреНрдХрд╛рд▓реАрди рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдПрд▓реНрд╕ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдВрджрд░реНрднред рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдПрдХреНрдЬрд╝реАрдХреНрдпреВрд╢рди рдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬреЛ (рдЙрджрд╛рд╣рд░рдг) рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдХреЗ рдХреЙрд▓ рдЯреВ рдбреВ () рд╡рд┐рдзрд┐ рдХрд╛ рддрд░реНрдХ рд╣реЛрдЧрд╛ред рдУрд╡рд░рд▓реЛрдб рдбреВ (рдПрдХреНрдЬрд╝реАрдХреНрдпреВрд╢рди рдХреЛрдЯреЗрдХреНрд╕реНрдЯ) рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рди рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ Do () рд╡рд┐рдзрд┐ рдХреЛ рд╣рдореЗрд╢рд╛ ExecutionContext рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдХрдорд╛рдВрдб рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рд╡реЗ Do () рд╡рд┐рдзрд┐ рддрд░реНрдХ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрдВрдЧреЗред
рддреЛ рдЕрдм рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛рдПрдВ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ:
public abstract class Command { public abstract void Do(ExecutionContext context); } public class DeleteFile: Command { public string FilePath { get; set; } public override void Do(ExecutionContext context) { File.Delete(FilePath); } } public class ExecuteIf : Command { public string ArgumentName { get; set; } public Command Then { get; set; } public Command Else { get; set; } public void Do(ExecutionContext context); }
рдЖрджреЗрд╢реЛрдВ рдХреЗ рдореВрд▓ рд╕реЗрдЯ рдХреЗ рд╡рд░реНрдгрди рд╕реЗ рдзреНрдпрд╛рди рд╣рдЯрд╛рдПрдВ, рдФрд░ рдХреНрд▓рд╛рд╕ рдПрдХреНрдЬрд╝реАрдХреНрдпреВрд╢рди рдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВред
рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдВрджрд░реНрдн
рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреИрдХреЗрдЬ рдХреЗ рднреАрддрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдЕрдкрдиреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рднреА рд▓реМрдЯрд╛ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ SQL рдХрдорд╛рдВрдб рдПрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐ рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдкрдврд╝рдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рдкрдврд╝рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдПрдХ рдХрдорд╛рдВрдб рдПрдХ рд╡реИрд▓реНрдпреВ рдЯрд╛рдЗрдк рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ, рдпрд╣ рдПрдХ рдЬрдЯрд┐рд▓ рдкрд░рд┐рдгрд╛рдо рднреА рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рд╕реЗрдЯред рдЕрдиреНрдп рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдкрд┐рдЫрд▓реЗ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдорд╛рдВрдб рди рдХреЗрд╡рд▓ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд┐рдЫрд▓реА рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрдорд╛рдВрдб рд╕рд╣рд┐рдд, рдпрд╣ рдПрдХ рд╕рд╛рде рдХрдИ рдкрд┐рдЫрд▓реА рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ FindIndexCommand рдХрдорд╛рдВрдб рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдХреБрдЫ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ SqlQueryCommand рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, FindIndexCommand рдХрдорд╛рдВрдб рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рджреЛ рддрд░реНрдХреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ - SqlQueryCommand рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдбреЗрдЯрд╛рд╕реЗрдЯ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ UserInputCommand рдХрдорд╛рдВрдбред рдореИрдВ рдЙрди рдЯреАрдореЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдбрд┐рдЬрд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЯреАрдо рдХреЗ рдирд╛рдо рд╕реЗ рдЙрдирдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдкрд╖реНрдЯ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд▓рдЪреАрд▓рд╛рдкрди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреБрдЫ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн ExecutionContext рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреБрдВрдЬреА рдХреЗ рддрд╣рдд рдЗрд╕рдореЗрдВ рдореВрд▓реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдФрд░ рдпрджрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рд╣реИ, рддреЛ рдЗрд╕рд╕реЗ рдореВрд▓реНрдп рдХреЛ рдкрдврд╝реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрдорд╛рдВрдб рдЗрд╕реЗ Do () рд╡рд┐рдзрд┐ рдХреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧреАред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╕рднреА рдЯреАрдореЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдЧреАред
рдПрдХреНрдЬрд╝реАрдХреНрдпреВрд╢рдирдХрдВрдЯреЗрдХреНрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
public class ExecutionContext { private Dictionary<string, object> _results = new Dictionary<string, object>(); public void SaveResult(string key, object value) { _results[key] = value; } public object GetResult(string key) { return _results[key]; } }
рд╢рд╛рдпрдж рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд╕рд░рд▓ рд░реВрдк рд╣реЛрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛:
public class DeleteFile: Command { public string FilePath { get; set; } private ExecutionContext _context; public DeleteFile(ExecutionContext context) { _context = context; } public DeleteFile() { } public override void Do() { } }
рдпрд╣реА рд╣реИ, рдХрдорд╛рдВрдб рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ, рдЗрд╕реЗ рдПрдХ рдирд┐рдЬреА рдЪрд░ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ, рдФрд░ рдлрд┐рд░ рдбреВ () рд╡рд┐рдзрд┐ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдХрдорд╛рдВрдб рдкреИрдХреЗрдЬ рдЖрдорддреМрд░ рдкрд░ рдкрд╣рд▓реЗ рдХреНрд░рдордмрджреНрдз рдФрд░ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореА рдлрд╛рдЗрд▓ рдХреЛ рдбреАрд╕рд░реНрд╡рд┐рд▓рд╛рдЗрдЬреНрдб рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рджреВрд╕рд░реЗ рдЪрд░рдг рдореЗрдВ рдбреАрд╕реИрд░рд┐рдЬрд╝рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреИрдХреЗрдЬ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдмрдВрдж рдЪрд░ _context (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрдВрдж рд╣реИ) рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдФрд░ рдкреИрдХреЗрдЬ рдПрдХ рдЕрд╕рдВрдмрджреНрдз рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд╕рдВрджрд░реНрдн рдХреЛ рдХреЗрд╡рд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдЪрд░рдг рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рд╕рдВрджрд░реНрдн рдХреЛ Do () рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЗрд╕рд╕реЗ рддреБрд░рдВрдд рдПрдХ рдФрд░ рд▓рд╛рдн рд╣реБрдЖ - рд╣рдореЗрдВ рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдирдП рдХрдорд╛рдВрдб рдореЗрдВ рдЗрд╕ рджреЛрд╣рд░рд╛рдП рдЧрдП рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
private ExecutionContext _context; public DeleteFile(ExecutionContext context) { _context = context; } public DeleteFile () { }
рдЖрдЦрд┐рд░рдХрд╛рд░, рдЕрдм рд╣рдореЗрдВ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рднреА рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрдирд╛рдПрдВрдЧреЗред рдЕрдм рдХрдорд╛рдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
public class DeleteFile: Command { public string FilePath { get; set; } public override void Do(ExecutionContext context) { } }
рдЕрд░реНрдерд╛рддреН рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдЕрддрд┐рд╢реНрдпреЛрдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рд╕рд╛рд░ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдЗрд╕рдХреЗ рд╕рд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХрд░реЗрдЧрд╛ред
рдЕрдм рд╣рдо ExecuteIf рдХрдорд╛рдВрдб рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
public class ExecuteIf : Command { public string ArgumentName { get; set; } public Command Then { get; set; } public Command Else { get; set; } public override void Do(ExecutionContext context) { if ((bool)context.GetResult(ArgumentName)) { Then.Do(context); } else if (Else != null) { Else.Do(context); } } }
рдмреЗрд╕рд┐рдХ рдХрдорд╛рдВрдб рд╕рд┐рд╕реНрдЯрдоред
рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХрдорд╛рдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдзрд╛рд░ рд╕рд╛рд░ рд╡рд░реНрдЧ рдХрдорд╛рдВрдб, рд╕рд╛рде рд╣реА рд╕рд╢рд░реНрдд рдХрдорд╛рдВрдб ExecuteIf рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред ExecuteIf рдХрдорд╛рдВрдб рдХреЗ рддреЛ рдПрдВрдб рдПрд▓реНрд╕ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЗрд╡рд▓ рдПрдХ рдХрдорд╛рдВрдб рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рдХрдорд╛рдВрдбреНрд╕ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдмреНрд▓реЙрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдСрдкрд░реЗрдЯрд░ рдХреЛрд╖реНрдардХ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧред рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдХрдорд╛рдВрдбрд╕реНрд╕реЗрдВрд╕ рдХрд╣рд┐рдПред рдЗрд╕рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рд╣реИ:
public class CommandSequence : Command { public List Commands; public override void Do(ExecutionContext context) { foreach (Command command in Commands) { command.Do(context); } } }
рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрджреЗрд╢реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдФрд░ рдбреВ () рд╡рд┐рдзрд┐ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓реЗ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИред
рдЕрдм рдпрд╛рдж рдХрд░реЗрдВ рдХрд┐ ExecuteIf рдХрдорд╛рдВрдб рдЗрдирдкреБрдЯ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рд╕реЗ рдмреВрд▓рд┐рдпрди рдЪрд░ рдХрд╛ рдирд╛рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмреВрд▓рд┐рдпрди рдЪрд░ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЗрд╕рд▓рд┐рдП рд░рд╛рд╢рд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреАрдореЛрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдХрдорд╛рдВрдб рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрдиред рдХрдорд╛рдВрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдЗрд╕рдХрд╛ рдЖрдВрд╢рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
public class CompareStringsCommand: Command { public string FirstOperandName { get; set; } public string SecondOperandName { get; set; } public string ResultName { get; set; } public void Do(ExecutionContext context) { string operand1 = (string)(context.GetResult(FirstOperandName)); string operand2 = (string)(context.GetResult(SecondOperandName)); bool result = Compare(operand1, operand2); context.SaveResult(ResultName, result); } }
рдЖрджреЗрд╢ рдЙрдирдХреЗ рдирд╛рдо FirstOperandName рдФрд░ SecondOperandName рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрдн рджреЛ рдЪрд░ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ, рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ (рдореИрдВрдиреЗ рддреБрд▓рдирд╛ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреБрд▓рдирд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ), рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдирд╛рдо рдХреЗ рддрд╣рдд рд╕рдВрджрд░реНрдн рдХреА рддреБрд▓рдирд╛ рдХрд╛ рдмреВрд▓рд┐рдпрди рдкрд░рд┐рдгрд╛рдо рдмрдЪрд╛рддрд╛ рд╣реИред
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдорд╛рдВрдб рдЕрдиреНрдп рд╕рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдЖрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╕рд╛рд░ рд╡рд░реНрдЧ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рджрд╛рд╡реЗрджрд╛рд░ рд╣реИ, рдФрд░ рддреБрд▓рдирд╛ (рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╕реНрдЯреНрд░рд┐рдВрдЧ) рд╡рд┐рдзрд┐ рдПрдХ рд╕рд╛рд░ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИ рдФрд░ рд╡рд╛рд░рд┐рд╕реЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИред рдЕрдЧрд▓рд╛, рдореИрдВ рдХреЗрд╡рд▓ рд╕рд╛рд░ рд╡рд░реНрдЧ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (Do (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдорд╛рди рд░рд╣рддрд╛ рд╣реИ) рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛, рдФрд░ рд╡рд╛рд░рд┐рд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдХреЛрдб рднреА рджреВрдВрдЧрд╛:
public abstract class CompareStringsCommand: Command { public string FirstOperandName { get; set; } public string SecondOperandName { get; set; } public string ResultName { get; set; } protected abstract bool Compare(string operand1, string operand2); public override void Do(ExecutionContext context) {
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╛рдЗрдирд░реА (рджреЛ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде) рддреБрд▓рдирд╛рддреНрдордХ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рддреБрд▓рдирд╛рддреНрдордХ рд╕рдВрдЪрд╛рд▓рди (рдПрдВрдбрд╕рд╡рд┐рде, рдХреЙрдиреНрдЯреЗрдХреНрдЯреНрд╕, рдЗрдХреНрд╡рд▓реНрд╕, рдиреЛрдЯрдЗрдХрд▓реНрд╕) рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреБрд▓рдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЬреЙрдиреНрдбрд╕рдо рдХреЗ рдПрдХ рдЗрдирд╣реЗрд░реАрдЯрд░ рдХреЛ рдмрдирд╛рдХрд░ рдФрд░ рдЗрд╕рдореЗрдВ рддреБрд▓рдирд╛ (рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╕реНрдЯреНрд░рд┐рдВрдЧ) рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗред
рдЗрд╕ рдЪрд░рдг рдореЗрдВ рдпреВрдирд┐рд░реА рдСрдкрд░реЗрд╢рди (рдЬреИрд╕реЗ рдХрд┐ IsNullOrEmpty, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдореИрдВ рдПрдХ рд╣реА рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрддрд╛ рд╣реВрдВ, рдмрд╕ рджреВрд╕рд░реЗ рдСрдкрд░реЗрдВрдб рдХреА рдЕрдирджреЗрдЦреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдХрдВрдкреЗрд░рд┐рдЬрдирд╕реНрдЯреНрд░реАрдордХреЛрдореИрдВрдб рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рджреЛ рддрд░реНрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдЕрдиреНрдп рдХрдорд╛рдВрдб рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореБрдЭреЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдкрдврд╝реА рдЧрдИ рд░реЗрдЦрд╛ рдХреБрдЫ рджрд┐рдП рдЧрдП рд╕реНрдерд┐рд░ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ? рдореБрдЭреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдореМрдЬреВрдж рд╣реИред рд╣рдо рдПрдХ рдХрдорд╛рдВрдб рдбрд┐рдЬрд╛рдЗрди рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХреЗрд╡рд▓ рджрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рддрд╣рдд рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдореЗрдВ рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ:
public class SaveConstantCommand: Command { public string ResultName { get; set; } public object Value { get; set; } public override void Do(ExecutionContext context) { context.SaveResult(ResultName, Value); } }
рдЕрдЧрд▓реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рдореИрдВ рд▓реЗрдирджреЗрди рддрдВрддреНрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ред
рджреВрд╕рд░реЗ рднрд╛рдЧ рдХрд╛ рд▓рд┐рдВрдХ