DRY рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд (рдбреЛрдВрдЯ рд░рд┐рдкреАрдЯ рдпреЛрд░рд╕реЗрд▓реНрдл) рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдХрдИ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдХреЙрдкреА / рдкреЗрд╕реНрдЯ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдардВрдбрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрдм рдФрджреНрдпреЛрдЧрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдХреЙрдкреА / рдкреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ рдФрд░ рдПрд╕рдУрдПрд▓рдЖрдИрдбреА рд╕реЗ рдУрдкрди-рдХреНрд▓реЛрдЬреНрдб рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдУрдкрди-рдХреНрд▓реЛрдЬреНрдб рд╕рд┐рджреНрдзрд╛рдВрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЛ рдХрдХреНрд╖рд╛рдПрдВ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд░рд╣реЗрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рдВрд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдВред рд╡рд░реНрдЧ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗрд╡рд▓ рддрднреА рджреА рдЬрд╛рддреА рд╣реИ рдЬрдм рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЖрдк рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд рдпрд╛ рдПрдХ рд╣реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд╛рд░реНрд╕рд▓ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП, рдХрд╛рд░реНрдп рд╕рд░рд▓ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддрддреНрдХрд╛рд▓ рд▓реЛрдЧреЛрдВ рдХреЛ рднреА рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд╛рд░реНрд╕рд▓ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рдкреИрдХреЗрдЬ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
public interface IParcel { string Barcode {get; set;} } public class Parcel: IParcel { public string Barcode {get; set;} }
рдпрд╣ рдХреЗрд╡рд▓ рдкреБрд░рд╛рдиреЗ рдкрд╛рд░реНрд╕рд▓ рд╡рд░реНрдЧ рдФрд░ IParcel рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рдЖрдХрд░реНрд╖рдХ рд╣реИ:
public interface IParcel { string Barcode {get; set;} bool IsUrgent {get; set;} } public class Parcel: IParcel { public string Barcode {get; set;} public bool IsUrgent {get; set;} }
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕реЗ рдХреЛрдб рдХреЛ CodeReview рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП! рдПрдХ рд╕рдЦреНрдд рдФрд░ рдЕрдиреБрднрд╡реА рдХреЛрдб рдЪреЗрдХрд░ рдХреЛ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: "рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдУрдкрди-рдмрдВрдж рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред"
рдПрдХ рдирдпрд╛ UrgentParcel рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╛ рдкрд╛рд░реНрд╕рд▓ рд╡рд░реНрдЧ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдХреНрд▓рд╛рд╕ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдЫреВрддреА рд░рд╣реЗрдВрдЧреА:
public class UrgentParcel: IParcel { public string Barcode {get; set;} }
рдпрд╣ рдУрдкрди-рдХреНрд▓реЛрдЬреНрдб рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ CodeReview рдХреЗ рд╕рд╛рде рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдВрдЧреАред
рдЕрдм рдбреАрдЖрд░рд╡рд╛рдИ рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдУрдкрди-рдХреНрд▓реЛрдЬреНрдб рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдкрд╛рд░реНрд╕рд▓ рд╡рд░реНрдЧ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рд╕реНрдерд┐рддрд┐ рдХреА рд╕реНрдерд┐рддрд┐" рдлрд╝реАрд▓реНрдб рд╣реИ рдФрд░ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реНрдХ:
public class Parcel: IParcel { public string Barcode {get; set;}
рдХреНрдпрд╛ рдЗрд╕ рддрд░реНрдХ рдХреЛ UrgentParcel рд╡рд░реНрдЧ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? DRY рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВред рдпрд╣ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ UrgentParcel рд╡рд░реНрдЧ рдХреЗрд╡рд▓ Parcel рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ UrgentPoRecipient рдкрджреНрдзрддрд┐ рдХреЗ рд╢рд░реАрд░ рдХреЛ UrgentParcel рд╡рд░реНрдЧ рдореЗрдВ рдХреЙрдкреА / рдкреЗрд╕реНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдкрд╛рд░реНрд╕рд▓ рдХрдХреНрд╖рд╛ рдореЗрдВ ArrivedToRecipient рдкрджреНрдзрддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рд╕реЗ рддрддреНрдХрд╛рд▓ UrgentParcel рд╡рд░реНрдЧ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛, рдЬреЛ рдУрдкрди-рдХреНрд▓реЛрдЬреНрдб рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЙрд▓реНрд▓рдВрдШрди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрддреНрдпрд╛рд╡рд╢реНрдпрдХ рдкрд╛рд░реНрд╕рд▓ (рдЙрд░реНрдЬреЗрдВрдЯрдкрд░реНрд▓ рдХреНрд▓рд╛рд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╣реА рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, "рд▓рдбрд╝рд╛рдИ рдореЗрдВ" рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рддрд░реНрдХ, UrgentParcel.ArrivedToRecipient рдкрджреНрдзрддрд┐ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рддрддреНрдХрд╛рд▓ рдкрд╛рд░реНрд╕рд▓ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рд╕рднреА рдХреЛ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд╛рд░реНрд╕рд▓ рдХреЗ рдХрд╛рдо рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдУрдкрди-рдХреНрд▓реЛрдЬреНрдб рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдЕрдиреБрднрд╡рд╣реАрди рдЬреВрдирд┐рдпрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ "рдлреЗрд╕-рдСрди" рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордп, рдЕрднреА рддрдХ рд╕рднреА рдЖрд╢реНрд░рд┐рддреЛрдВ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдЙрдирдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрдИ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВред ред
рдЖрдорддреМрд░ рдкрд░, DRY рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдореБрдЦреНрдп рддрд░реНрдХ рдпрд╣ рддрдереНрдп рд╣реИ рдХрд┐ рдпрджрд┐ ArrivedToRecipient рдкрджреНрдзрддрд┐ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рдЬрд╣рд╛рдБ рднреА рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рдпрд╣ рд╕рд┐рд░реНрдл рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдирд┐рдпрдорд┐рдд рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп ArrivedToRecipient рдкрджреНрдзрддрд┐ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рд╛рдзрд╛рд░рдг рдкреИрдХреЗрдЬ рдХреЗ рдХрд╛рдо рдХреЛ рд╕рд╣реА рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдиреЗ рддрддреНрдХрд╛рд▓ рдкрд╛рд░реНрд╕рд▓ рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХреА рдФрд░, рд╢рд╛рдпрдж, рд╣рд░ рдХреЛрдИ рдЦреБрд╢ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рддрддреНрдХрд╛рд▓ рдкрд╛рд░реНрд╕рд▓ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдкреВрд░реНрдгрддрд╛рд╡рд╛рджрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдореИрдВ рд╕реНрд╡рдпрдВ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдЬреЛ рд╣рдореЗрдВ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬрд╣рд╛рдВ рд╡рд┐рдзрд┐ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЧрдИ рдереА, рдФрд░ рд╕рд╡рд╛рд▓ рдЙрдард╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ: рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рдзрд┐ рддрддреНрдХрд╛рд▓ рдкрд╛рд░реНрд╕рд▓ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ?
рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
public class Parcel: IParcel{ ...
рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╕рдореБрджрд╛рдп рдХреА рд░рд╛рдп рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рд┐рдо рдзрдиреНрдпрд╡рд╛рджред