Skip to main content

Posts

Showing posts from 2017

āļĨāļ­āļ‡āđ€āļĨ่āļ™ SonarQube āļ„āļĨื่āļ™āđ‚āļ‹āļ™āļēāļĢ์āļŠ่āļ§āļĒāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„ุāļ“āļ āļēāļžāļ‚āļ­āļ‡ code

SonarQube  āļ„ืāļ­āđ€āļ„āļĢื่āļ­āļ‡āļĄืāļ­āļŠ่āļ§āļĒāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„ุāļ“āļ āļēāļžāļ‚āļ­āļ‡ source code āļŠ่āļ§āļĒāļŦāļēāļ‚้āļ­āļšāļāļžāļĢ่āļ­āļ‡āđƒāļ™ source code āđ„āļĄ่āļ§่āļēāļˆāļ°āđ€āļ›็āļ™ Bug āļ—ี่āļ™่āļēāļˆāļ°āđ€āļิāļ”āļ‚ึ้āļ™ āļŠ่āļ­āļ‡āđ‚āļŦāļ§่āļ—āļēāļ‡āļ”้āļēāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ ัāļĒāļŦāļĢืāļ­āļāļĨิ่āļ™āđ„āļĄ่āļ”ีāđƒāļ™ source code āļ‚āļ­āļ‡āđ€āļĢāļē (Code Smell) āđāļĨāļ° āļŠ่āļ§āļĒāļ•āļĢāļ§āļˆāļŠāļ­āļšāđ€āļĢāļēāđ€āļ‚ีāļĒāļ™ code āļ—āļ”āļŠāļ­āļšāļ„āļĢāļ­āļšāļ„āļĨุāļĄāļŦāļĢืāļ­āļ”ีāđāļĨ้āļ§āļĒัāļ‡āļĒัāļ‡ (code coverage) Code Smell āđ„āļĄ่āđ„āļ”้āđƒāļŠ้āļ§ัāļ”āļ§่āļē source code āļ™ี้āļŠāļēāļĄāļēāļĢāļ–āļ—āļģāļ‡āļēāļ™āđ„āļ”้āļ–ูāļāļ•้āļ­āļ‡ āļĄี bug āļŦāļĢืāļ­āļŠ่āļ­āļ‡āđ‚āļŦāļ§่āļŦāļĢืāļ­āđ„āļĄ่ āđāļ•่ Code Smell āđƒāļŠ้āļ§ัāļ”āļ–ึāļ‡āļ„ุāļ“āļ āļēāļžāļ‚āļ­āļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļš āđ€āļžื่āļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§่āļē source code āļ—ี่āđ€āļ›็āļ™āļ­āļĒู่āđƒāļ™āļ›ัāļˆāļˆุāļšัāļ™āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āļ•่āļ­āđ€āļ•ิāļĄ āđāļ้āđ„āļ‚āļŦāļĢืāļ­āļ—āļ”āļŠāļ­āļšāđ„āļ”้āļ‡่āļēāļĒāļŦāļĢืāļ­āđ„āļĄ่ āđ‚āļ”āļĒāļŦāļĨัāļāđ€āļāļ“āļ‘์āļ—ี่āļ™āļģāļĄāļēāđƒāļŠ้āļ§ัāļ”āđƒāļ™āļŠ่āļ§āļ™āļ‚āļ­āļ‡ Code Smell āļ„ืāļ­ āļ„āļ§āļēāļĄāļ‹้āļģāļ‹้āļ­āļ™āļ‚āļ­āļ‡ code āļĄี code āđāļšāļšāđ€āļ”ีāļĒāļ§āļัāļ™āđ„āļ›āļ‹้āļģāļัāļ™āđƒāļ™āđ„āļŸāļĨ์āđ„āļŦāļ™āļš้āļēāļ‡ āļ•āļĢāļ§āļˆāļŠāļ­āļšāđ€āļ‡ื่āļ­āļ™āđ„āļ‚āđƒāļ™ if āđƒāļŦ้ āļ§่āļēāđ€āļ‡ื่āļ­āļ™āđ„āļ‚āļ•āļĢāļ‡āļ™ี้āļĄัāļ™āļĄีāđ‚āļ­āļāļēāļŠāđ€āļ›็āļ™āđ„āļ›āđ„āļ”้āđ„āļŦāļĄ āđ€āļžāļĢāļēāļ°āļšāļēāļ‡āļ—ีāđ€āļ‡ื่āļ­āļ™āđ„āļ‚āļ—ี่āđ€āļĢāļēāđ€āļ‚ีāļĒāļ™āļ‚ึ้āļ™āļĄāļēāđ€āļžื่āļ­āļ”ัāļāđ„āļ§้āđƒāļ™āļšāļēāļ‡āļ„āļĢั้āļ‡āļĄัāļ™āđāļ—āļšāļˆāļ°āđ„āļĄ่āļĄีāđ‚āļ­āļāļēāļŠāļ—ี่āđ€āļ§āļĨāļēāļĄัāļ™āļ—āļģāļ‡āļēāļ™āđāļĨ้āļ§āđ€āļ‚้āļēāđ€āļ‡ื่āļ­āļ™āđ„āļ‚āđƒāļ™āļŠ่āļ§āļ™āļ™ั้āļ™ āđ€āļ›็āļ™āļ•้āļ™ āļŠāļēāļĄāļēāļĢāļ–āđ„āļ›āļ­่āļēāļ™āļĢāļēāļĒāļĨāļ°āđ€āļ­ีāļĒāļ”āđ€āļžิ่āļĄāđ€āļ•ิāļĄāđ„āļ”้āļ—ี่āļ™ี่ http://www.somkiat.cc/code-smell-internal-class/ āļ™āļ­āļāļˆāļēāļ SonarQube āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āļšāļ­āļāļ–ึāļ‡āļ„ุāļ“āļ āļēāļžāļ‚āļ­āļ‡ source code āđ€āļĢāļēāđ„āļ”้āđāļĨ้āļ§ āļĒัāļ‡āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠ้āđƒāļ™āļāļēāļĢāđāļˆāļāđāļˆāļ‡āļ‡...

āļĨāļ­āļ‡āđ€āļĨ่āļ™āđāļĨāļ°āđ€āļĢีāļĒāļ™āļĢู้āļžื้āļ™āļāļēāļ™āļ‚ั้āļ™āļ•้āļ™āļ‚āļ­āļ‡ Spring Framework

** āļŠāļģāļŦāļĢัāļšāđƒāļ„āļĢāļ—ี่āđ„āļĄ่āđ€āļ„āļĒāđ€āļĢีāļĒāļ™āļĢู้āđƒāļ™āļ”้āļēāļ™āļ‚āļ­āļ‡ Java EE āļŦāļĢืāļ­ J2EE āļ­āļēāļˆāļˆāļ°āļĄึāļ™āļ‡āļ‡āļัāļšāļĻัāļžāļ—์āļŦāļ™่āļ­āļĒāļ„āļĢัāļš āļ—āļģāđ„āļĄāļ•้āļ­āļ‡ Spring Spring āđ€āļ›็āļ™ framework āļ—ี่āļ™ิāļĒāļĄāļĄāļēāļāđƒāļ™āļāļēāļĢāļ™āļģāđ„āļ›āļŠāļĢ้āļēāļ‡āļĢāļ°āļšāļšāđƒāļ™āļĢāļ°āļ”ัāļš enterprise āđƒāļ™āđ€āļĢิ่āļĄāđāļĢāļāļ—ี่ Spring āđ€āļิāļ”āļĄāļē āļĄีāļˆุāļ”āļĄุ่āļ‡āļŦāļĄāļēāļĒāđ€āļžื่āļ­āļ—ี่āļˆāļ°āļĄāļēāđāļ—āļ™āļ—ี่āļĄāļēāļ•āļĢāļāļēāļ™āļ‚āļ­āļ‡ Java āļ­āļĒ่āļēāļ‡ J2EE (Java 2 Enterprise Edition) āļ—ี่āļĄัāļ™āļ—ั้āļ‡āļŦāļ™่āļ§āļ‡āļ—ั้āļ‡āļ­ืāļ”āđāļĨāļ°āļĒุ่āļ‡āļĒāļēāļ āđ‚āļ”āļĒāđ€āļ‰āļžāļēāļ°āđƒāļ™āļŠ่āļ§āļ™āļ‚āļ­āļ‡ EJB (Enterprise Java Bean) āļ—ี่āļ–ืāļ­āļ§่āļēāđ€āļ›็āļ™āļัāļ™āļĢ้āļēāļĒāļ‚āļ­āļ‡āļ™ัāļāļžัāļ’āļ™āļē āļ—āļģāđƒāļŦ้āļูāļĢูāļŠāļēāļĒ Java āđƒāļ™āļŠ่āļ§āļ‡āļ™ั้āļ™āļ–ึāļ‡āļัāļšāđāļ™āļ°āļ™āļģāļ§่āļē āļ–้āļēāļˆāļģāđ€āļ›็āļ™āļ—ี่āļ•้āļ­āļ‡āļžัāļ’āļ™āļēāļĢāļ°āļšāļšāļ”้āļ§āļĒ J2EE āļˆāļ‡āļ­āļĒ่āļēāđƒāļŠ้ EJB āļ–ึāļ‡āļ‚ั้āļ™āļ–ึāļ‡āļัāļšāļĄีāļŦāļ™ัāļ‡āļŠืāļ­āđāļ™āļ°āđāļ™āļ§āļ—āļēāļ‡āļāļēāļĢāļžัāļ’āļ™āļēāļĢāļ°āļšāļš J2EE āđ‚āļ”āļĒāđ„āļĄ่āđƒāļŠ้ EJB āļ­āļĒ่āļēāļ‡āđ„āļĢāļ็āļ•āļēāļĄāļ—āļēāļ‡ Sun āļœู้āđ€āļ›็āļ™āđ€āļˆ้āļēāļ‚āļ­āļ‡ Java āđƒāļ™āļŠāļĄัāļĒāļ™ั้āļ™ āļ–ึāļ‡āļัāļšāļ•้āļ­āļ‡āļĄāļēāļĨ้āļēāļ‡āļĢāļ°āļšāļš J2EE āđƒāļŦāļĄ่āđƒāļ™āļ›ี 2006 āļˆัāļ”āļāļēāļĢāđƒāļ™ EJB āđƒāļŦ้āđƒāļŠ้āļ‡่āļēāļĒāļ‚ึ้āļ™ āļĄีāļ›āļĢāļ°āļŠิāļ—āļ˜ิāļ āļēāļžāļĄāļēāļāļ‚ึ้āļ™ āđāļĨāļ°āļĄีāļāļēāļĢāđ€āļ›āļĨี่āļĒāļ™āļŠื่āļ­āļˆāļēāļ J2EE āđ€āļ›็āļ™ Java EE (Java Enterprise Edition) āđ€āļžื่āļ­āļĨāļšāļ āļēāļžāļ­ัāļ™āđ€āļĨāļ§āļĢ้āļēāļĒāļ‚āļ­āļ‡āđ€āļ”ิāļĄāđƒāļŦ้āļŦāļĄāļ” āđāļĨāļ°āđ„āļ”้āļĄีāļāļēāļĢāļ™āļģāļŸีāđ€āļˆāļ­āļĢ์āđ€āļ”็āļ”āđ† āļ‚āļ­āļ‡ open source framework āļŦāļĨāļēāļĒāđ† āļ•ัāļ§ āļ­āļĒ่āļēāļ‡āđ€āļŠ่āļ™āđāļāļ™āļŦāļĨัāļāļ‚āļ­āļ‡ Spring āļ­āļĒ่āļēāļ‡ IoC (Inversion of Control) āļŦāļĢืāļ­ OR Mapping (Object Relational Mapping) āļ—ี่āđ€āļ›็āļ™āļ—ี่āļ™ิāļĒāļĄāļ­āļĒ่āļēāļ‡ Hibernate āđāļ•่āļ็āđ„...

Inversion of Control āđāļĨāļ° Dependency Injection

Inversion of Control (IoC) āļ„ืāļ­āļ­āļ°āđ„āļĢ IoC āđ€āļ›็āļ™āļ—āļĪāļĐāļีāļ—ี่āļ§่āļēāļ”้āļ§āļĒ āļāļēāļĢāļĨāļ”āļ„āļ§āļēāļĄāļœูāļāļĄัāļ” (dependency) āļัāļ™āđƒāļ™āļĢāļ°āļŦāļ§่āļēāļ‡ module āđ€āļžื่āļ­āđƒāļŦ้ application āļ‚āļ­āļ‡āđ€āļĢāļēāđāļ้āđ„āļ‚ (maintain) āļ•่āļ­āđ€āļ•ิāļĄ (extensible) āļŦāļĢืāļ­āļ—āļ”āļŠāļ­āļš (test) āđ„āļ”้āļ‡่āļēāļĒāļ‚ึ้āļ™ āļ‹ึ่āļ‡āđ€āļ­āļēāļˆāļĢิāļ‡āđ† IoC āđ€āļ›็āļ™āļ­āļ°āđ„āļĢāļ—ี่āļ—āļģāđƒāļŦ้āđ€āļĢāļēāļŠัāļšāļŠāļ™āđāļĨāļ°āļ‡ุāļ™āļ‡āļ‡āļĄāļēāļāđ† āļ§่āļēāļĄัāļ™āļ„ืāļ­āļ­āļ°āđ„āļĢ āļŦāļĨāļēāļĒāđ† āļ„āļ™āļˆึāļ‡āļĒāļāđƒāļŦ้āļ§่āļē IoC āļ„ืāļ­ Dependency Injection (DI) āļ‹ึ่āļ‡āļˆāļĢิāļ‡āđ† āļĄัāļ™āļ็āđ„āļĄ่āļ–ูāļāļ‹āļ°āļ—ีāđ€āļ”ีāļĒāļ§  Dependency āļ„ืāļ­āļ­āļ°āđ„āļĢ Dependency āļ„ืāļ­āļāļēāļĢāļœูāļāļĄัāļ”āļ—ี่āđ€āļิāļ”āļ‚ึ้āļ™āđƒāļ™āļĢāļ°āļšāļš āđ€āļĄื่āļ­ module āļ™ึāļ‡āļĄีāļāļēāļĢāđ€āļĢีāļĒāļāđƒāļŠ้āļ­ีāļ module āļ™ึāļ‡āļ”้āļ§āļĒāļāļēāļĢāļ­้āļēāļ‡āļ­ิāļ‡ (reference) āļ•āļĢāļ‡āđ† āđāļĨ้āļ§āļ­āļ°āđ„āļĢāļ—ี่āđ€āļĢีāļĒāļāļ§่āļēāļāļēāļĢ āļ­้āļēāļ‡āļ­ิāļ‡ (Reference) āđāļšāļšāļ•āļĢāļ‡āđ†   āļ­āļĒ่āļēāļ‡āļ āļēāļž diagram āļ”้āļēāļ™āļšāļ™ class LogEngine āļĄีāļāļēāļĢāđ€āļĢีāļĒāļāđƒāļŠ้ ConsoleLog āđ‚āļ”āļĒāļ•āļĢāļ‡ āļ‹ึ่āļ‡āļĄāļ­āļ‡āļœ่āļēāļ™ diagram āļ­āļēāļˆāļˆāļ°āđ„āļĄ่āđ€āļŦ็āļ™āļ āļēāļžāļĨāļ­āļ‡āļ”ู code āļัāļ™ public class ConsoleLog { public void openLog(){ //do something to open log } public void log(String message){ //do something to log } public void closeLog(){ //do something to close log } } public class LogEngine { private ConsoleLog log; public LogEng...

āļĨāļ­āļ‡āđ€āļĨ่āļ™ Lambda Expression āļŸีāđ€āļˆāļ­āļĢ์āđ€āļ”่āļ™āđƒāļ™ Java 8

āļ›āļĢāļ°āļ§ัāļ•ิāļ„āļ§āļēāļĄāđ€āļ›็āļ™āļĄāļēāļ‚āļ­āļ‡ Lambda expression Lambda expression āđ„āļĄ่āđƒāļŠ่āļŠิ่āļ‡āđāļ›āļĨāļāđƒāļŦāļĄ่āđƒāļ™āļ§āļ‡āļāļēāļĢ āļ āļēāļĐāļēāđ‚āļ›āļĢāđāļāļĢāļĄ ( Programming Language ) āđ€āļžāļĢāļēāļ° lambda āļĄัāļ™āđ€āļ›็āļ™āđāļāļ™āļŦāļĨัāļāļ‚āļ­āļ‡ āļāļēāļĢāđ€āļ‚ีāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļŠิāļ‡āļŸัāļ‡āļ์āļŠัāļ™ ( Functional Programming ) āļ‹ึ่āļ‡āļĄีāļ­āļēāļĒุāļĄāļēāļ™āļēāļ™āļĄāļēāļāđāļĨ้āļ§ āđāļ•่ Java āđ€āļžิ่āļ‡āļ™āļģāđ€āļ­āļēāļ„ุāļ“āļŠāļĄāļšัāļ•ิāļ™ี้āđ€āļ­āļēāļĄāļēāđƒāļŠ่āļĨāļ‡āđƒāļ™āđ€āļ§āļ­āļĢ์āļŠัāļ™ 8 āļŦāļēāļāļˆāļ°āļāļĨ่āļēāļ§āļ–ึāļ‡āļ—ี่āļĄāļēāļ‚āļ­āļ‡ lambda āļ„āļ‡āļ•้āļ­āļ‡āđ„āļ›āļ”ูāļ—ี่āļ–ึāļ‡āļ—ี่āļĄāļēāļ‚āļ­āļ‡ lambda calculus āļ‹ึ่āļ‡āļ–ูāļāļŠāļĢ้āļēāļ‡āļ‚ึ้āļ™āļĄāļēāļ•ั้āļ‡āđāļ•่āļ›ี 1930 āđ‚āļ”āļĒāļ™ัāļāļ„āļ“ิāļ•āļĻāļēāļŠāļ•āļĢ์āļŠāļēāļ§āļ­āđ€āļĄāļĢิāļัāļ™  Alonzo Church  āđ€āļžื่āļ­āđƒāļŠ้āđƒāļ™āļāļēāļĢāđāļ้āđ‚āļˆāļ—āļĒ์āļ›ัāļāļŦāļēāļ—āļēāļ‡āļ„āļ“ิāļ•āļĻāļēāļŠāļ•āļĢ์āļ—ี่āļĄีāļ„āļ§āļēāļĄāļ‹ัāļšāļ‹้āļ­āļ™ āđƒāļ™āļšāļēāļ‡āļ„āļĢั้āļ‡āļŠāļĄāļāļēāļĢāļ—āļēāļ‡āļ„āļ“ิāļ•āļĻāļēāļŠāļ•āļĢ์āļ—ี่āļĒāļēāļ§āđ„āļ›āļ­āļēāļˆāļˆāļ°āļ—āļģāđƒāļŦ้āđ€āļิāļ”āļ„āļ§āļēāļĄāļ‹ัāļšāļ‹้āļ­āļ™āđ‚āļ”āļĒāđƒāļŠ่āđ€āļŦāļ•ุ lambda calculus āļˆāļ°āļ—āļģāļāļēāļĢāļĒุāļšāļšāļēāļ‡āļŠ่āļ§āļ™āļ‚āļ­āļ‡āļŠāļĄāļāļēāļĢāļ™ั้āļ™āļ­āļ­āļāļĄāļēāđ€āļ›็āļ™āļŸัāļ‡āļ์āļŠัāļ™āļĒ่āļ­āļĒāđ† āđ€āļžื่āļ­āļ—āļģāđƒāļŦ้āļŠāļĄāļāļēāļĢāļ™ั้āļ™āđ€āļ‚้āļēāđƒāļˆāļ‡่āļēāļĒāļ‚ึ้āļ™ āļ•่āļ­āļĄāļēāļŦāļĨัāļāļāļēāļĢāļ‚āļ­āļ‡ lambda calculus āđ„āļ”้āļ–ูāļāļ™āļģāđ„āļ›āđƒāļŠ้āđƒāļ™ Turing Machine āļ‹ึ่āļ‡āđ€āļ›็āļ™āđāļšāļšāļˆāļģāļĨāļ­āļ‡āđƒāļ™āļ­ุāļ”āļĄāļ„āļ•ิāļ‚āļ­āļ‡ Alan Turing  āļ—ี่āļ•่āļ­āļĄāļēāļāļĨāļēāļĒāđ€āļ›็āļ™āļ•้āļ™āđāļšāļšāļ—ี่āļ–ูāļāļ™āļģāđ„āļ›āđƒāļŠ้āđƒāļ™āļāļēāļĢāļœāļĨิāļ•  Von Neumann Machine  āļ‹ึ่āļ‡ Von Neumann Machine āļ•ัāļ§āļ™ี้āđ„āļ”้āļāļĨāļēāļĒāđ€āļ›็āļ™āļ•้āļ™āđāļšāļšāļ‚āļ­āļ‡āļ„āļ­āļĄāļžิāļ§āđ€āļ•āļ­āļĢ์āđ€āļ„āļĢื่āļ­āļ‡āđāļĢāļāļ‚āļ­āļ‡āđ‚āļĨāļāđƒāļ™āđ€āļ§āļĨāļēāļ•่āļ­āļĄāļē āļ—้āļēāļĒāļ—ี่āļŠุāļ”āđāļ™āļ§āļ„ิāļ”āļ‚āļ­āļ‡ lambda calculus āļ็āļ–ูāļ...