เชเช• เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เชธเชฟเชฆเซเชงเชพเช‚เชค. เชคเซ‡ เชฒเชพเช—เซ‡ เช›เซ‡ เชคเซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เชจเชฅเซ€

เชเช• เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เชธเชฟเชฆเซเชงเชพเช‚เชค. เชคเซ‡ เชฒเชพเช—เซ‡ เช›เซ‡ เชคเซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เชจเชฅเซ€ เชธเชฟเช‚เช—เชฒ เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เชธเชฟเชฆเซเชงเชพเช‚เชค, เชœเซ‡เชจเซ‡ เชธเชฟเช‚เช—เชฒ เชœเชตเชพเชฌเชฆเชพเชฐเซ€เชจเชพ เชธเชฟเชฆเซเชงเชพเช‚เชค เชคเชฐเซ€เช•เซ‡ เชชเชฃ เช“เชณเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡,
เชธเชฎเชพเชจ เชชเชฐเชฟเชตเชฐเซเชคเชจเชถเซ€เชฒเชคเชพเชจเซ‹ เชธเชฟเชฆเซเชงเชพเช‚เชค เช‰เชฐเซเชซ - เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เช…เชคเซเชฏเช‚เชค เชฒเชชเชธเชฃเซ‹ เชตเซเชฏเช•เซเชคเชฟ เช…เชจเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฐ เช‡เชจเซเชŸเชฐเชตเซเชฏเซเชฎเชพเช‚ เช†เชตเซ‹ เชจเชฐเซเชตเชธ เชชเซเชฐเชถเซเชจ.

เช† เชธเชฟเชฆเซเชงเชพเช‚เชค เชธเชพเชฅเซ‡เชจเซ‹ เชฎเชพเชฐเซ‹ เชชเซเชฐเชฅเชฎ เช—เช‚เชญเซ€เชฐ เชชเชฐเชฟเชšเชฏ เชชเซเชฐเชฅเชฎ เชตเชฐเซเชทเชจเซ€ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชฅเชฏเซ‹ เชนเชคเซ‹, เชœเซเชฏเชพเชฐเซ‡ เชฏเซเชตเชพเชจ เช…เชจเซ‡ เชฒเซ€เชฒเชพ เชฌเชพเชณเช•เซ‹เชจเซ‡ เชฒเชพเชฐเซเชตเชพเชฎเชพเช‚เชฅเซ€ เชตเชฟเชฆเซเชฏเชพเชฐเซเชฅเซ€เช“ - เชตเชพเชธเซเชคเชตเชฟเช• เชตเชฟเชฆเซเชฏเชพเชฐเซเชฅเซ€เช“ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเช‚เช—เชฒเชฎเชพเช‚ เชฒเชˆ เชœเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ.

เชœเช‚เช—เชฒเชฎเชพเช‚, เช…เชฎเชจเซ‡ 8-9 เชฒเซ‹เช•เซ‹เชจเชพ เชœเซ‚เชฅเซ‹เชฎเชพเช‚ เชตเชนเซ‡เช‚เชšเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ เช…เชจเซ‡ เชเช• เชธเซเชชเชฐเซเชงเชพ เชนเชคเซ€ - เช•เชฏเซเช‚ เชœเซ‚เชฅ เชตเซ‹เชกเช•เชพเชจเซ€ เชฌเซ‹เชŸเชฒ เชธเซŒเชฅเซ€ เชเชกเชชเซ€ เชชเซ€เชถเซ‡, เชœเซ‹ เช•เซ‡ เชœเซ‚เชฅเชฎเชพเช‚เชฅเซ€ เชชเซเชฐเชฅเชฎ เชตเซเชฏเช•เซเชคเชฟ เชตเซ‹เชกเช•เชพเชจเซ‡ เช—เซเชฒเชพเชธเชฎเชพเช‚ เชฐเซ‡เชกเซ‡, เชฌเซ€เชœเซ‹ เชคเซ‡เชจเซ‡ เชชเซ€เชตเซ‡, เช…เชจเซ‡ เชคเซเชฐเซ€เชœเชพเชจเซ‡ เชจเชพเชธเซเชคเซ‹ เช›เซ‡. เชเช•เชฎ เช•เซ‡ เชœเซ‡เชฃเซ‡ เชคเซ‡เชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ€ เช›เซ‡ เชคเซ‡ เชœเซ‚เชฅเชจเซ€ เช•เชคเชพเชฐเชจเชพ เช…เช‚เชคเชฎเชพเช‚ เชœเชพเชฏ เช›เซ‡.

เช•เซ‡เชธ เชœเซเชฏเชพเช‚ เช•เชคเชพเชฐเชจเซเช‚ เช•เชฆ เชคเซเชฐเชฃเชจเชพ เช—เซเชฃเชพเช‚เช•เชฎเชพเช‚ เชนเชคเซเช‚ เชคเซ‡ SRPเชจเซ‹ เชธเชพเชฐเซ‹ เช…เชฎเชฒ เชนเชคเซ‹.

เชตเซเชฏเชพเช–เซเชฏเชพ 1. เชเช•เชฒ เชœเชตเชพเชฌเชฆเชพเชฐเซ€.

เชธเชฟเช‚เช—เชฒ เชฐเชฟเชธเซเชชเซ‹เชจเซเชธเชฟเชฌเชฟเชฒเชฟเชŸเซ€ เชชเซเชฐเชฟเชจเซเชธเชฟเชชเชฒ (เชเชธเช†เชฐเชชเซ€) เชจเซ€ เชธเชคเซเชคเชพเชตเชพเชฐ เชตเซเชฏเชพเช–เซเชฏเชพ เชœเชฃเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ เชฆเชฐเซ‡เช• เชเชจเซเชŸเชฟเชŸเซ€เชจเซ€ เชชเซ‹เชคเชพเชจเซ€ เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เช…เชจเซ‡ เช…เชธเซเชคเชฟเชคเซเชต เชฎเชพเชŸเซ‡เชจเซเช‚ เช•เชพเชฐเชฃ เชนเซ‹เชฏ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ€ เชฎเชพเชคเซเชฐ เชเช• เชœ เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เชนเซ‹เชฏ เช›เซ‡.

เช‘เชฌเซเชœเซ‡เช•เซเชŸ "เชชเซ€เชจเชพเชฐ" เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‹ (เชŸเซ€เชชเซเชชเชฒเชฐ).
SRP เชธเชฟเชฆเซเชงเชพเช‚เชคเชจเซ‹ เช…เชฎเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐเซ€เช“เชจเซ‡ เชคเซเชฐเชฃ เชญเชพเช—เชฎเชพเช‚ เชตเชนเซ‡เช‚เชšเซ€เชถเซเช‚:

  • เชเช• เชฐเซ‡เชกเชตเซเช‚ (PourOperation)
  • เชเช• เชชเซ€เชฃเซเช‚ (เชกเซเชฐเชฟเช‚เช•เช…เชช เช“เชชเชฐเซ‡เชถเชจ)
  • เชเช• เชจเชพเชธเซเชคเซ‹ เช›เซ‡ (เชŸเซ‡เช•เชฌเชพเช‡เชŸ เช“เชชเชฐเซ‡เชถเชจ)

เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเชพ เชฆเชฐเซ‡เช• เชธเชนเชญเชพเช—เซ€เช“ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเชพ เชเช• เช˜เชŸเช• เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชเช• เชชเชฐเชฎเชพเชฃเซ เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เช›เซ‡ - เชชเซ€เชตเซเช‚, เชฐเซ‡เชกเชตเซเช‚ เช…เชฅเชตเชพ เชจเชพเชธเซเชคเซ‹.

เชชเซ€เชตเชพเชจเชพ เช›เชฟเชฆเซเชฐ, เชฌเชฆเชฒเชพเชฎเชพเช‚, เช† เช•เชพเชฎเช—เซ€เชฐเซ€ เชฎเชพเชŸเซ‡ เชฐเชตเซ‡เชถ เช›เซ‡:

ัlass Tippler {
    //...
    void Act(){
        _pourOperation.Do() // ะฝะฐะปะธั‚ัŒ
        _drinkUpOperation.Do() // ะฒั‹ะฟะธั‚ัŒ
        _takeBiteOperation.Do() // ะทะฐะบัƒัะธั‚ัŒ
    }
}

เชเช• เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เชธเชฟเชฆเซเชงเชพเช‚เชค. เชคเซ‡ เชฒเชพเช—เซ‡ เช›เซ‡ เชคเซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เชจเชฅเซ€

เชถเชพ เชฎเชพเชŸเซ‡?

เชฎเชพเชจเชต เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฐ เชเชช-เชฎเซ‡เชจ เชฎเชพเชŸเซ‡ เช•เซ‹เชก เชฒเช–เซ‡ เช›เซ‡, เช…เชจเซ‡ เชเชช-เชฎเซ‡เชจ เชฌเซ‡เชฆเชฐเช•เชพเชฐ, เชฎเซ‚เชฐเซเช– เช…เชจเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เช‰เชคเชพเชตเชณเชฎเชพเช‚ เชนเซ‹เชฏ เช›เซ‡. เชคเซ‡ เชเช• เชธเชฎเชฏเซ‡ เชฒเช—เชญเช— 3 - 7 เชถเชฌเซเชฆเซ‹ เชชเช•เชกเซ€ เช…เชจเซ‡ เชธเชฎเชœเซ€ เชถเช•เซ‡ เช›เซ‡.
เชถเชฐเชพเชฌเซ€เชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช†เชฎเชพเช‚เชฅเซ€ เชคเซเชฐเชฃ เชถเชฌเซเชฆเซ‹ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชœเซ‹ เช†เชชเชฃเซ‡ เชเช• เชถเซ€เชŸ เชธเชพเชฅเซ‡ เช•เซ‹เชก เชฒเช–เซ€เช, เชคเซ‹ เชคเซ‡เชฎเชพเช‚ เชนเชพเชฅ, เชšเชถเซเชฎเชพ, เชเช˜เชกเชพ เช…เชจเซ‡ เชฐเชพเชœเช•เชพเชฐเชฃ เชตเชฟเชถเซ‡ เช…เชจเช‚เชค เชฆเชฒเซ€เชฒเซ‹ เชนเชถเซ‡. เช…เชจเซ‡ เช† เชฌเชงเซเช‚ เชเช• เชชเชฆเซเชงเชคเชฟเชจเชพ เชถเชฐเซ€เชฐเชฎเชพเช‚ เชนเชถเซ‡. เชฎเชจเซ‡ เช–เชพเชคเชฐเซ€ เช›เซ‡ เช•เซ‡ เชคเชฎเซ‡ เชคเชฎเชพเชฐเซ€ เชชเซเชฐเซ‡เช•เซเชŸเชฟเชธเชฎเชพเช‚ เช†เชตเซ‹ เช•เซ‹เชก เชœเซ‹เชฏเซ‹ เชนเชถเซ‡. เชฎเชพเชจเชธ เชฎเชพเชŸเซ‡ เชธเซŒเชฅเซ€ เชฎเชพเชจเชตเซ€เชฏ เช•เชธเซ‹เชŸเซ€ เชจเชฅเซ€.

เชฌเซ€เชœเซ€ เชฌเชพเชœเซ, เชšเชพเชณเชพ เชชเชพเชกเชตเชพ เชฎเชพเชฃเชธเชจเซ‡ เชคเซ‡เชจเชพ เชฎเชพเชฅเชพเชฎเชพเช‚ เชตเชพเชธเซเชคเชตเชฟเช• เชฆเซเชจเชฟเชฏเชพเชจเซ€ เชตเชธเซเชคเซเช“เชจเซเช‚ เช…เชจเซเช•เชฐเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช›เซ‡. เชคเซ‡เชจเซ€ เช•เชฒเซเชชเชจเชพเชฎเชพเช‚, เชคเซ‡ เชคเซ‡เชฎเชจเซ‡ เชเช•เชธเชพเชฅเซ‡ เชฆเชฌเชพเชฃ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡, เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชจเชตเซ€ เชตเชธเซเชคเซเช“เชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชœ เชฐเซ€เชคเซ‡ เชคเซ‡เชจเซ‡ เช…เชฒเช— เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชœเซ‚เชจเชพ เชฎเซ‹เชกเชฒเชจเซ€ เช•เชพเชฐเชจเซ€ เช•เชฒเซเชชเชจเชพ เช•เชฐเซ‹. เชคเชฎเชพเชฐเซ€ เช•เชฒเซเชชเชจเชพเชฎเชพเช‚, เชคเชฎเซ‡ เชฆเชฐเชตเชพเชœเซ‹ เช–เซ‹เชฒเซ€ เชถเช•เซ‹ เช›เซ‹, เชฆเชฐเชตเชพเชœเชพเชจเชพ เชŸเซเชฐเซ€เชฎเชจเซ‡ เชธเซเช•เซเชฐเซ‚ เช•เชพเชขเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชคเซเชฏเชพเช‚ เชตเชฟเชจเซเชกเซ‹ เชฒเชฟเชซเซเชŸ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเซเชธ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชœเซ‡เชจเซ€ เช…เช‚เชฆเชฐ เช—เชฟเชฏเชฐเซเชธ เชนเชถเซ‡. เชชเชฐเช‚เชคเซ เชคเชฎเซ‡ เชเช• เชœ เชธเชฎเชฏเซ‡ เชฎเชถเซ€เชจเชจเชพ เชคเชฎเชพเชฎ เช˜เชŸเช•เซ‹เชจเซ‡ เชเช• "เชธเซ‚เชšเชฟ" เชฎเชพเช‚ เชœเซ‹เชˆ เชถเช•เชคเชพ เชจเชฅเซ€. เช“เช›เชพเชฎเชพเช‚ เช“เช›เซเช‚ "เชตเชพเชจเชฐ เชฎเชพเชฃเชธ" เช•เชฐเซ€ เชถเช•เชคเซเช‚ เชจเชฅเซ€.

เชคเซ‡เชฅเซ€, เชฎเชพเชจเชต เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฐเซ‹ เชœเชŸเชฟเชฒ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเซเชธเชจเซ‡ เช“เช›เชพ เชœเชŸเชฟเชฒ เช…เชจเซ‡ เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ เชคเชคเซเชตเซ‹เชจเชพ เชธเชฎเซ‚เชนเชฎเชพเช‚ เชตเชฟเช˜เชŸเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชคเซ‡ เชœเซเชฆเซ€ เชœเซเชฆเซ€ เชฐเซ€เชคเซ‡ เชตเชฟเช˜เชŸเชฟเชค เชฅเชˆ เชถเช•เซ‡ เช›เซ‡: เช˜เชฃเซ€ เชœเซ‚เชจเซ€ เช•เชพเชฐเชฎเชพเช‚, เชเชฐ เชกเช•เซเชŸ เชฆเชฐเชตเชพเชœเชพเชฎเชพเช‚ เชœเชพเชฏ เช›เซ‡, เช…เชจเซ‡ เช†เชงเซเชจเชฟเช• เช•เชพเชฐเชฎเชพเช‚, เชฒเซ‰เช• เช‡เชฒเซ‡เช•เซเชŸเซเชฐเซ‹เชจเชฟเช•เซเชธเชฎเชพเช‚ เชจเชฟเชทเซเชซเชณเชคเชพ เชเชจเซเชœเชฟเชจเชจเซ‡ เชถเชฐเซ‚ เชฅเชคเชพเช‚ เช…เชŸเช•เชพเชตเซ‡ เช›เซ‡, เชœเซ‡ เชธเชฎเชพเชฐเช•เชพเชฎ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชธเชฎเชธเซเชฏเชพ เชฌเชจเซ€ เชถเช•เซ‡ เช›เซ‡.

เชคเซ‡เชฅเซ€, SRP เช เชเช• เชธเชฟเชฆเซเชงเชพเช‚เชค เช›เซ‡ เชœเซ‡ เชธเชฎเชœเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชฟเช˜เชŸเชจ เช•เชฐเชตเซเช‚, เชเชŸเชฒเซ‡ เช•เซ‡, เชตเชฟเชญเชพเชœเชจ เชฐเซ‡เช–เชพ เช•เซเชฏเชพเช‚ เชฆเซ‹เชฐเชตเซ€.

เชคเซ‡ เช•เชนเซ‡ เช›เซ‡ เช•เซ‡ "เชœเชตเชพเชฌเชฆเชพเชฐเซ€" เชจเชพ เชตเชฟเชญเชพเชœเชจเชจเชพ เชธเชฟเชฆเซเชงเชพเช‚เชค เช…เชจเซเชธเชพเชฐ เชตเชฟเช˜เชŸเชจ เช•เชฐเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡ เช…เชฎเซเช• เชตเชธเซเชคเซเช“เชจเชพ เช•เชพเชฐเซเชฏเซ‹ เช…เชจเซเชธเชพเชฐ.

เชเช• เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เชธเชฟเชฆเซเชงเชพเช‚เชค. เชคเซ‡ เชฒเชพเช—เซ‡ เช›เซ‡ เชคเซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เชจเชฅเซ€

เชšเชพเชฒเซ‹ เชชเซ€เชตเชพ เชชเชฐ เชชเชพเช›เชพ เชœเชˆเช เช…เชจเซ‡ เชตเชฟเช˜เชŸเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชตเชพเชจเชฐ เชฎเชพเชฃเชธเชจเซ‡ เชฎเชณเชคเชพ เชซเชพเชฏเชฆเชพเช“:

  • เช•เซ‹เชก เชฆเชฐเซ‡เช• เชธเซเชคเชฐเซ‡ เช…เชคเซเชฏเช‚เชค เชธเซเชชเชทเซเชŸ เชฅเชˆ เช—เชฏเซ‹ เช›เซ‡
  • เช•เซ‹เชก เชเช•เชธเชพเชฅเซ‡ เช…เชจเซ‡เช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฐเซ‹ เชฆเซเชตเชพเชฐเชพ เชฒเช–เซ€ เชถเช•เชพเชฏ เช›เซ‡ (เชฆเชฐเซ‡เช• เชเช• เช…เชฒเช— เชคเชคเซเชต เชฒเช–เซ‡ เช›เซ‡)
  • เชธเซเชตเชฏเช‚เชธเช‚เชšเชพเชฒเชฟเชค เชชเชฐเซ€เช•เซเชทเชฃ เชธเชฐเชณ เช›เซ‡ - เชคเชคเซเชต เชœเซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เช›เซ‡, เชคเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชจเซเช‚ เชธเชฐเชณ เช›เซ‡
  • เช•เซ‹เชกเชจเซ€ เชฐเชšเชจเชพเชคเซเชฎเช•เชคเชพ เชฆเซ‡เช–เชพเชฏ เช›เซ‡ - เชคเชฎเซ‡ เชฌเชฆเชฒเซ€ เชถเช•เซ‹ เช›เซ‹ เชกเซเชฐเชฟเช‚เช•เช…เชช เช“เชชเชฐเซ‡เชถเชจ เชถเชฐเชพเชฌเซ€ เชŸเซ‡เชฌเชฒ เชจเซ€เชšเซ‡ เชชเซเชฐเชตเชพเชนเซ€ เชฐเซ‡เชกเซ‡ เช›เซ‡. เช…เชฅเชตเชพ เชฐเซ‡เชกเชตเชพเชจเซ€ เช•เซเชฐเชฟเชฏเชพเชจเซ‡ เช‘เชชเชฐเซ‡เชถเชจเชฅเซ€ เชฌเชฆเชฒเซ‹ เชœเซ‡เชฎเชพเช‚ เชคเชฎเซ‡ เชตเชพเช‡เชจ เช…เชจเซ‡ เชชเชพเชฃเซ€ เช…เชฅเชตเชพ เชตเซ‹เชกเช•เชพ เช…เชจเซ‡ เชฌเซ€เชฏเชฐ เชฎเชฟเช•เซเชธ เช•เชฐเซ‹. เชตเซเชฏเชตเชธเชพเชฏเชจเซ€ เช†เชตเชถเซเชฏเช•เชคเชพเช“เชจเซ‡ เช†เชงเชพเชฐเซ‡, เชคเชฎเซ‡ เชชเชฆเซเชงเชคเชฟ เช•เซ‹เชกเชจเซ‡ เชธเซเชชเชฐเซเชถ เช•เชฐเซเชฏเชพ เชตเชฟเชจเชพ เชฌเชงเซเช‚ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เชŸเซ€เชชเซเชชเชฒเชฐ.เชเช•เซเชŸ.
  • เช† เช“เชชเชฐเซ‡เชถเชจเซเชธเชฎเชพเช‚เชฅเซ€ เชคเชฎเซ‡ เช–เชพเช‰เชงเชฐเชพเชจเซ‡ เชซเซ‹เชฒเซเชก เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ (เชซเช•เซเชค เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ TakeBitOperation), เช†เชฒเซเช•เซ‹เชนเซ‹เชฒเชฟเช• (เชฎเชพเชคเซเชฐ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชกเซเชฐเชฟเช‚เช•เช…เชช เช“เชชเชฐเซ‡เชถเชจ เชธเซ€เชงเชพ เชฌเซ‹เชŸเชฒเชฎเชพเช‚เชฅเซ€) เช…เชจเซ‡ เช…เชจเซเชฏ เช˜เชฃเซ€ เชตเซเชฏเชตเชธเชพเชฏเชฟเช• เช†เชตเชถเซเชฏเช•เชคเชพเช“เชจเซ‡ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ‹.

(เช“เชน, เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เช† เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ OCP เชธเชฟเชฆเซเชงเชพเช‚เชค เช›เซ‡, เช…เชจเซ‡ เชฎเซ‡เช‚ เช† เชชเซ‹เชธเซเชŸเชจเซ€ เชœเชตเชพเชฌเชฆเชพเชฐเซ€เชจเซเช‚ เช‰เชฒเซเชฒเช‚เช˜เชจ เช•เชฐเซเชฏเซเช‚ เช›เซ‡)

เช…เชจเซ‡, เช…เชฒเชฌเชคเซเชค, เช—เซ‡เชฐเชซเชพเชฏเชฆเชพ:

  • เช†เชชเชฃเซ‡ เชตเชงเซ เชชเซเชฐเช•เชพเชฐเซ‹ เชฌเชจเชพเชตเชตเชพ เชชเชกเชถเซ‡.
  • เชเช• เชถเชฐเชพเชฌเซ€ เชชเซเชฐเชฅเชฎ เชตเช–เชค เชชเซ€เชตเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เช•เชฐเชคเชพเช‚ เชฅเซ‹เชกเชพ เช•เชฒเชพเช•เซ‹ เชชเช›เซ€.

เชตเซเชฏเชพเช–เซเชฏเชพ 2. เชเช•เซ€เช•เซƒเชค เชชเชฐเชฟเชตเชฐเซเชคเชจเช•เซเชทเชฎเชคเชพ.

เชฎเชจเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‹, เชธเชœเซเชœเชจเซ‹! เชชเซ€เชตเชพเชจเชพ เชตเชฐเซเช—เชจเซ€ เชชเชฃ เชเช• เชœ เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เช›เซ‡ - เชคเซ‡ เชชเซ€เชตเซ‡ เช›เซ‡! เช…เชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, "เชœเชตเชพเชฌเชฆเชพเชฐเซ€" เชถเชฌเซเชฆ เชเช• เช…เชคเซเชฏเช‚เชค เช…เชธเซเชชเชทเซเชŸ เช–เซเชฏเชพเชฒ เช›เซ‡. เช•เซ‹เชˆ เชฎเชพเชจเชตเชคเชพเชจเชพ เชญเชพเชตเชฟ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡, เช…เชจเซ‡ เช•เซ‹เชˆ เชงเซเชฐเซเชต เชชเชฐ เช‰เชฅเชฒเชพเชตเซ‡เชฒ เชชเซ‡เช‚เช—เซเชตเชฟเชจเชจเซ‡ เช‰เช›เซ‡เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡.

เชšเชพเชฒเซ‹ เชชเซ€เชจเชพเชฐเชจเชพ เชฌเซ‡ เช…เชฎเชฒเซ€เช•เชฐเชฃเซ‹เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเชˆเช. เช‰เชชเชฐ เชœเชฃเชพเชตเซ‡เชฒ เชชเซเชฐเชฅเชฎ เชเช•เชฎเชพเช‚ เชคเซเชฐเชฃ เชตเชฐเซเช—เซ‹ เช›เซ‡ - เชฐเซ‡เชกเชตเซเช‚, เชชเซ€เชตเซเช‚ เช…เชจเซ‡ เชจเชพเชธเซเชคเซ‹.

เชฌเซ€เชœเซเช‚ "เชซเซ‹เชฐเชตเชฐเซเชก เชเชจเซเชก เช“เชจเซเชฒเซ€ เชซเซ‹เชฐเชตเชฐเซเชก" เชชเชฆเซเชงเชคเชฟ เชฆเซเชตเชพเชฐเชพ เชฒเช–เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชชเชฆเซเชงเชคเชฟเชฎเชพเช‚ เชคเชฎเชพเชฎ เชคเชฐเซเช• เชธเชฎเชพเชฏเซ‡เชฒ เช›เซ‡. เชเช•เซเชŸ:

//ะะต ั‚ั€ะฐั‚ัŒั‚ะต ะฒั€ะตะผั  ะฝะฐ ะธะทัƒั‡ะตะฝะธะต ัั‚ะพะณะพ ะบะปะฐััะฐ. ะ›ัƒั‡ัˆะต ััŠะตัˆัŒั‚ะต ะฟะตั‡ะตะฝัŒะบัƒ
ัlass BrutTippler {
   //...
   void Act(){
        // ะฝะฐะปะธะฒะฐะตะผ
    if(!_hand.TryDischarge(from:_bottle, to:_glass, size:_glass.Capacity))
        throw new OverdrunkException();

    // ะฒั‹ะฟะธะฒะฐะตะผ
    if(!_hand.TryDrink(from: _glass,  size: _glass.Capacity))
        throw new OverdrunkException();

    //ะ—ะฐะบัƒัั‹ะฒะฐะตะผ
    for(int i = 0; i< 3; i++){
        var food = _foodStore.TakeOrDefault();
        if(food==null)
            throw new FoodIsOverException();

        _hand.TryEat(food);
    }
   }
}

เช† เชฌเช‚เชจเซ‡ เชตเชฐเซเช—เซ‹, เชฌเชนเชพเชฐเชจเชพ เชจเชฟเชฐเซ€เช•เซเชทเช•เชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€, เชฌเชฐเชพเชฌเชฐ เชธเชฎเชพเชจ เชฆเซ‡เช–เชพเชฏ เช›เซ‡ เช…เชจเซ‡ "เชชเซ€เชตเชพ" เชจเซ€ เชธเชฎเชพเชจ เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เชตเชนเซ‡เช‚เชšเซ‡ เช›เซ‡.

เชฎเซ‚เช‚เชเชตเชฃ!

เชชเช›เซ€ เช†เชชเชฃเซ‡ เช“เชจเชฒเชพเชˆเชจ เชœเชˆเช เช›เซ€เช เช…เชจเซ‡ SRP เชจเซ€ เชฌเซ€เชœเซ€ เชตเซเชฏเชพเช–เซเชฏเชพ เชถเซ‹เชงเซ€เช เช›เซ€เช - เชธเชฟเช‚เช—เชฒ เชšเซ‡เชจเซเชœเซ‡เชฌเชฟเชฒเชฟเชŸเซ€ เชชเซเชฐเชฟเชจเซเชธเชฟเชชเชฒ.

SCP เชœเชฃเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ "เชฎเซ‹เชกเซเชฏเซเชฒเชจเซ‡ เชฌเชฆเชฒเชตเชพเชจเซเช‚ เชเช• เช…เชจเซ‡ เชฎเชพเชคเซเชฐ เชเช• เชœ เช•เชพเชฐเชฃ เช›เซ‡" เชเชŸเชฒเซ‡ เช•เซ‡, "เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เช เชชเชฐเชฟเชตเชฐเซเชคเชจเชจเซเช‚ เช•เชพเชฐเชฃ เช›เซ‡."

(เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชœเซ‡ เชฒเซ‹เช•เซ‹ เชฎเซ‚เชณ เชตเซเชฏเชพเช–เซเชฏเชพ เชธเชพเชฅเซ‡ เช†เชตเซเชฏเชพ เชนเชคเชพ เชคเซ‡เช“ เชตเชพเชจเชฐ เชฎเชพเชฃเชธเชจเซ€ เชŸเซ‡เชฒเชฟเชชเซ‡เชฅเชฟเช• เช•เซเชทเชฎเชคเชพเช“เชฎเชพเช‚ เชตเชฟเชถเซเชตเชพเชธ เชงเชฐเชพเชตเชคเชพ เชนเชคเชพ)

เชนเชตเซ‡ เชฌเชงเซเช‚ เชœ เชœเช—เซเชฏเชพเช เชชเชกเซ‡ เช›เซ‡. เช…เชฒเช—เชฅเซ€, เช†เชชเชฃเซ‡ เชฐเซ‡เชกเชตเชพเชจเซ€, เชชเซ€เชตเชพเชจเซ€ เช…เชจเซ‡ เชจเชพเชธเซเชคเซ‹ เช•เชฐเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชฌเชฆเชฒเซ€ เชถเช•เซ€เช เช›เซ€เช, เชชเชฐเช‚เชคเซ เชชเซ€เชจเชพเชฐเชพเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชซเช•เซเชค เช•เซเชฐเชฟเชฏเชพเช“เชจเซ€ เช•เซเชฐเชฎ เช…เชจเซ‡ เชฐเชšเชจเชพ เชฌเชฆเชฒเซ€ เชถเช•เซ€เช เช›เซ€เช, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชชเซ€เชคเชพ เชชเชนเซ‡เชฒเชพ เชจเชพเชธเซเชคเชพเชจเซ‡ เช–เชธเซ‡เชกเซ€เชจเซ‡ เช…เชฅเชตเชพ เชŸเซ‹เชธเซเชŸเชจเซเช‚ เชตเชพเช‚เชšเชจ เช‰เชฎเซ‡เชฐเซ€เชจเซ‡.

"เชซเซ‹เชฐเชตเชฐเซเชก เช…เชจเซ‡ เช“เชจเซเชฒเซ€ เชซเซ‹เชฐเชตเชฐเซเชก" เช…เชญเชฟเช—เชฎเชฎเชพเช‚, เชœเซ‡ เชฌเชงเซเช‚ เชฌเชฆเชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡ เชคเซ‡ เชซเช•เซเชค เชชเชฆเซเชงเชคเชฟเชฎเชพเช‚ เชœ เชฌเชฆเชฒเชพเชฏ เช›เซ‡ เชเช•เซเชŸ. เช† เชตเชพเช‚เชšเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซเช‚ เช…เชจเซ‡ เช…เชธเชฐเช•เชพเชฐเช• เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเซเชฏเชพเช‚ เชฅเซ‹เชกเซ‹ เชคเชฐเซเช• เชนเซ‹เชฏ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชญเชพเช—เซเชฏเซ‡ เชœ เชฌเชฆเชฒเชพเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เช˜เชฃเซ€เชตเชพเชฐ เชฆเชฐเซ‡เช• 500 เชฒเชพเช‡เชจเชจเซ€ เชญเชฏเช‚เช•เชฐ เชชเชฆเซเชงเชคเชฟเช“เชฎเชพเช‚ เชธเชฎเชพเชชเซเชค เชฅเชพเชฏ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เชฐเชถเชฟเชฏเชพเชจเซ‡ เชจเชพเชŸเซ‹เชฎเชพเช‚ เชœเซ‹เชกเชพเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ เชคเซ‡เชจเชพ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชœเซ‹ เชจเชฟเชตเซ‡เชฆเชจเซ‹ เชนเซ‹เชฏ เช›เซ‡.

เชตเซเชฏเชพเช–เซเชฏเชพ 3. เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซเช‚ เชธเซเชฅเชพเชจเชฟเช•เซ€เช•เชฐเชฃ.

เชชเซ€เชจเชพเชฐเชพเช“ เช˜เชฃเซ€เชตเชพเชฐ เชธเชฎเชœเซ€ เชถเช•เชคเชพ เชจเชฅเซ€ เช•เซ‡ เชคเซ‡เช“ เชถเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เชฌเซ€เชœเชพเชจเชพ เชเชชเชพเชฐเซเชŸเชฎเซ‡เชจเซเชŸเชฎเชพเช‚ เชœเชพเช—เซ€ เช—เชฏเชพ, เช…เชฅเชตเชพ เชคเซ‡เชฎเชจเซ‹ เชฎเซ‹เชฌเชพเชˆเชฒ เชซเซ‹เชจ เช•เซเชฏเชพเช‚ เช›เซ‡. เชตเชฟเช—เชคเชตเชพเชฐ เชฒเซ‹เช—เซ€เช‚เช— เช‰เชฎเซ‡เชฐเชตเชพเชจเซ‹ เช† เชธเชฎเชฏ เช›เซ‡.

เชšเชพเชฒเซ‹ เชฐเซ‡เชกเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชธเชพเชฅเซ‡ เชฒเซ‹เช—เซ€เช‚เช— เชถเชฐเซ‚ เช•เชฐเซ€เช:

class PourOperation: IOperation{
    PourOperation(ILogger log /*....*/){/*...*/}
    //...
    void Do(){
        _log.Log($"Before pour with {_hand} and {_bottle}");
        //Pour business logic ...
        _log.Log($"After pour with {_hand} and {_bottle}");
    }
}

เชคเซ‡เชฎเชพเช‚ เชธเชฎเชพเชตเชฟเชทเซเชŸ เช•เชฐเซ€เชจเซ‡ PourOperation, เช…เชฎเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เช…เชจเซ‡ เชเชจเซเช•เซ‡เชชเซเชธเซเชฏเซเชฒเซ‡เชถเชจเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€ เชธเชฎเชœเชฆเชพเชฐเซ€เชชเซ‚เชฐเซเชตเช• เช•เชพเชฎ เช•เชฐเซเชฏเซเช‚, เชชเชฐเช‚เชคเซ เชนเชตเซ‡ เช…เชฎเซ‡ เชชเชฐเชฟเชตเชฐเซเชคเชจเชถเซ€เชฒเชคเชพเชจเชพ เชธเชฟเชฆเซเชงเชพเช‚เชค เชธเชพเชฅเซ‡ เชฎเซ‚เช‚เชเชตเชฃเชฎเชพเช‚ เช›เซ€เช. เช“เชชเชฐเซ‡เชถเชจ เช‰เชชเชฐเชพเช‚เชค, เชœเซ‡ เชฌเชฆเชฒเชพเชˆ เชถเช•เซ‡ เช›เซ‡, เชฒเซ‹เช—เชฟเช‚เช— เชชเซ‹เชคเซ‡ เชชเชฃ เชชเชฐเชฟเชตเชฐเซเชคเชจเช•เซเชทเชฎ เชฌเชจเซ‡ เช›เซ‡. เชคเชฎเชพเชฐเซ‡ เชฐเซ‡เชกเชตเชพเชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€ เชฎเชพเชŸเซ‡ เช…เชฒเช— เช…เชจเซ‡ เชตเชฟเชถเชฟเชทเซเชŸ เชฒเซ‹เช—เชฐ เชฌเชจเชพเชตเชตเซเช‚ เชชเชกเชถเซ‡:

interface IPourLogger{
    void LogBefore(IHand, IBottle){}
    void LogAfter(IHand, IBottle){}
    void OnError(IHand, IBottle, Exception){}
}

class PourOperation: IOperation{
    PourOperation(IPourLogger log /*....*/){/*...*/}
    //...
    void Do(){
        _log.LogBefore(_hand, _bottle);
        try{
             //... business logic
             _log.LogAfter(_hand, _bottle");
        }
        catch(exception e){
            _log.OnError(_hand, _bottle, e)
        }
    }
}

เชเซ€เชฃเชตเชŸเชชเซ‚เชฐเซเชตเช• เชตเชพเช‚เชšเชจเชพเชฐ เชคเซ‡เชจเซ€ เชจเซ‹เช‚เชง เชฒเซ‡เชถเซ‡ เชฒเซ‹เช—เช†เชซเซเชŸเชฐ, LogBefore ะธ OnError เชตเซเชฏเช•เซเชคเชฟเช—เชค เชฐเซ€เชคเซ‡ เชชเชฃ เชฌเชฆเชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡, เช…เชจเซ‡, เช…เช—เชพเช‰เชจเชพ เชชเช—เชฒเชพเช‚ เชธเชพเชฅเซ‡ เชธเชพเชฎเซเชฏเชคเชพ เชฆเซเชตเชพเชฐเชพ, เชคเซเชฐเชฃ เชตเชฐเซเช—เซ‹ เชฌเชจเชพเชตเชถเซ‡: PourLoggerBefore, PourLoggerAfter ะธ PourErrorLogger.

เช…เชจเซ‡ เชฏเชพเชฆ เชฐเชพเช–เชตเซเช‚ เช•เซ‡ เชชเซ€เชจเชพเชฐ เชฎเชพเชŸเซ‡ เชคเซเชฐเชฃ เช“เชชเชฐเซ‡เชถเชจ เช›เซ‡, เช…เชฎเชจเซ‡ เชจเชต เชฒเซ‹เช—เซ€เช‚เช— เช•เซเชฒเชพเชธ เชฎเชณเซ‡ เช›เซ‡. เชชเชฐเชฟเชฃเชพเชฎเซ‡, เชธเชฎเช—เซเชฐ เชชเซ€เชตเชพเชจเชพ เชตเชฐเซเชคเซเชณเชฎเชพเช‚ 14 (!!!) เชตเชฐเซเช—เซ‹เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡.

เชนเชพเชฏเชชเชฐเชฌเซ‹เชฒเชพ? เชญเชพเช—เซเชฏเซ‡ เชœ! เชตเชฟเช˜เชŸเชจ เช•เชฐเชจเชพเชฐ เช—เซเชฐเซ‡เชจเซ‡เชก เชงเชฐเชพเชตเชคเซ‹ เชตเชพเชจเชฐ เชฎเชพเชฃเชธ "เชฐเซ‡เชกเชจเชพเชฐ" เชจเซ‡ เชกเชฟเช•เซ‡เชจเซเชŸเชฐ, เช—เซเชฒเชพเชธ, เชฐเซ‡เชกเชคเชพ เช“เชชเชฐเซ‡เชŸเชฐเซเชธ, เชชเชพเชฃเซ€ เชชเซเชฐเชตเช เชพ เชธเซ‡เชตเชพ, เชชเชฐเชฎเชพเชฃเซเช“เชจเซ€ เช…เชฅเชกเชพเชฎเชฃเชจเซเช‚ เชญเซŒเชคเชฟเช• เชฎเซ‹เชกเซ‡เชฒเชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชถเซ‡ เช…เชจเซ‡ เช†เช—เชพเชฎเซ€ เช•เซเชตเชพเชฐเซเชŸเชฐเชฎเชพเช‚ เชคเซ‡ เชจเชฟเชฐเซเชญเชฐเชคเชพเชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชถเซ‡. เชตเซˆเชถเซเชตเชฟเช• เชšเชฒเซ‹. เช…เชจเซ‡ เชฎเชพเชฐเชพ เชชเชฐ เชตเชฟเชถเซเชตเชพเชธ เช•เชฐเซ‹, เชคเซ‡ เช…เชŸเช•เชถเซ‡ เชจเชนเซ€เช‚.

เชคเซ‡ เช† เชธเชฎเชฏเซ‡ เช›เซ‡ เช•เซ‡ เช˜เชฃเชพ เชเชตเชพ เชจเชฟเชทเซเช•เชฐเซเชท เชชเชฐ เช†เชตเซ‡ เช›เซ‡ เช•เซ‡ SRP เช เช—เซเชฒเชพเชฌเซ€ เชฐเชœเชตเชพเชกเชพเชจเซ€ เชชเชฐเซ€เช•เชฅเชพเช“ เช›เซ‡, เช…เชจเซ‡ เชจเซ‚เชกเชฒเซเชธ เชฐเชฎเชตเชพ เชฎเชพเชŸเซ‡ เชฆเซ‚เชฐ เชœเชพเชฏ เช›เซ‡...

... Srp เชจเซ€ เชคเซเชฐเซ€เชœเซ€ เชตเซเชฏเชพเช–เซเชฏเชพเชจเชพ เช…เชธเซเชคเชฟเชคเซเชต เชตเชฟเชถเซ‡ เช•เซเชฏเชพเชฐเซ‡เชฏ เชถเซ€เช–เซเชฏเชพ เชตเชฟเชจเชพ:

"เชธเชฟเช‚เช—เชฒ เชฐเชฟเชธเซเชชเซ‹เชจเซเชธเชฟเชฌเชฟเชฒเชฟเชŸเซ€ เชธเชฟเชฆเซเชงเชพเช‚เชค เชœเชฃเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ เชœเซ‡ เชตเชธเซเชคเซเช“ เชชเชฐเชฟเชตเชฐเซเชคเชจ เชœเซ‡เชตเซ€ เช›เซ‡ เชคเซ‡ เชเช• เชœเช—เซเชฏเชพเช เชธเช‚เช—เซเชฐเชนเชฟเชค เชฅเชตเซ€ เชœเซ‹เชˆเช" เช…เชฅเชตเชพ "เชเช•เชธเชพเชฅเซ‡ เชœเซ‡ เชซเซ‡เชฐเชซเชพเชฐ เชฅเชพเชฏ เชคเซ‡ เชเช• เชœ เชœเช—เซเชฏเชพเช เชฐเชพเช–เชตเชพ เชœเซ‹เชˆเช"

เชเชŸเชฒเซ‡ เช•เซ‡, เชœเซ‹ เช†เชชเชฃเซ‡ เช•เซ‹เชˆ เช“เชชเชฐเซ‡เชถเชจเชจเซเช‚ เชฒเซ‹เช—เซ€เช‚เช— เชฌเชฆเชฒเซ€เช, เชคเซ‹ เช†เชชเชฃเซ‡ เชคเซ‡เชจเซ‡ เชเช• เชœเช—เซเชฏเชพเช เชฌเชฆเชฒเชตเซเช‚ เชœเซ‹เชˆเช.

เช† เชเช• เช–เซ‚เชฌ เชœ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชฎเซเชฆเซเชฆเซ‹ เช›เซ‡ - เช•เชพเชฐเชฃ เช•เซ‡ เช‰เชชเชฐเซ‹เช•เซเชค เชคเชฎเชพเชฎ เชเชธเช†เชฐเชชเซ€เชจเชพ เช–เซเชฒเชพเชธเชพเช“เชฎเชพเช‚ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชชเซเชฐเช•เชพเชฐเซ‹เชจเซ‡ เช•เชšเชกเซ€ เชฐเชนเซเชฏเชพ เชนเชคเชพ เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เช•เชšเชกเซ€ เชจเชพเช–เชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เชนเชคเซเช‚, เชเชŸเชฒเซ‡ เช•เซ‡, เชคเซ‡เช“เช เช‘เชฌเซเชœเซ‡เช•เซเชŸเชจเชพ เช•เชฆ เชชเชฐ "เช‰เชชเชฒเซ€ เชฎเชฐเซเชฏเชพเชฆเชพ" เชฒเชพเชฆเซ€ เชนเชคเซ€, เช…เชจเซ‡ เชนเชตเซ‡ เช…เชฎเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ "เชจเซ€เชšเซ€ เชฎเชฐเซเชฏเชพเชฆเชพ" เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช. เชฌเซ€เชœเชพ เชถเชฌเซเชฆเซ‹ เชฎเชพเช‚, เชเชธเช†เชฐเชชเซ€เชจเซ‡ เชฎเชพเชคเซเชฐ "เช•เชšเชกเชคเซ€ เชตเช–เชคเซ‡ เช•เชšเชกเซ€ เชจเชพเช–เชตเซเช‚" เชœ เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€, เชชเชฃ เชคเซ‡ เชตเชงเซ เชชเชกเชคเซเช‚ เช•เชฐเชตเซเช‚ เชชเชฃ เชจเชนเซ€เช‚ - "เช‡เชจเซเชŸเชฐเชฒเซ‹เช•เชฟเช‚เช— เชตเชธเซเชคเซเช“เชจเซ‡ เช•เชšเชกเซ€ เชจเชพเช–เชถเซ‹ เชจเชนเซ€เช‚". เช† Occam เชฎเชพเชคเชพเชจเซ‹ เชฐเซ‡เชเชฐ เช…เชจเซ‡ เชšเชพเชณเชพ เชชเชพเชกเชตเชพ เชฎเชพเชฃเชธ เชตเชšเซเชšเซ‡ เชฎเชนเชพเชจ เชฏเซเชฆเซเชง เช›เซ‡!

เชเช• เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เชธเชฟเชฆเซเชงเชพเช‚เชค. เชคเซ‡ เชฒเชพเช—เซ‡ เช›เซ‡ เชคเซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เชจเชฅเซ€

เชนเชตเซ‡ เชชเซ€เชจเชพเชฐเชจเซ‡ เชธเชพเชฐเซเช‚ เชฒเชพเช—เชตเซเช‚ เชœเซ‹เชˆเช. IPourLogger เชฒเซ‹เช—เชฐเชจเซ‡ เชคเซเชฐเชฃ เชตเชฐเซเช—เซ‹เชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชตเชพเชจเซ€ เช•เซ‹เชˆ เชœเชฐเซ‚เชฐ เชจเชฅเซ€ เชคเซ‡ เช‰เชชเชฐเชพเช‚เชค, เช…เชฎเซ‡ เชฌเชงเชพ เชฒเซ‹เช—เชฐเซเชธเชจเซ‡ เชเช• เชชเซเชฐเช•เชพเชฐเชฎเชพเช‚ เชœเซ‹เชกเซ€ เชถเช•เซ€เช เช›เซ€เช:

class OperationLogger{
    public OperationLogger(string operationName){/*..*/}
    public void LogBefore(object[] args){/*...*/}       
    public void LogAfter(object[] args){/*..*/}
    public void LogError(object[] args, exception e){/*..*/}
}

เช…เชจเซ‡ เชœเซ‹ เช†เชชเชฃเซ‡ เชšเซ‹เชฅเชพ เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เช‘เชชเชฐเซ‡เชถเชจ เช‰เชฎเซ‡เชฐเซ€เช, เชคเซ‹ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชฒเซ‰เช—เชฟเช‚เช— เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชคเซˆเชฏเชพเชฐ เช›เซ‡. เช…เชจเซ‡ เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ‹ เช•เซ‹เชก เชชเซ‹เชคเซ‡ เชธเซเชตเชšเซเช› เช…เชจเซ‡ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เช…เชตเชพเชœเชฅเซ€ เชฎเซเช•เซเชค เช›เซ‡.

เชชเชฐเชฟเชฃเชพเชฎเซ‡, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชชเซ€เชตเชพเชจเซ€ เชธเชฎเชธเซเชฏเชพ เชนเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ 5 เชตเชฐเซเช—เซ‹ เช›เซ‡:

  • เชฐเซ‡เชกเชตเชพเชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€
  • เชชเซ€เชตเชพเชจเซเช‚ เช“เชชเชฐเซ‡เชถเชจ
  • เชœเชพเชฎเชฟเช‚เช— เช“เชชเชฐเซ‡เชถเชจ
  • เชฒเซ‹เช—เชฐ
  • เชชเซ€เชจเชพเชฐ เชฐเชตเซ‡เชถ

เชคเซ‡เชฎเชพเช‚เชจเชพ เชฆเชฐเซ‡เช• เชเช• เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เชฎเชพเชŸเซ‡ เชธเช–เชค เชฐเซ€เชคเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡ เช…เชจเซ‡ เชฌเชฆเชฒเชพเชตเชจเซเช‚ เชเช• เช•เชพเชฐเชฃ เช›เซ‡. เชชเชฐเชฟเชตเชฐเซเชคเชจ เชธเชฎเชพเชจ เชคเชฎเชพเชฎ เชจเชฟเชฏเชฎเซ‹ เชจเชœเซ€เช•เชฎเชพเช‚ เชธเซเชฅเชฟเชค เช›เซ‡.

เชตเชพเชธเซเชคเชตเชฟเช• เชœเซ€เชตเชจ เช‰เชฆเชพเชนเชฐเชฃ

เช…เชฎเซ‡ เชเช•เชตเชพเชฐ b2b เช•เซเชฒเชพเชฏเช‚เชŸเชจเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เชฐเชœเซ€เชธเซเชŸเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเซ‡เชตเชพ เชฒเช–เซ€ เชนเชคเซ€. เช…เชจเซ‡ เชธเชฎเชพเชจ เชธเชพเชฎเช—เซเชฐเซ€เชจเซ€ 200 เชฒเซ€เชŸเซ€เช“ เชฎเชพเชŸเซ‡ เชญเช—เชตเชพเชจ เชชเชฆเซเชงเชคเชฟ เชฆเซ‡เช–เชพเชˆ:

  • 1C เชชเชฐ เชœเชพเช“ เช…เชจเซ‡ เชเช•เชพเช‰เชจเซเชŸ เชฌเชจเชพเชตเซ‹
  • เช† เชเช•เชพเช‰เชจเซเชŸ เชธเชพเชฅเซ‡, เชชเซ‡เชฎเซ‡เชจเซเชŸ เชฎเซ‹เชกเซเชฏเซเชฒ เชชเชฐ เชœเชพเช“ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชคเซเชฏเชพเช‚ เชฌเชจเชพเชตเซ‹
  • เชคเชชเชพเชธเซ‹ เช•เซ‡ เช†เชตเชพ เชเช•เชพเช‰เชจเซเชŸ เชธเชพเชฅเซ‡เชจเซเช‚ เชเช•เชพเช‰เชจเซเชŸ เชฎเซเช–เซเชฏ เชธเชฐเซเชตเชฐ เชชเชฐ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชจเชฅเซ€
  • เชจเชตเซเช‚ เช–เชพเชคเซเช‚ เชฌเชจเชพเชตเซ‹
  • เชšเซเช•เชตเชฃเซ€ เชฎเซ‹เชกเซเชฏเซเชฒเชฎเชพเช‚ เชจเซ‹เช‚เชงเชฃเซ€ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เช…เชจเซ‡ เชจเซ‹เช‚เชงเชฃเซ€ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชธเซ‡เชตเชพเชฎเชพเช‚ 1c เชจเช‚เชฌเชฐ เช‰เชฎเซ‡เชฐเซ‹
  • เช† เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชเช•เชพเช‰เชจเซเชŸ เชฎเชพเชนเชฟเชคเซ€ เช‰เชฎเซ‡เชฐเซ‹
  • เชชเซ‹เชˆเชจเซเชŸ เชธเชฐเซเชตเชฟเชธเชฎเชพเช‚ เช† เช•เซเชฒเชพเชฏเชจเซเชŸ เชฎเชพเชŸเซ‡ เชชเซ‹เชˆเชจเซเชŸ เชจเช‚เชฌเชฐ เชฌเชจเชพเชตเซ‹. เช† เชธเซ‡เชตเชพเชฎเชพเช‚ เชคเชฎเชพเชฐเซ‹ 1c เชเช•เชพเช‰เชจเซเชŸ เชจเช‚เชฌเชฐ เช†เชชเซ‹.

เช…เชจเซ‡ เช† เชธเซ‚เชšเชฟเชฎเชพเช‚ เชญเชฏเช‚เช•เชฐ เช•เชจเซ‡เช•เซเชŸเชฟเชตเชฟเชŸเซ€ เชธเชพเชฅเซ‡ เชฒเช—เชญเช— 10 เชตเชงเซ เชตเซเชฏเชตเชธเชพเชฏเชฟเช• เช•เชพเชฎเช—เซ€เชฐเซ€เช“ เชนเชคเซ€. เชฒเช—เชญเช— เชฆเชฐเซ‡เช•เชจเซ‡ เชเช•เชพเช‰เชจเซเชŸ เช‘เชฌเซเชœเซ‡เช•เซเชŸเชจเซ€ เชœเชฐเซ‚เชฐ เชนเชคเซ€. เช…เชกเชงเชพ เช•เซ‰เชฒเชฎเชพเช‚ เชฌเชฟเช‚เชฆเซ ID เช…เชจเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸเชจเซเช‚ เชจเชพเชฎ เชœเชฐเซ‚เชฐเซ€ เชนเชคเซเช‚.

เชฐเชฟเชซเซ‡เช•เซเชŸเชฐเชฟเช‚เช—เชจเชพ เชเช• เช•เชฒเชพเช• เชชเช›เซ€, เช…เชฎเซ‡ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เช•เซ‹เชก เช…เชจเซ‡ เชเช•เชพเช‰เชจเซเชŸ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เช•เซ‡เชŸเชฒเซ€เช• เช˜เซ‹เช‚เช˜เชพเชŸเชจเซ‡ เช…เชฒเช— เชชเชฆเซเชงเชคเชฟเช“/เชตเชฐเซเช—เซ‹เชฎเชพเช‚ เช…เชฒเช— เช•เชฐเชตเชพเชฎเชพเช‚ เชธเช•เซเชทเชฎ เชฅเชฏเชพ. เชญเช—เชตเชพเชจ เชชเชฆเซเชงเชคเชฟเช เชคเซ‡เชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเซเชฏเซเช‚, เชชเชฐเช‚เชคเซ เช•เซ‹เชกเชจเซ€ 100 เชฒเซ€เชŸเซ€เช“ เชฌเชพเช•เซ€ เชนเชคเซ€ เชœเซ‡ เชซเช•เซเชค เช—เซ‚เช‚เชšเชตเชฃเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพ เชฎเชพเช‚เช—เชคเชพ เชจ เชนเชคเชพ.

เชฅเซ‹เชกเชพ เชฆเชฟเชตเชธเซ‹ เชชเช›เซ€ เชœ เชคเซ‡ เชธเซเชชเชทเซเชŸ เชฅเชˆ เช—เชฏเซเช‚ เช•เซ‡ เช† "เชนเชณเชตเชพ" เชชเชฆเซเชงเชคเชฟเชจเซ‹ เชธเชพเชฐ เช เชเช• เชตเซเชฏเชตเชธเชพเชฏ เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎเชจเซ‹ เช›เซ‡. เช…เชจเซ‡ เชคเซ‡ เช•เซ‡ เชคเช•เชจเซ€เช•เซ€ เชตเชฟเชถเชฟเชทเซเชŸเชคเชพเช“เชจเซเช‚ เชฎเซ‚เชณ เชตเชฐเซเชฃเชจ เช–เซ‚เชฌ เชœเชŸเชฟเชฒ เชนเชคเซเช‚. เช…เชจเซ‡ เช† เชชเชฆเซเชงเชคเชฟเชจเซ‡ เชŸเซเช•เชกเชพเช“เชฎเชพเช‚ เชคเซ‹เชกเซ€ เชจเชพเช–เชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช›เซ‡ เชœเซ‡ SRPเชจเซเช‚ เช‰เชฒเซเชฒเช‚เช˜เชจ เช•เชฐเชถเซ‡, เช…เชจเซ‡ เชŠเชฒเชŸเซเช‚ เชจเชนเซ€เช‚.

เช”เชชเชšเชพเชฐเชฟเช•เชคเชพ.

เช†เชชเชฃเชพ เชจเชถเชพเชจเซ‡ เชเช•เชฒเชพ เช›เซ‹เชกเซ€ เชฆเซ‡เชตเชพเชจเซ‹ เชธเชฎเชฏ เช†เชตเซ€ เช—เชฏเซ‹ เช›เซ‡. เชคเชฎเชพเชฐเชพ เช†เช‚เชธเซ เชธเซเช•เชพเชตเซ‹ - เช…เชฎเซ‡ เชšเซ‹เช•เซเช•เชธเชชเชฃเซ‡ เช•เซ‹เชˆ เชฆเชฟเชตเชธ เชคเซ‡เชจเชพ เชชเชฐ เชชเชพเช›เชพ เช†เชตเซ€เชถเซเช‚. เชนเชตเซ‡ เช† เชฒเซ‡เช–เชฎเชพเช‚เชฅเซ€ เชœเซเชžเชพเชจเชจเซ‡ เช”เชชเชšเชพเชฐเชฟเช• เชฌเชจเชพเชตเซ€เช.

เช”เชชเชšเชพเชฐเชฟเช•เชคเชพ 1. SRP เชจเซ€ เชตเซเชฏเชพเช–เซเชฏเชพ

  1. เชคเชคเซเชตเซ‹เชจเซ‡ เช…เชฒเช— เช•เชฐเซ‹ เชœเซ‡เชฅเซ€ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชฆเชฐเซ‡เช• เชเช• เชตเชธเซเชคเซ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เชนเซ‹เชฏ.
  2. เชœเชตเชพเชฌเชฆเชพเชฐเซ€เชจเซ‹ เช…เชฐเซเชฅ "เชฌเชฆเชฒเชตเชพเชจเซเช‚ เช•เชพเชฐเชฃ" เช›เซ‡. เชเชŸเชฒเซ‡ เช•เซ‡, เชตเซเชฏเชตเชธเชพเชฏเชจเชพ เชคเชฐเซเช•เชจเซ€ เชฆเซเชฐเชทเซเชŸเชฟเช, เชฆเชฐเซ‡เช• เชคเชคเซเชตเชฎเชพเช‚ เชชเชฐเชฟเชตเชฐเซเชคเชจ เชฎเชพเชŸเซ‡ เชฎเชพเชคเซเชฐ เชเช• เชœ เช•เชพเชฐเชฃ เช›เซ‡.
  3. เชตเซเชฏเชตเชธเชพเชฏเชจเชพ เชคเชฐเซเช•เชฎเชพเช‚ เชธเช‚เชญเชตเชฟเชค เชซเซ‡เชฐเชซเชพเชฐเซ‹. เชธเซเชฅเชพเชจเชฟเช• เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช. เชธเชฎเช•เชพเชฒเซ€เชจ เชฐเซ€เชคเซ‡ เชฌเชฆเชฒเชพเชคเชพ เชคเชคเซเชตเซ‹ เชจเชœเซ€เช•เชจเชพ เชนเซ‹เชตเชพ เชœเซ‹เชˆเช.

เช”เชชเชšเชพเชฐเชฟเช•เชคเชพ 2. เชœเชฐเซ‚เชฐเซ€ เชธเซเชต-เชชเชฐเซ€เช•เซเชทเชฃ เชฎเชพเชชเชฆเช‚เชก.

SRP เชจเซ‡ เชชเชฐเชฟเชชเซ‚เชฐเซเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฎเซ‡เช‚ เชชเซ‚เชฐเชคเชพ เชฎเชพเชชเชฆเช‚เชก เชœเซ‹เชฏเชพ เชจเชฅเซ€. เชชเชฐเช‚เชคเซ เชคเซเชฏเชพเช‚ เชœเชฐเซ‚เชฐเซ€ เชถเชฐเชคเซ‹ เช›เซ‡:

1) เชคเชฎเชพเชฐเซ€ เชœเชพเชคเชจเซ‡ เชชเซ‚เช›เซ‹ เช•เซ‡ เช† เชตเชฐเซเช—/เชชเชฆเซเชงเชคเชฟ/เชฎเซ‹เชกเซเชฏเซเชฒ/เชธเซ‡เชตเชพ เชถเซเช‚ เช•เชฐเซ‡ เช›เซ‡. เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชธเชฐเชณ เชตเซเชฏเชพเช–เซเชฏเชพ เชธเชพเชฅเซ‡ เชœเชตเชพเชฌ เช†เชชเชตเซ‹ เชœเซ‹เชˆเช. ( เช†เชญเชพเชฐ เชฌเซเชฐเชพเช‡เชŸเซ‹เชฐเซ€ )

เชธเซเชชเชทเซเชŸเชคเชพ

เชœเซ‹ เช•เซ‡, เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชธเชฐเชณ เชตเซเชฏเชพเช–เซเชฏเชพ เชถเซ‹เชงเชตเชพเชจเซเช‚ เช–เซ‚เชฌ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡

2) เชญเซ‚เชฒเชจเซ‡ เช เซ€เช• เช•เชฐเชตเซ€ เช…เชฅเชตเชพ เชจเชตเซ€ เชธเซเชตเชฟเชงเชพ เช‰เชฎเซ‡เชฐเชตเชพเชฅเซ€ เชซเชพเช‡เชฒเซ‹/เชตเชฐเซเช—เซ‹เชจเซ€ เชจเซเชฏเซ‚เชจเชคเชฎ เชธเช‚เช–เซเชฏเชพเชจเซ‡ เช…เชธเชฐ เชฅเชพเชฏ เช›เซ‡. เช†เชฆเชฐเซเชถ เชฐเซ€เชคเซ‡ - เชเช•.

เชธเซเชชเชทเซเชŸเชคเชพ

เชœเชตเชพเชฌเชฆเชพเชฐเซ€ (เชธเซเชตเชฟเชงเชพ เช…เชฅเชตเชพ เชฌเช— เชฎเชพเชŸเซ‡) เชเช• เชซเชพเช‡เชฒ/เชตเชฐเซเช—เชฎเชพเช‚ เชธเชฎเชพเชตเชฟเชทเซเชŸ เชนเซ‹เชตเชพเชฅเซ€, เชคเชฎเซ‡ เชฌเชฐเชพเชฌเชฐ เชœเชพเชฃเซ‹ เช›เซ‹ เช•เซ‡ เช•เซเชฏเชพเช‚ เชœเซ‹เชตเซเช‚ เช…เชจเซ‡ เชถเซเช‚ เชธเช‚เชชเชพเชฆเชฟเชค เช•เชฐเชตเซเช‚. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡: เชฒเซ‰เช—เชฟเช‚เช— เช‘เชชเชฐเซ‡เชถเชจเซเชธเชจเชพ เช†เช‰เชŸเชชเซเชŸเชจเซ‡ เชฌเชฆเชฒเชตเชพเชจเซ€ เชธเซเชตเชฟเชงเชพ เชฎเชพเชŸเซ‡ เชฎเชพเชคเซเชฐ เชฒเซ‰เช—เชฐ เชฌเชฆเชฒเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. เชฌเชพเช•เซ€เชจเชพ เช•เซ‹เชกเชจเซ‡ เชšเชฒเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.

เชฌเซ€เชœเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช เชเช• เชจเชตเซเช‚ UI เช•เช‚เชŸเซเชฐเซ‹เชฒ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เช›เซ‡, เชœเซ‡ เช…เช—เชพเช‰เชจเชพ เชฒเซ‹เช•เซ‹ เชœเซ‡เชตเซเช‚ เชœ เช›เซ‡. เชœเซ‹ เช† เชคเชฎเชจเซ‡ 10 เช…เชฒเช— เช…เชฒเช— เชเชจเซเชŸเชฟเชŸเซ€ เช…เชจเซ‡ 15 เช…เชฒเช— เช•เชจเซเชตเชฐเซเชŸเชฐ เช‰เชฎเซ‡เชฐเชตเชพ เชฆเชฌเชพเชฃ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‹ เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เชตเชงเชพเชฐเซ‡ เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ‹.

3) เชœเซ‹ เช˜เชฃเชพ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชคเชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ€ เชตเชฟเชตเชฟเชง เชธเซเชตเชฟเชงเชพเช“ เชชเชฐ เช•เชพเชฎ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เชนเซ‹เชฏ, เชคเซ‹ เชฎเชฐเซเชœ เชธเช‚เช˜เชฐเซเชทเชจเซ€ เชธเช‚เชญเชพเชตเชจเชพ, เชเชŸเชฒเซ‡ เช•เซ‡, เชเช• เชœ เชธเชฎเชฏเซ‡ เช˜เชฃเชพ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เชฆเซเชตเชพเชฐเชพ เชธเชฎเชพเชจ เชซเชพเช‡เชฒ/เช•เซเชฒเชพเชธ เชฌเชฆเชฒเชตเชพเชจเซ€ เชธเช‚เชญเชพเชตเชจเชพ เชจเซเชฏเซ‚เชจเชคเชฎ เช›เซ‡.

เชธเซเชชเชทเซเชŸเชคเชพ

เชœเซ‹, เชœเซเชฏเชพเชฐเซ‡ เชจเชตเซเช‚ เช‘เชชเชฐเซ‡เชถเชจ โ€œเชชเซ‰เชฐ เชตเซ‹เชกเช•เชพ เช…เชจเซเชกเชฐ เชง เชŸเซ‡เชฌเชฒโ€ เช‰เชฎเซ‡เชฐเซ€ เชฐเชนเซเชฏเชพ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เชฒเซ‹เช—เชฐเชจเซ‡ เชธเซเชชเชฐเซเชถ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชชเซ€เชตเชพเชจเซเช‚ เช…เชจเซ‡ เชฐเซ‡เชกเชตเชพเชจเซเช‚ เช‘เชชเชฐเซ‡เชถเชจ, เชคเซ‹ เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชœเชตเชพเชฌเชฆเชพเชฐเซ€เช“ เช•เซเชŸเชฟเชฒ เชฐเซ€เชคเซ‡ เชตเชนเซ‡เช‚เชšเชพเชฏเซ‡เชฒเซ€ เช›เซ‡. เช…เชฒเชฌเชคเซเชค, เช† เชนเช‚เชฎเซ‡เชถเชพ เชถเช•เซเชฏ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เช†เชชเชฃเซ‡ เช† เช†เช‚เช•เชกเซ‹ เช˜เชŸเชพเชกเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชตเซ‹ เชœเซ‹เชˆเช.

4) เชœเซเชฏเชพเชฐเซ‡ เชฌเชฟเชเชจเซ‡เชธ เชฒเซ‹เชœเชฟเช• (เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เช…เชฅเชตเชพ เชฎเซ‡เชจเซ‡เชœเชฐ เชคเชฐเชซเชฅเซ€) เชตเชฟเชถเซ‡ เชธเซเชชเชทเซเชŸเชคเชพ เช•เชฐเชคเซ‹ เชชเซเชฐเชถเซเชจ เชชเซ‚เช›เชตเชพเชฎเชพเช‚ เช†เชตเซ‡, เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชธเช–เชค เชฐเซ€เชคเซ‡ เชเช• เชตเชฐเซเช—/เชซเชพเชˆเชฒเชฎเชพเช‚ เชœเชพเชต เช…เชจเซ‡ เชคเซเชฏเชพเช‚เชฅเซ€ เชœ เชฎเชพเชนเชฟเชคเซ€ เชฎเซ‡เชณเชตเซ‹.

เชธเซเชชเชทเซเชŸเชคเชพ

เชธเซเชตเชฟเชงเชพเช“, เชจเชฟเชฏเชฎเซ‹ เช…เชฅเชตเชพ เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎเซเชธ เชธเช˜เชจ เชฐเซ€เชคเซ‡ เชฒเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชฆเชฐเซ‡เช• เชเช• เชœเช—เซเชฏเชพเช, เช…เชจเซ‡ เชธเชฎเช—เซเชฐ เช•เซ‹เชก เชธเซเชชเซ‡เชธเชฎเชพเช‚ เชซเซเชฒเซ‡เช—เซเชธ เชธเชพเชฅเซ‡ เชตเชฟเช–เซ‡เชฐเชพเชฏเซ‡เชฒเชพ เชจเชฅเซ€.

5) เชจเชพเชฎเช•เชฐเชฃ เชธเซเชชเชทเซเชŸ เช›เซ‡.

เชธเซเชชเชทเซเชŸเชคเชพ

เช†เชชเชฃเซ‹ เชตเชฐเซเช— เช…เชฅเชตเชพ เชชเชฆเซเชงเชคเชฟ เชเช• เชตเชธเซเชคเซ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡, เช…เชจเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เชคเซ‡เชจเชพ เชจเชพเชฎเชฎเชพเช‚ เชชเซเชฐเชคเชฟเชฌเชฟเช‚เชฌเชฟเชค เชฅเชพเชฏ เช›เซ‡

AllManagersManagerService - เชธเช‚เชญเชตเชคเชƒ เชญเช—เชตเชพเชจ เชตเชฐเซเช—
เชธเซเชฅเชพเชจเชฟเช• เชšเซเช•เชตเชฃเซ€ - เช•เชฆเชพเชš เชจเชนเซ€เช‚

เช”เชชเชšเชพเชฐเชฟเช•เชคเชพ 3. เช“เช•เซ‡เชฎ-เชชเซเชฐเชฅเชฎ เชตเชฟเช•เชพเชธ เชชเชฆเซเชงเชคเชฟ.

เชกเชฟเชเชพเช‡เชจเชจเซ€ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เชตเชพเชจเชฐ เชฎเชพเชฃเชธ เชœเชพเชฃเชคเซ‹ เชจเชฅเซ€ เช…เชจเซ‡ เชธเชฎเชธเซเชฏเชพ เชนเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชคเชฎเชพเชฎ เชธเซ‚เช•เซเชทเซเชฎเชคเชพเชจเซ‡ เช…เชจเซเชญเชตเชคเซ‹ เชจเชฅเซ€ เช…เชจเซ‡ เชคเซ‡ เชญเซ‚เชฒ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชคเชฎเซ‡ เชตเชฟเชตเชฟเชง เชฐเซ€เชคเซ‡ เชญเซ‚เชฒเซ‹ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹:

  • เชตเชฟเชตเชฟเชง เชœเชตเชพเชฌเชฆเชพเชฐเซ€เช“เชจเซ‡ เชฎเชฐเซเชœ เช•เชฐเซ€เชจเซ‡ เชตเชธเซเชคเซเช“เชจเซ‡ เช–เซ‚เชฌ เชฎเซ‹เชŸเซ€ เชฌเชจเชพเชตเซ‹
  • เชเช• เชœ เชœเชตเชพเชฌเชฆเชพเชฐเซ€เชจเซ‡ เช˜เชฃเชพเช‚ เชตเชฟเชตเชฟเชง เชชเซเชฐเช•เชพเชฐเซ‹เชฎเชพเช‚ เชตเชฟเชญเชพเชœเซ€เชค เช•เชฐเซ€เชจเซ‡ เชฐเชฟเชซเซเชฐเซ‡เชฎเชฟเช‚เช—
  • เชœเชตเชพเชฌเชฆเชพเชฐเซ€เชจเซ€ เชธเซ€เชฎเชพเช“เชจเซ‡ เช–เซ‹เชŸเซ€ เชฐเซ€เชคเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‹

เช† เชจเชฟเชฏเชฎ เชฏเชพเชฆ เชฐเชพเช–เชตเซเช‚ เช…เช—เชคเซเชฏเชจเซเช‚ เช›เซ‡: "เชฎเซ‹เชŸเซ€ เชญเซ‚เชฒ เช•เชฐเชตเซ€ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡," เช…เชฅเชตเชพ "เชœเซ‹ เชคเชฎเชจเซ‡ เช–เชพเชคเชฐเซ€ เชจ เชนเซ‹เชฏ, เชคเซ‹ เชคเซ‡เชจเซ‡ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚." เชœเซ‹, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเชฎเชพเชฐเชพ เชตเชฐเซเช—เชฎเชพเช‚ เชฌเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐเซ€เช“ เช›เซ‡, เชคเซ‹ เชคเซ‡ เชนเชœเซ€ เชชเชฃ เชธเชฎเชœเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเซเช‚ เช›เซ‡ เช…เชจเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เช•เซ‹เชกเชฎเชพเช‚ เชจเซเชฏเซ‚เชจเชคเชฎ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชธเชพเชฅเซ‡ เชฌเซ‡ เชญเชพเช—เชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชธเช‚เชฆเชฐเซเชญ เช˜เชฃเซ€ เชซเชพเช‡เชฒเซ‹เชฎเชพเช‚ เชซเซ‡เชฒเชพเชฏเซ‡เชฒเซ‹ เชนเซ‹เชตเชพเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เช…เชจเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เช•เซ‹เชกเชฎเชพเช‚ เชœเชฐเซ‚เชฐเซ€ เชจเชฟเชฐเซเชญเชฐเชคเชพเชจเชพ เช…เชญเชพเชตเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เช•เชพเชšเชจเชพ เชŸเซเช•เชกเชพเช“เชฎเชพเช‚เชฅเซ€ เช—เซเชฒเชพเชธ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเซเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชตเชงเซ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡.

เชคเซ‡เชจเซ‡ เชเช• เชฆเชฟเชตเชธ เช•เชนเซ‡เชตเชพเชจเซ‹ เชธเชฎเชฏ เช›เซ‡

SRP เชจเซ‹ เช…เชตเช•เชพเชถ OOP เช…เชจเซ‡ SOLID เชชเซ‚เชฐเชคเซ‹ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชจเชฅเซ€. เชคเซ‡ เชชเชฆเซเชงเชคเชฟเช“, เช•เชพเชฐเซเชฏเซ‹, เชตเชฐเซเช—เซ‹, เชฎเซ‹เชกเซเชฏเซเชฒเซ‹, เชฎเชพเช‡เช•เซเชฐเซ‹เชธเซ‡เชตเชพเช“ เช…เชจเซ‡ เชธเซ‡เชตเชพเช“เชจเซ‡ เชฒเชพเช—เซ เชชเชกเซ‡ เช›เซ‡. เชคเซ‡ โ€œเชซเชฟเช—เซ‡เช•เซเชธ-เชซเชฟเช—เซ‡เช•เซเชธ-เช…เชจเซ‡-เชชเซเชฐเซ‹เชกโ€ เช…เชจเซ‡ โ€œเชฐเซ‹เช•เซ‡เชŸ-เชธเชพเชฏเชจเซเชธโ€ เชตเชฟเช•เชพเชธ เชฌเช‚เชจเซ‡เชจเซ‡ เชฒเชพเช—เซ เชชเชกเซ‡ เช›เซ‡, เชœเซ‡ เชตเชฟเชถเซเชตเชจเซ‡ เชฆเชฐเซ‡เช• เชœเช—เซเชฏเชพเช เชฅเซ‹เชกเซเช‚ เชธเชพเชฐเซเช‚ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชœเซ‹ เชคเชฎเซ‡ เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชตเชฟเชšเชพเชฐเซ‹, เชคเซ‹ เช† เชฒเช—เชญเช— เชคเชฎเชพเชฎ เชเชจเซเชœเชฟเชจเชฟเชฏเชฐเชฟเช‚เช—เชจเซ‹ เชฎเซ‚เชณเชญเซ‚เชค เชธเชฟเชฆเซเชงเชพเช‚เชค เช›เซ‡. เชฎเชฟเช•เซ‡เชจเชฟเช•เชฒ เชเชจเซเชœเชฟเชจเชฟเชฏเชฐเชฟเช‚เช—, เช•เช‚เชŸเซเชฐเซ‹เชฒ เชธเชฟเชธเซเชŸเชฎเซเชธ เช…เชจเซ‡ เช–เชฐเซ‡เช–เชฐ เชคเชฎเชพเชฎ เชœเชŸเชฟเชฒ เชธเชฟเชธเซเชŸเชฎเซ‹ เช˜เชŸเช•เซ‹เชฎเชพเช‚เชฅเซ€ เชฌเชจเซ‡เชฒเซ€ เช›เซ‡, เช…เชจเซ‡ "เช…เช‚เชกเชฐเชซเซเชฐเซ‡เช—เชฎเซ‡เชจเซเชŸเซ‡เชถเชจ" เชกเชฟเชเชพเช‡เชจเชฐเซเชธเชจเซ‡ เชฒเชตเชšเซ€เช•เชคเชพเชฅเซ€ เชตเช‚เชšเชฟเชค เช•เชฐเซ‡ เช›เซ‡, "เช“เชตเชฐเชซเซเชฐเซ‡เช—เชฎเซ‡เชจเซเชŸเซ‡เชถเชจ" เชกเชฟเชเชพเช‡เชจเชฐเซเชธเชจเซ‡ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชฅเซ€ เชตเช‚เชšเชฟเชค เช•เชฐเซ‡ เช›เซ‡, เช…เชจเซ‡ เช–เซ‹เชŸเซ€ เชธเซ€เชฎเชพเช“ เชคเซ‡เชฎเชจเซ‡ เช•เชพเชฐเชฃ เช…เชจเซ‡ เชฎเชพเชจเชธเชฟเช• เชถเชพเช‚เชคเชฟเชฅเซ€ เชตเช‚เชšเชฟเชค เช•เชฐเซ‡ เช›เซ‡.

เชเช• เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เชธเชฟเชฆเซเชงเชพเช‚เชค. เชคเซ‡ เชฒเชพเช—เซ‡ เช›เซ‡ เชคเซ‡เชŸเชฒเซเช‚ เชธเชฐเชณ เชจเชฅเซ€

SRP เชชเซเชฐเช•เซƒเชคเชฟ เชฆเซเชตเชพเชฐเชพ เชถเซ‹เชงเชพเชฏเซ‡เชฒ เชจเชฅเซ€ เช…เชจเซ‡ เชคเซ‡ เชšเซ‹เช•เซเช•เชธ เชตเชฟเชœเซเชžเชพเชจเชจเซ‹ เชญเชพเช— เชจเชฅเซ€. เชคเซ‡ เช†เชชเชฃเซ€ เชœเซˆเชตเชฟเช• เช…เชจเซ‡ เชฎเชจเซ‹เชตเซˆเชœเซเชžเชพเชจเชฟเช• เชฎเชฐเซเชฏเชพเชฆเชพเช“เชฎเชพเช‚เชฅเซ€ เชฌเชนเชพเชฐ เชจเซ€เช•เชณเซ€ เชœเชพเชฏ เช›เซ‡. เชคเซ‡ เชฎเชพเชคเซเชฐ เชเชช-เชฎเซ‡เชจ เชฎเช—เชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชœเชŸเชฟเชฒ เชชเซเชฐเชฃเชพเชฒเซ€เช“เชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช…เชจเซ‡ เชตเชฟเช•เชธเชพเชตเชตเชพเชจเซ‹ เชเช• เชฎเชพเชฐเซเช— เช›เซ‡. เชคเซ‡ เช…เชฎเชจเซ‡ เช•เชนเซ‡ เช›เซ‡ เช•เซ‡ เชธเชฟเชธเซเชŸเชฎ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชฟเช˜เชŸเชฟเชค เช•เชฐเชตเซ€. เชฎเซ‚เชณ เชซเซ‹เชฐเซเชฎเซเชฏเซเชฒเซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชตเชพเชœเชฌเซ€ เชฎเชพเชคเซเชฐเชพเชฎเชพเช‚ เชŸเซ‡เชฒเชฟเชชเซ‡เชฅเซ€เชจเซ€ เชœเชฐเซ‚เชฐ เชนเชคเซ€, เชชเชฐเช‚เชคเซ เชนเซเช‚ เช†เชถเชพ เชฐเชพเช–เซเช‚ เช›เซเช‚ เช•เซ‡ เช† เชฒเซ‡เช– เชธเซเชฎเซ‹เช•เชธเซเช•เซเชฐเซ€เชจเชฎเชพเช‚เชฅเซ€ เช•เซ‡เชŸเชฒเชพเช•เชจเซ‡ เชธเชพเชซ เช•เชฐเชถเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹