เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบšเปเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™

เบ‚เป‰เบญเบเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบซเบปเบงเบ‚เปเป‰เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบฑเบ™เบ—เบต. เปเบœเบ™เบเบฒเบ™เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเปเบกเปˆเบ™เปƒเบซเป‰เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบ”เบตเปเบฅเบฐเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เปƒเบŠเป‰เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเปเบ•เปˆเป€เบ›เบฑเบ™เบˆเบดเบ‡, เปเบ•เปˆเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™ benchmarking เบกเบฑเบ™เป„เบ”เป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เบšเปเปˆเบŠเป‰เบฒเบ„เบทเบ—เบตเปˆเบ‚เป‰เบญเบเบ„เบดเบ”, LINQ เปเบกเปˆเบ™เบŠเป‰เบฒเบเบงเปˆเบฒเปƒเบ™เบเบฑเบ™เบฎเป‰เบฒเบเบ‚เบญเบ‡เบ‚เป‰เบญเบ. เปเบ•เปˆเปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเบ‚เป‰เบญเบเบเบฑเบ‡เป€เบฎเบฑเบ”เบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เบงเบฑเบ”เปเบ—เบ ... เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เป€เบฅเบทเปˆเบญเบ‡เบŠเบตเบงเบดเบ”เบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ•เบฑเบ”เปเบฅเบฐเปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™. เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ•เบปเบงเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ—เบปเปˆเบงเป„เบ›เปเบฅเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™เบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบดเปƒเบ™เบงเบดเบชเบฒเบซเบฐเบเบดเบ”, เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบ, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ‚เป‰เบญเบ, เบเบฒเบ™เบชเบฒเบ—เบดเบ”เบŠเบตเบงเบดเบ”: เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบ„เบงเบฒเบกเป„เบงเบ‚เบญเบ‡เบซเบปเบงเบ‚เปเป‰เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเปเบกเปˆเบ™. เบšเปเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบเป‰เบญเบ™เป€เบซเบ”เบœเบปเบ™เบžเบฒเบเบ™เบญเบ: Moq, Autofac, EF Core เปเบฅเบฐเบญเบทเปˆเบ™เป† "bandings".

เบ‚เป‰เบญเบเป€เบฅเบตเปˆเบกเป€เบฎเบฑเบ”เบงเบฝเบเบžเบฒเบเปƒเบ•เป‰เบ„เบงเบฒเบกเบ›เบฐเบ—เบฑเบšเปƒเบˆเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰: เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เบŠเป‰เบฒ

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบœเบนเป‰เบ‚เบฝเบ™เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เปƒเบŠเป‰เบœเบนเป‰เปเบ—เบ™เบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป‚เบ—เบซเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเป€เบžเบ”เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เป‚เบ”เบเบเบปเบ‡เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเป„เบงเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™. เปเบ™เปˆเบ™เบญเบ™, เบกเบตเบเบฒเบ™เบ›เปˆเบญเบเบญเบฒเบเบžเบดเบ” IL, เปเบ•เปˆเบ‚เป‰เบญเบเบขเบฒเบเบซเบผเบตเบเบฅเป‰เบฝเบ‡เบกเบฑเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเปƒเบŠเป‰เปเบฎเบ‡เบ‡เบฒเบ™เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบฝเบเบ‡เบฒเบ™, เป€เบŠเบดเปˆเบ‡เบกเบตเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบซเบผเบฒเบ.

เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบงเปˆเบฒเบ‚เป‰เบญเบเบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบชเบฐเป€เบซเบกเบตเบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเป„เบงเบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™, เบ‚เป‰เบญเบเบšเปเปˆเบ•เบฑเป‰เบ‡เปƒเบˆเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบ„เปเบฒเบ–เบฒเบกเบšเบปเบ”เบชเบฐเบซเบผเบธเบšเบ‚เบญเบ‡เบœเบนเป‰เบ‚เบฝเบ™.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบกเบฑเบเบˆเบฐเบžเบปเบšเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ naive เบ‚เบญเบ‡เบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เปƒเบ™เบงเบดเบชเบฒเบซเบฐเบเบดเบ”. เบ›เบฐเป€เบžเบ”เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบŠเบฑเบšเบชเบดเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เบงเบดเบ—เบตเบเบฒเบ™ SetValue เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒเปเบฅเบฐเบ—เบธเบเบ„เบปเบ™เบ›เบดเบ•เบดเบเบดเบ™เบ”เบต. เบกเบนเบ™เบ„เปˆเบฒเป„เบ”เป‰เบกเบฒเบฎเบญเบ”เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ, เบ—เบธเบเบ„เบปเบ™เบกเบตเบ„เบงเบฒเบกเบชเบธเบ. เบ„เบปเบ™เบชเบฐเบซเบผเบฒเบ”เบซเบผเบฒเบ - เบœเบนเป‰เบญเบฒเบงเบธเป‚เบชเปเบฅเบฐเบ—เบตเบกเบ‡เบฒเบ™เบ™เปเบฒเบžเบฒ - เบ‚เบฝเบ™เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเป€เบžเบทเปˆเบญเบ„เบฑเบ”เบ„เป‰เบฒเบ™, เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบšเบšเป‚เบ‡เปˆเป† "เบ—เบปเปˆเบงเป„เบ›" เปเบœเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบซเบ™เบถเปˆเบ‡เป„เบ›เบซเบฒเบ„เบปเบ™เบญเบทเปˆเบ™. เป‚เบ”เบเป€เบ™เบทเป‰เบญเปเบ—เป‰เปเบฅเป‰เบงเปเบกเปˆเบ™เบ™เบตเป‰: เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ—เบฑเบ‡เบซเบกเบปเบ”, เป€เบญเบปเบฒเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”, เบŠเป‰เปเบฒเบกเบฑเบ™: เบ–เป‰เบฒเบŠเบทเปˆเบ‚เบญเบ‡เบชเบฐเบกเบฒเบŠเบดเบเบ›เบฐเป€เบžเบ”เบเบปเบ‡เบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ” SetValue. เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฑเบšเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบเป‰เบญเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบŠเบญเบเบซเบฒเบŠเบฑเบšเบชเบดเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ™เบ›เบฐเป€เบžเบ”เบซเบ™เบถเปˆเบ‡, เปเบ•เปˆเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบกเบตเบ—เบฒเบ‡เบญเบญเบเบ—เบตเปˆเบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เบžเบฐเบเบฒเบเบฒเบก / เบˆเบฑเบš.

เบ‚เป‰เบญเบเป„เบ”เป‰เป€เบซเบฑเบ™เบ„เบปเบ™เบ›เบฐเบ”เบดเบ”เบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐ เปเบฅเบฐ เปเบœเบ™เบ—เบตเปˆเบ„เบทเบ™เปƒเปเปˆ เป‚เบ”เบเบšเปเปˆเป„เบ”เป‰เบ›เบฐเบเบญเบšเบญเบฒเบงเบธเบ”เป€เบ•เบฑเบกเบ—เบตเปˆเบ”เป‰เบงเบเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเบเปˆเบญเบ™เบžเบงเบเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบซเบฑเบ™เบ›เบฐเบŠเบฒเบŠเบปเบ™เบŠเปˆเบญเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเป„เบฎเป‰เบ”เบฝเบ‡เบชเบฒเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบขเบนเปˆเป€เบšเบทเป‰เบญเบ‡เบซเบผเบฑเบ‡เบเบธเบ”เบ—เบฐเบชเบฒเบ”, เบซเบฅเบฑเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš, เบซเบฅเบฑเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒ, เบ„เบทเบเบฑเบšเบงเปˆเบฒเบ™เบตเป‰เบˆเบฐเปเบเป‰เบ•เบปเบงเบ•เปเปˆ bacchanalia เบ•เปเปˆเบกเบฒ. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบซเบฑเบ™เบ”เบฑเบ‡เบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ‚เบถเป‰เบ™เบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเป„เบ”เป‰เบงเบฑเบ”เปเบ—เบเบเบฒเบ™เบฎเบปเปˆเบงเป„เบซเบฅเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเบˆเบดเบ‡, เปเบฅเบฐ, เบ–เป‰เบฒเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบ›เปˆเบฝเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™ "เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”" เบ–เป‰เบฒเบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบกเบทเบ‚เบญเบ‡เบ‚เป‰เบญเบเป„เบ›. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบงเบฑเบ”เปเบ—เบเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเป„เบ”เป‰เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบชเบฑเบšเบชเบปเบ™เบขเปˆเบฒเบ‡เบˆเบดเบ‡เบˆเบฑเบ‡.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒเบซเบผเบฒเบเป†เบ—เปˆเบฒเบ™, เบญเปˆเบฒเบ™ Richter เบซเบผเบทเบ™เบฑเบเบญเบธเบ”เบปเบกเบเบฒเบ™เบญเบทเปˆเบ™เป†, เป„เบ”เป‰เบžเบปเบšเบเบฑเบšเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเบเบธเบ•เบดเบ—เปเบฒเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบงเปˆเบฒเบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เปƒเบ™เบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เบ›เบฐเบเบปเบ”เบเบฒเบ™เบ—เบตเปˆเบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ—เบฒเบ‡เบฅเบปเบšเบ—เบตเปˆเบชเบธเบ”เบ•เปเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ.

เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เบเบฒเบ™เป‚เบ—เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰ CLR เป„เบ›เบœเปˆเบฒเบ™เบชเบฐเบžเบฒเปเบซเปˆเบ‡เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™, เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™ metadata เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, parse, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ traversing เบฅเปเบฒเบ”เบฑเบšเบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, CLR เป€เบ›เบตเบ”เป€เบœเบตเบ GC เปเบฅเบฐ friezes เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบŠเป‰เบฒเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡, เป€เบŠเบทเปˆเบญเบ‚เป‰เบญเบ. เบˆเปเบฒเบ™เบงเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบˆเปเบฒเบ™เบงเบ™เบซเบผเบงเบ‡เบซเบผเบฒเบเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบซเบผเบทเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบŸเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบ›เป‰เบญเบ‡เบเบฑเบ™เบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเปƒเบ™เบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบชเบนเบ‡. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบซเบผเบฒเบ, เบ—เปˆเบฒเบ™เบกเบฑเบเบˆเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ GC. เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เปเบกเปˆเบ™, เปƒเบ™เบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต, เป€เบ›เบฑเบ™เบœเป‰เบฒเบชเบตเปเบ”เบ‡เบžเบดเป€เบชเบ”เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบง.

เป€เบ–เบดเบ‡เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเบ—เบธเบเบ„เบปเบ™เปƒเบŠเป‰ IoC containers เปเบฅเบฐ date mappers, เบซเบผเบฑเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบเบฑเบ‡เบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™, เปเบ•เปˆเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบšเปเปˆเบกเบตเบ„เปเบฒเบ–เบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบกเบฑเบ™. เบšเปเปˆ, เบšเปเปˆเปเบกเปˆเบ™เบเป‰เบญเบ™เบงเปˆเบฒเบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปเบฅเบฐเบเบฒเบ™เบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เบˆเบฒเบเบ•เบปเบงเปเบšเบšเบชเบฐเบžเบฒเบšเบเบฒเบ™เบ—เบตเปˆเบˆเปเบฒเบเบฑเบ”เบžเบฒเบเบ™เบญเบเปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เบซเบผเบฒเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบชเบเบชเบฐเบฅเบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบเปเบฅเบฐเบ™เบตเปƒเบ”เบเปเปˆเบ•เบฒเบก. เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ - เบกเบฑเบ™เบเปเปˆเบšเปเปˆเบกเบตเบœเบปเบ™เบ•เปเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฒเบ.

เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบงเปเบกเปˆเบ™เบงเปˆเบฒเป‚เบ„เบ‡เบฎเปˆเบฒเบ‡เบเบฒเบ™เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบธเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ tricks เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบกเบฑเบ™เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”. เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบ™เบตเป‰เปเบกเปˆเบ™ cache. เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเปเบฅเบฐเบœเบนเป‰เปเบ—เบ™เบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเบˆเบฒเบเบ•เบปเป‰เบ™เป„เบกเป‰เบชเบฐเปเบ”เบ‡เบญเบญเบ. automapper เบ”เบฝเบงเบเบฑเบ™เบฎเบฑเบเบชเบฒเบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบกเบ—เบตเปˆเบกเบตเบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ—เบตเปˆเบเบปเบ‡เบเบฑเบšเบ›เบฐเป€เบžเบ”เบ•เปˆเบฒเบ‡เป†เบ—เบตเปˆเบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบญเบฑเบ™เบญเบทเปˆเบ™เป‚เบ”เบเบšเปเปˆเบ•เป‰เบญเบ‡เป‚เบ—เบซเบฒเบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™.

เบ™เบตเป‰เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เปเบ™เบงเปƒเบ”? เป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเป‰เบง, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเป€เบงเบ—เบตเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ” JIT. เป€เบกเบทเปˆเบญเบงเบดเบ—เบตเบเบฒเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™เป€เบ›เบฑเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เบกเบฑเบ™เบ–เบทเบเบฅเบงเบšเบฅเบงเบก (เปเบฅเบฐ, เปเบกเปˆเบ™เปเบฅเป‰เบง, เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเป„เบง); เปƒเบ™เบเบฒเบ™เป‚เบ—เบ•เปเปˆเบกเบฒ, เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบˆเบฐเบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒเบงเบดเบ—เบตเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเปเบฅเป‰เบง, เปเบฅเบฐเบˆเบฐเบšเปเปˆเบกเบตเบเบฒเบ™เบ”เบถเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™.

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก JIT เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ™เปเบฒเปƒเบŠเป‰เบžเบถเบ”เบ•เบดเบเปเบฒเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ”เป‰เบงเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ„เบนเปˆเบฎเปˆเบงเบกเบ‡เบฒเบ™เบ‚เบญเบ‡ AOT. เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบˆเบฐเบกเบฒเบŠเปˆเบงเบเป€เบซเบผเบทเบญเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰.

เบซเบผเบฑเบโ€‹เบเบฒเบ™โ€‹เปƒเบ™โ€‹เบ„เปเบฒโ€‹เบ–เบฒเบกโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เป‚เบ”เบโ€‹เบซเบเปเป‰โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:
เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ—เบตเปˆเบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบฅเบงเบšเบฅเบงเบก. เบกเบฑเบ™เบเบฑเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบ—เบตเปˆเบˆเบฐ cache เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบ›เบฐเป€เบžเบ”เปƒเบ™เบ‚เบปเบ‡เป€เบ‚เบ”เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™, เบ—เบตเปˆเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เบ™เบญเบเบงเบฑเบ”เบ–เบธ.

เบกเบตเป€เบซเบ”เบœเบปเบ™เปƒเบ™เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰. เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบ—เบปเปˆเบงเป„เบ›เบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบงเปˆเบฒเบ–เป‰เบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบชเบฒเบกเบฒเบ”เบฅเบงเบšเบฅเบงเบกเปเบฅเบฐเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ–เบฒเบ™เบ„เบงเบฒเบกเบˆเปเบฒ, เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป€เบฎเบฑเบ”.

เป€เบšเบดเปˆเบ‡เป„เบ›เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒ, เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒ cache เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เบกเบตเบ‚เปเป‰เบ”เบตเบ‚เบญเบ‡เบกเบฑเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบชเบฐเป€เบซเบ™เบตเบ‚เบญเบ‡เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ. เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ‚เบญเบ‡เบœเบนเป‰เบ‚เบฝเบ™เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบฅเบฐเบซเบฑเบ”. เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆเบ„เบงเบฒเบกเป€เบˆเบฑเบšเบ›เบงเบ”เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบเบ—เบตเปˆเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบชเบฐเบ–เบฒเบšเบฑเบ™เบชเบดเบ™เป€เบŠเบทเปˆเบญเบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡. เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบชเบปเบกเบกเบธเบ”เบ•เบดเบ–เบฒเบ™เป€เบžเบทเปˆเบญเบšเปเปˆเบกเบตเปƒเบœเบ„เบฒเบ”เป€เบ”เบปเบฒ.

เบกเบตเบšเบฒเบ‡เป€เบ™เบทเป‰เบญเปเบ—เป‰เปเบฅเป‰เบง. เปƒเบซเป‰โ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เปเปˆโ€‹. เบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เบตเปˆเบกเบตเบฎเปˆเบฒเบ‡เบเบฒเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เบˆเบฒเบเบ—เบตเปˆ parser เปเบฅเบฐ hydrator เบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เปเปˆเบ”เบฝเบงเบเบฑเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบˆเบปเบ”เปเบฒเบเบกเบฒเบฎเบญเบ”, เบžเบงเบเป€เบฎเบปเบฒเบญเปˆเบฒเบ™เบกเบฑเบ™, เปเบเบเบกเบฑเบ™เบญเบญเบเป€เบ›เบฑเบ™เบ„เบนเปˆเบ„เบต-เบกเบนเบ™เบ„เปˆเบฒ, เบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบดเบ”เบ•เปเปˆ, เปเบฅเบฐเบšเบฑเบ™เบ—เบถเบเบกเบฑเบ™เป„เบงเป‰เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบ›เบฐเบ–เบปเบก. เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบœเบนเป‰เบ•เบดเบ”เบ•เปเปˆเบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบŠเบทเปˆเป€เบ•เบฑเบก, เบญเบฒเบเบธเปเบฅเบฐเป‚เบ—เบฅเบฐเบชเบฑเบšเบ•เบดเบ”เบ•เปเปˆ. เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบ–เบทเบเบชเบปเปˆเบ‡เปƒเบ™เบˆเบปเบ”เบซเบกเบฒเบ. เบ—เบธเบฅเบฐเบเบดเบ”เบเบฑเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบเบฐเปเบˆเปƒเบซเบกเปˆเบขเปˆเบฒเบ‡เป„เบงเบงเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ‡เบฒเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เบนเปˆเบขเบนเปˆเปƒเบ™เบ•เบปเบงเบซเบ™เบฑเบ‡เบชเบท. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบœเบนเป‰เปƒเบ”เบœเบนเป‰ เปœเบถเปˆเบ‡ เบžเบดเบกเบœเบดเบ”เปƒเบ™เปเบกเปˆเปเบšเบšเบซเบผเบทเบ–เป‰เบฒเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ›เปˆเบญเบเบกเบฑเบ™ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ›เบตเบ”เปเบœเบ™เบ—เบตเปˆเบˆเบฒเบเบ„เบนเปˆเบฎเปˆเบงเบกเบ‡เบฒเบ™ เปƒเปเปˆ, เบ›เบฑเบšเบ•เบปเบงเป€เบ‚เบปเป‰เบฒเบเบฑเบšเบฎเบนเบšเปเบšเบš เปƒเปเปˆ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เปเบœเบ™เบ—เบตเปˆเปƒเบซเบกเปˆเป€เบ›เบฑเบ™ datafix เบฅเบฒเบ„เบฒเบ–เบทเบ. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡เบŠเบตเบงเบดเบ”.

เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”, เบชเป‰เบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš. เป€เบฎเบฑเบ”เบงเบฝเบ.

เบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเปƒเบซเป‰เบฅเบฐเบซเบฑเบ”: เบกเบตเบซเบผเบฒเบเปเบซเบผเปˆเบ‡, เปเบฅเบฐเบžเบงเบเบกเบฑเบ™เบกเบตเบขเบนเปˆเปƒเบ™ GitHub เบœเปˆเบฒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป‚เบซเบผเบ”เบžเบงเบเบกเบฑเบ™, เบ—เปเบฅเบฐเบกเบฒเบ™เบžเบงเบเป€เบ‚เบปเบฒเป€เบเบตเบ™เบเบงเปˆเบฒเบเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰เปเบฅเบฐเบงเบฑเบ”เปเบ—เบเบžเบงเบเบกเบฑเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเบชเบปเปˆเบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเปƒเบซเป‰เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบชเบญเบ‡เบงเบดเบ—เบตเปเบกเปˆเปเบšเบšเบ—เบตเปˆเปเบเบเปเบเบฐ hydrator, เป€เบŠเบดเปˆเบ‡เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเป„เบง, เบˆเบฒเบ hydrator, เป€เบŠเบดเปˆเบ‡เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบŠเป‰เบฒ.

เป€เบซเบ”เบœเบปเบ™เบกเบตเบ”เบฑเปˆเบ‡เบ™เบตเป‰: เบงเบดเบ—เบตเบเบฒเบ™เปเบกเปˆเปเบšเบšเป„เบ”เป‰เบฎเบฑเบšเบ„เบนเปˆเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเป€เบซเบ”เบœเบปเบ™ parser เบžเบทเป‰เบ™เบ–เบฒเบ™. เบŠเบฑเป‰เบ™ LINQ เปเบกเปˆเบ™ parser เปเบฅเบฐเป€เบซเบ”เบœเบปเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡ hydrator, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฑเบšเบชเบฐเบžเบฒเบšเบเบฒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบ›เบฝเบšเบ—เบฝเบšเบ„เบตเบเบฑเบšเบ„เบนเปˆเบˆเบฒเบ parser (เบชเปเบฒเบฅเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบกเบตเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบšเปเปˆเบกเบต LINQ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš). เบ•เปเปˆเป„เบ›, เบ„เบนเปˆเบ–เบทเบเบชเบปเปˆเบ‡เบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ hydration เบ•เบปเป‰เบ™เบ•เปเปเบฅเบฐเบ„เปˆเบฒเบ‚เบญเบ‡เบ„เบนเปˆเปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เปƒเบซเป‰เบเบฑเบšเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ‡เบฒเบ™.

โ€œเป„เบงโ€ (Prefix Fast in benchmarks):

 protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
        {
            var contact = new Contact();
            foreach (var setterMapItem in _proprtySettersMap)
            {
                var correlation = correlations.FirstOrDefault(x => x.PropertyName == setterMapItem.Key);
                setterMapItem.Value(contact, correlation?.Value);
            }
            return contact;
        }

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆเบ—เบตเปˆเบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡ setter เปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ - lambdas เบฅเบงเบšเบฅเบงเบกเบ—เบตเปˆเป‚เบ—เบซเบฒเบซเบ™เปˆเบงเบเบ‡เบฒเบ™ setter . เบชเป‰เบฒเบ‡เป‚เบ”เบเบฅเบฐเบซเบฑเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

        static FastContactHydrator()
        {
            var type = typeof(Contact);
            foreach (var property in type.GetProperties())
            {
                _proprtySettersMap[property.Name] = GetSetterAction(property);
            }
        }

        private static Action<Contact, string> GetSetterAction(PropertyInfo property)
        {
            var setterInfo = property.GetSetMethod();
            var paramValueOriginal = Expression.Parameter(property.PropertyType, "value");
            var paramEntity = Expression.Parameter(typeof(Contact), "entity");
            var setterExp = Expression.Call(paramEntity, setterInfo, paramValueOriginal).Reduce();
            
            var lambda = (Expression<Action<Contact, string>>)Expression.Lambda(setterExp, paramEntity, paramValueOriginal);

            return lambda.Compile();
        }

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เบกเบฑเบ™เบˆเบฐเปเบˆเป‰เบ‡. เบžเบงเบเป€เบฎเบปเบฒเบ‚เป‰เบฒเบกเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”, เบชเป‰เบฒเบ‡เบ•เบปเบงเปเบ—เบ™เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเบ—เบตเปˆเป‚เบ—เบซเบฒเบœเบนเป‰เบ•เบฑเป‰เบ‡, เปเบฅเบฐเบ›เบฐเบซเบเบฑเบ”เบžเบงเบเบกเบฑเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเป‚เบ—เบซเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™.

"เบŠเป‰เบฒ" (เบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเบŠเป‰เบฒเปƒเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™):

        protected override Contact GetContact(PropertyToValueCorrelation[] correlations)
        {
            var contact = new Contact();
            foreach (var property in _properties)
            {
                var correlation = correlations.FirstOrDefault(x => x.PropertyName == property.Name);
                if (correlation?.Value == null)
                    continue;

                property.SetValue(contact, correlation.Value);
            }
            return contact;
        }

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบ—เบฑเบ™เบ—เบตเบ‚เป‰เบฒเบกเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เปเบฅเบฐเป‚เบ—เบซเบฒ SetValue เป‚เบ”เบเบเบปเบ‡.

เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบŠเบฑเบ”เป€เบˆเบ™เปเบฅเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบดเบ—เบตเบเบฒเบ™ naive เบ—เบตเปˆเบ‚เบฝเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบ„เบนเปˆเบ„เบงเบฒเบกเบชเปเบฒเบžเบฑเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป‚เบ”เบเบเบปเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบซเบ™เปˆเบงเบเบ‡เบฒเบ™. เบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ - เบ„เบนเปˆเบกเบท.

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบญเบปเบฒ BenchmarkDotNet เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. เปเบฅเบฐเบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ” ... (spoiler - เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เปเบกเปˆเบ™เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰)

เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบšเปเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™

เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบซเบเบฑเบ‡เบขเบนเปˆเบ™เบตเป‰? เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบŠเบฐเบ™เบฐเบ„เบณเบ™เบณเปœเป‰เบฒ Fast เบ›เบฐเบเบปเบ”เบงเปˆเบฒเบŠเป‰เบฒเบเบงเปˆเบฒเปƒเบ™เป€เบเบทเบญเบšเบ—เบธเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบกเบตเบ„เบณเบ™เบณเปœเป‰เบฒเบŠเป‰เบฒ. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เปเบฅเบฐเบ„เบงเบฒเบกเป„เบงเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ. เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบœเบ™เบ—เบตเปˆเบ—เบตเปˆเบชเบงเบเบ‡เบฒเบกเปเบฅเบฐเบชเบฐเบซเบ‡เปˆเบฒเบ‡เบฒเบกเป‚เบ”เบเบ™เปเบฒเปƒเบŠเป‰เบงเบดเบ—เบตเบเบฒเบ™ LINQ เบ—เบตเปˆเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰เบšเปˆเบญเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบกเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบซเบผเบธเบ”เบฅเบปเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡. เบ—เปˆเบฒเบญเปˆเบฝเบ‡เบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบ”เป‰เบงเบเบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เบœเปˆเบฒเบ™. เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ”. เบ”เป‰เบงเบ LINQ เบกเบฑเบ™เบŠเป‰เบฒเบเบงเปˆเบฒ 4 - 200 เป€เบ—เบปเปˆเบฒ, เบกเบตเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบซเบผเบฒเบเบเบงเปˆเบฒเปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ”เบฝเบงเบเบฑเบ™.

เบ›เบฑเบšเบ›เบธเบ‡

เบ‚เป‰เบญเบเบšเปเปˆเป€เบŠเบทเปˆเบญเบ•เบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เปเบ•เปˆเบชเปเบฒเบ„เบฑเบ™เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป€เบŠเบทเปˆเบญเบ•เบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบเบซเบผเบทเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบ - Dmitry Tikhonov 0x1000000. เบกเบตเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เปเบเป‰เป„เบ‚เบ‚เบญเบ‡เบ‚เป‰เบญเบเบชเบญเบ‡เบ„เบฑเป‰เบ‡, เบฅเบฒเบงเป„เบ”เป‰เบ„เบปเป‰เบ™เบžเบปเบšเบขเปˆเบฒเบ‡เบชเบฐเบซเบผเบฒเบ”เปเบฅเบฐเบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบ‚เป‰เบญเบเบžเบฒเบ”เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เป€เบ–เบดเบ‡เบ‚เบฑเป‰เบ™เบชเบธเบ”เบ—เป‰เบฒเบ. เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚ bug เบ—เบตเปˆโ€‹เบžเบปเบšโ€‹เป€เบซเบฑเบ™โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡ Moqโ€‹, เบœเบปเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เป„เบ”เป‰โ€‹เบ•เบปเบโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบ–เบฒเบ™โ€‹เบ—เบตเปˆโ€‹. เบญเบตเบ‡เบ•เบฒเบกเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ„เบทเบ™เปƒเบซเบกเปˆ, เปเบ™เบงเป‚เบ™เป‰เบกเบ•เบปเป‰เบ™เบ•เปเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡ - LINQ เบเบฑเบ‡เบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฒเบเบเปˆเบงเบฒเบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ”เบตเบ—เบตเปˆเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เปƒเบ™เป„เบฎเป‰เบ›เบฐเป‚เบเบ”, เปเบฅเบฐเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เบ—เบฑเบ‡เปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เปเบฅเบฐเป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”. เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบฒเบเบชเบฐเบซเบ™เบฒเบก static เปเบกเปˆเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เปเบกเปˆเบ™เบŠเป‰เบฒเบเบงเปˆเบฒเบ—เปเบฒเบกเบฐเบŠเบฒเบ”เบชเปเบฒเบฅเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™ "เป„เบง", เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡.

เบ™เบตเป‰เปเบกเปˆเบ™เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ„เบทเบ™:

เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบšเปเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™

เบชเบฐเบซเบผเบธเบš: เป€เบกเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เปƒเบ™เบงเบดเบชเบฒเบซเบฐเบเบดเบ”, เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบเบฒเบ™เบซเบฅเบญเบเบฅเบงเบ‡เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ - LINQ เบˆเบฐเบเบดเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบซเบผเบฒเบ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™เป‚เบซเบผเบ”เบชเบนเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบซเบเบฑเบ”เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปเบฅเบฐเบœเบนเป‰เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™, เป€เบŠเบดเปˆเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบˆเบฐเปƒเบซเป‰เป€เบซเบ”เบœเบปเบ™ "เป„เบง". เบงเบดเบ—เบตเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฎเบฑเบเบชเบฒเบ—เบฑเบ‡เบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเบ—เป‰เบญเบ™เปเบฅเบฐเบ„เบงเบฒเบกเป„เบงเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ.

เบฅเบฐเบซเบฑเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปเบกเปˆเบ™เบกเบตเบขเบนเปˆเบšเปˆเบญเบ™เบ™เบตเป‰. เบ—เบธเบเบ„เบปเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เบ„เบทเบ™เบ„เบณเบชเบฑเบšเบ‚เบญเบ‡เบ‚เป‰เบญเบเป„เบ”เป‰:
HabraReflectionTests

PS: เบฅเบฐเบซเบฑเบ”เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปƒเบŠเป‰ IoC, เปเบฅเบฐเปƒเบ™ benchmarks เบกเบฑเบ™เปƒเบŠเป‰เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™. เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบงเปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบธเบ”เบ—เป‰เบฒเบเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ•เบฑเบ”เบ›เบฑเบ”เปƒเบˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบชเบปเปˆเบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบšเปเปˆเบกเบตเบชเบฝเบ‡.

PPS: เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰ Dmitry Tikhonov @0x1000000 เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบปเป‰เบ™เบžเบปเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Moq, เป€เบŠเบดเปˆเบ‡เบชเบปเปˆเบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบเบฒเบ™เบงเบฑเบ”เปเบ—เบเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”. เบ–เป‰เบฒเบœเบนเป‰เบญเปˆเบฒเบ™เบ„เบปเบ™เปƒเบ”เบกเบตเบเบณเบกเบฐเบชเบดเบ”เบžเบฝเบ‡เบžเป, เบเบฐเบฅเบธเบ™เบฒเบเบปเบ” Like. เบœเบนเป‰เบŠเบฒเบเบขเบธเบ”เป€เบŠเบปเบฒ, เบœเบนเป‰เบŠเบฒเบเบญเปˆเบฒเบ™, เบœเบนเป‰เบŠเบฒเบเบเบงเบ”เป€เบšเบดเปˆเบ‡เบชเบญเบ‡เบ„เบฑเป‰เบ‡เปเบฅเบฐเบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ„เบดเบ”โ€‹เบงเปˆเบฒโ€‹เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบกเบตโ€‹เบ„เปˆเบฒโ€‹เบ„เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบ„เบปเบฒโ€‹เบฅเบปเบšโ€‹เปเบฅเบฐโ€‹เป€เบซเบฑเบ™โ€‹เบญเบปเบโ€‹เป€เบซเบฑเบ™โ€‹เปƒเบˆ.

PPPS: เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบœเบนเป‰เบญเปˆเบฒเบ™เบ—เบตเปˆเบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เบ—เบตเปˆเป„เบ”เป‰เบฅเบปเบ‡เบฅเบธเปˆเบกเบ‚เบญเบ‡เปเบšเบšเปเบฅเบฐเบเบฒเบ™เบญเบญเบเปเบšเบš. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป€เบญเบเบฐเบžเบฒเบšเปเบฅเบฐเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเบชเบฐเบšเบฒเบ. เบเบฒเบ™เบ—เบนเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบตเบ„เบงเบฒเบกเบ›เบฒเบ”เบ–เบฐเบซเบ™เบฒเบซเบผเบฒเบ, เปเบ•เปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบญเบปเบฒเบ„เปเบฒเบงเบดเบˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบšเบฑเบ™เบŠเบต. เบ‚เป‰เบญเบเบ‚เป projectile.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™