วันศุกร์ที่ 15 กรกฎาคม พ.ศ. 2559

อะไรคือ Framework ในระดับ Enterprise

ขึ้นชื่อภาษา Java มันก็เป็นแค่ภาษานะครับ แต่ก็มีผู้เล่นในระดับใหญ่ๆของโลกได้คิดค้นสิ่งที่เรียกว่า Framework เข้ามา การที่มี Framework เข้ามาก็เพื่อควบคุมเรื่องของกรอบการพัฒนาแอพลิเคชั่นต่างๆให้มีระเบียบ เรียบร้อย แก้ไขได้เร็ว ลดเวลาการพัฒนา และที่สำคัญคือให้ทีมพัฒนาสามารถพัฒนาร่วมกันได้ ไม่ใช่ใ้ต่างคนต่างเขียนอะไรก็ไม่รู้ พอใครไม่อยู่ก็  Hell ละครับ
เมื่อมีสิ่งที่เรียกว่า Framework เกิดขึ้น พวกที่ประมาณว่าขาย Application Server หลายๆยี่ห้อ และก็ใหญ่ๆ ต่างก็มี Application Server เป็นของตัวเอง ซึ่ง Application Server เหล่านั้นก็ตั้งอยู่บนพื้นฐาน Java EE ไม่ใช่ SE นะครับ ซึ่ง Java EE นะได้มีการตระเตรียมไลบรารี่ต่างๆให้เราได้ใช้มากมาย โดยที่เราไม่ต้องเขียนเองเลยละครับ โดยเฉพาะเรื่องที่เกี่ยวข้องในระดับ Enterprise
ดังนั้นเมื่อพวกขาใหญ่ขาย Application Server ได้แล้วนั้นมันก็จะมี Framework ที่เค้าคิดขึ้นมาเอง หรือไปซื้อเข้ามา หรือควบรวมกิจการมาให้ผู้ที่ซื้อไปได้ใช้กันเพื่ออะไร ก็เพื่อที่ว่าต่อไปพวกขาใหญ่พวกนี้ทำโปรดักหรือแอพลิเคชั่นอะไรมาขาย เค้าก็จะได้อ้างว่าเพื่อความ Seamless ก็ใช้ Framework ของเค้าพัฒนาส่วนต่อขยายได้เลย
Framework ที่ออกมาให้เราได้ใช้ส่วนใหญ่ต่างยังตั้งอยู่บน On top ของ Java EE Standard อยู่ดีละครับ มันก็เลยยังเปิดโอกาสให้นักพัฒนาได้พัฒนาอะไรที่เป็นมาตรฐานเดิมๆอยู่ เช่น JSP, Servlet, Web Services,  และก็มีไฟล์ web.xml อยู่ในทุก Framework นะละครับ ซึ่งพระเอกที่ทำให้ Framework พวกนี้เกิดก็คือเจ้า Servlet นี่ละครับทำทำไรได้หลากหลายมากกๆ
เอาละครับ มาถึง Framework เจ้าใหญ่ๆที่เกาะไปกับ Application Server ในระดับ Enterprise กันนะครับว่ามันมีอะไรบ้างเท่าที่ผมพอจะรู้ แต่ผมรู้ไม่ลึกนะครับ เอาแค่ผ่านๆ เดี๋ยวก็มีคนเก่งมาอธิบายในภายหลังละกัน
ADF
Application Development Framework ตัวนี้ถือว่าเป็นตัวเอกของ Oracle เลยละครับ หลายแอพลิเคชั่นของ Oracle เริ่มทยอยเปลี่ยนมาใช้ ADF กันแล้ว ซึ่งเน้นการพัฒนาแบบ Configuration เป็นหลัก คือลากแล้ววาง ปรับค่าต่างๆ สามารถขึ้น production ได้เร็วมากถ้าไม่ได้ต้องการอะไรมากมายนะครับ ข้อเสียมันก็มีนะครับคือไฟล์ XML มันเยอะมากๆ จนน่าปวดหัว แต่บางคนเข้าใจแล้วสามารถทำ production ได้เร็วมากจริงๆ
ลักษณะเด่นของ Oracle ADF
  • เชื่อมต่อไปยังฐานข้อมูลแสนง่าย
  • เป็น Framework ที่เน้นให้ผู้พัฒนาง่ายๆ (คอนฟิคโหดแท้)
  • มีคอนโทรล UI สวยๆ ใช้งานได้ดี น่าใช้มากมาย
  • ทุกอย่างใช้การ Binding ข้อมูลมาแสดง
  • มีสิ่งที่เรียกว่า pageflow, takflow เพื่อความสบายในการนำกลับมาใช้ใหม่
  • ฟรีสำหรับผู้ที่ซื่อ Oracle Weblogic มาใช้ (ถ้าไม่ให้ใช้มีเฮ)
2014-03-26_215126
Architecture ของ Oracle ADF ดังรูปด้านบน ซึ่งมี 4 เลเยอร์
  • Business Layer ทำหน้าที่ในการจัดหาข้อมูลจากแหล่งข้อมูลหลายๆแหล่งและเรื่องของลอจิกทางธุรกิจ
  • Model layer ทำหน้าที่ในการจัดหาข้อมูลให้อยู่ในรูปแบบใดแบบหนึ่งซึ่งได้มาจาก Business layer แล้วก็จะถูกเตะไป เตะมาระหว่าง Controller และ View Layer
  • Controller Layer ทำหน้าที่ควบคุมการไหลของข้อมูลของแอพลิเคชั่น เหมือนนักบอลที่เลี้ยงลูกไปๆมาๆ นี่ละครับ
  • View Layer ทำหน้าที่ในการนำ Model ที่ถูกส่งมามาแสดงผล
Spring
ตัวนี้ประวัติยาวมากๆ มันเกดิขึ้นมาเพราะว่าคนสร้างไม่ค่อยชอบ Java EE เพราะว่ามันใหญ่เกินความจำเป็นมากๆ ตัวอ้วน ช้า เค้าเลยคิด Framework ของเค้าขึ้นมาเองซะเลยซึ่งเบาสบาย light-weight ซะจริงๆ เขียน Stand-alone แอพลิเคชั่นก็ได้ แถมติดตั้งได้กับแอพลิเคชั่นเวร์ฟเวอร์ เริ่มจากตัวเล็กๆคือ Apache Tomcat ส่วน Java EE ก็ใช้ได้นะครับ เค้าก็ไม่ว่า
คุณลักษณะเด่นของ Spring
  • ใช้หลักการเท่ห์ๆ เรื่องของ Dependency Injection (DI) ในการจัดการเรื่องคลาสเพื่อการปรับเปลี่ยนการทำงานได้อย่างรวดเร็วผนวกเข้า กับ XML และ Annotation
  • ใช้ประโยชน์จากแนวคิด Aspect programming (5+ คำใหม่ๆ ต้องไปศึกษาเองนะครับ)
  • ซัพพอร์ตเรื่องของ declarative ต่างๆ ทำให้โค้ดหดสั้น
  • ยังทำงานร่วมกับมาตรฐานของ Java EE ได้
  • เข้ากันได้กับ Hibernate และ Quartz Framework ตั้งแต่แรกโดยที่ไม่ต้องกำหนดอะไรมากมาย
  • ยืดหยุ่นในการใช้งานกับ Web Framework สำหรับการสร้าง RESTful แอพลิเคชั่นและบริการต่างๆ
  • เขียนไปทดสอบไปง่ายๆด้วย Unit และ Integration
2014-03-26_222058
JBoss SEAM
SEAM การรันตีว่าตัวเองตั้งอยู่บนพื้นฐานของ Java EE, แต่ได้รับการดัดแปลงเรื่องของ API ให้ใช้งานได้ง่ายขึ้น และให้นักพัฒนาเข้าถึง API ได้ง่ายๆผ่าน Annotation แล้วก็ยังมี UI สวยๆมากหน้าที่ให้ใช้งานกัน แถม XML ก็ยังสั้นๆ และสุดท้าย SEAM ตั้งใจจะทำให้การพัฒนาแอพลิเคชั่นเป็นไปตามมาตรฐานและเข้ากับแอพลิเคชั่น เก่าๆได้และแถมเรื่องของ Cloudเข้ามาด้วย
คุณลักษณะเด่นของ JBoss SEAM
  • มี JSF และ EJB มาให้ใช้ด้วย
  • มี AJAX ( Asynchronous JavaScript and XML)
  • ซ่อนการทำงานของกระบวนการทางธุรกิจผ่าน jBPM (เหอๆ ฺBPM ใหม่อีกละ)
  • การควบคุม State จัดการผ่านทาง Declarative
  • ใช้ XML Annotation
  • ทดสอบโค้ดง่ายๆ
2014-03-26_223444

ที่เหลืออาจจะมีอีกนะครับ ก็ลองเลือกๆกันดู เพราะเลือกแล้วยาวๆไปเลยครับ หรือจะตามขาใหญ่ไปดี

ที่มาของเนื้อหา http://www.fusionidea.biz

วันจันทร์ที่ 11 กรกฎาคม พ.ศ. 2559

Object Oriented Programming (OOP)

Object Oriented Programming (OOP)

ภาพจาก http://www.voidspace.org.uk/
Object Oriented Programming เป็นการเขียนโปรแกรมโดยการมองสิ่งต่างๆ เป็นวัตถุ ซึ่งใน Realworld สิ่งต่างๆ รอบๆ ตัวเราก็เป็นวัตถุ โดยมีแนวคิดที่ว่า สิ่งที่ประกอบกันเป็นวัตถุนั้นจะประกอบไปด้วย
  • Attribute(ลักษณะที่สามารถอธิบายได้ว่าวัตถุนี้คืออะไร อย่างเช่น คนสิ่งที่อธิบายได้ว่าเป็นคน อาจจะเป็น มีหู ตา จมูก ปาก แขน ขา อะไรพวกนี้)
  • Method(พฤติกรรมของวัตถุนั้นว่าสามารถทำอะไรได้ พูดง่ายๆ การกระทำนั่นแหละ)
เราสามารถทำการ Implement ได้โดยการทำให้อยู่ในรูปของ Class ซึ่งเปรียบเหมือนกับต้นแบบที่ไว้ สร้าง Object (Class ไม่ใช่ object นะ) คุณสมบัติที่สำคัญของ OOP ก็คือ

  1. Encapsulation
    เป็นการห่อหุ้ม Attribute ไว้ด้วย Method หมายความว่าการที่เราต้องการเข้าไป เปลี่ยนแปลงหรือใช้ค่า Attribute นั้นต้องกระทำผ่าน Method ยกตัวอย่างเช่นเด็กหญิงนิดกับเด็กหญิงหน่อยเป็นเพื่อนกัน มีอยู่วันหนึ่งนิดเดินเหยียบเท้าหน่อย หน่อยรู้สึกไม่พอใจ (ตอนนี้ค่า Attribute อารมณ์ของหน่อยเพิ่มขึ้น) แต่นิดยังไม่รู้ เมื่อหน่อยแสดงสีหน้าไม่พอใจ เมื่อนิดเห็นแบบนั้นนิดรู้สึกผิด(หน่อยก็ยังไม่รู้เพราะ นิดคิดอยู่ในใจ) จึงกล่าวขอโทษ หน่อยได้ยินแบบนั้นจึงหายโกรธ

    ตัวหนา คือ Method
    ตัวหนาเอียง คือ Attribute จะเห็นได้ว่าค่า Attribute นั้นก็คือค่าที่อยู่ภายในการที่จะให้ Object อื่นรับรู้ได้ก็จำเป็นที่จะ ต้องแสดงค่านั้นออกมาผ่านทาง Method สิ่งที่ส่งออกมาให้ Object อื่นรับรู้นั้นเราเรียกว่า Message จากตัวอย่างจะเห็นว่ามีการเปลี่ยนแปลงค่า Atrribute ตอนที่นิดเหยียบเท้าหน่อยนั้น การเหยียบเท้าคือ Method ที่แสดงออกมาทำให้อารมณ์ ซึ่งเป็น Attribute อยู่ภายในเปลี่ยนแปลง และ การกล่าวขอโทษก็เป็น Method ที่ทำการเปลี่ยนแปลงค่า Attribute ดังนั้นภาพของ Object ในหัวก็จะเป็นลักษณะที่ Method ห่อหุ้ม Attribute ไว้ วัตถุทุกตัวจะแสดงออกให้รับรู้ถึงสิ่งที่อยู่ภายในหรือสิ่งที่ต้องการผ่าน ทางการกระทำ
  2. Inheritance
    เป็นการทำให้ Class สามารถสืบทอดต่อกันได้ โดยลักษณะของการสืบทอดนั้นก็เพื่อเพิ่มเติมความสามารถให้สามารถทำงานได้ มากกว่าคลาสแม่ที่สืบทอดมา เช่น คลาสของคนสืบทอดมาจากคลาสของสัตว์เลี้ยงลูกด้วยนม โดยที่ Method พื้นฐานของสัตว์เลี้ยงลูกด้วยนมนั้น สมมุติให้มีเพียง กินอาหาร สืบพันธุ์ ขับถ่าย Class ของคนที่สืบทอดมาจากสัตว์เลี้ยงลูกด้วยนม สิ่งที่คนทำได้แตกต่าง เช่น การพูด ก็จะถูกเพิ่มเข้าไปในคลาสของคน สรุปว่าคนสามารถ กิน,สืบพันธุ์,ขับถ่าย และ พูด ได้
  3. Abstraction
    เป็นการสร้าง Method แบบลอยๆ ขึ้นมายังไม่ได้ระบุรายละเอียดว่า Method นั้น ทำงานอย่างไรจะมีการระบุการทำงานในส่วนของ Subclass ที่รับสืบทอดมา สาเหตุที่มีการทำแบบนี้ก็เพื่อให้สามารถใช้ Polymorphism ได้นั่นเอง
  4. Polymorphism
    คือสภาวะที่ Method มีหลายรูปแบบ​ เป็น​วิธีการกำ​หนดรูปแบบการกระทำ​ที่​เหมือน​กัน​แต่​ได้​ผลที่​แตกต่างกัน สมมุติว่ามี คลาสแม่(Superclass) ที่เป็นคลาสของสัตว์เลี้ยงลูกด้วยนม โดยมีคลาสลูก(Subclass) คือ คลาสของคนกับสุนัข ซึ่งทั้งคนกับสุนัขมี Method ที่ใช้ในการเปล่่งเสียงซึ่งการเปล่งเสียงระหว่างคนกับสุนัขนั้นไม่เหมือนกัน แต่มันก็คือการเปล่งเสียง ดังนั้นเมื่อได้รับ Message ที่บอกให้ทำการเปล่งเสียงทั้งคนและสุนัขก็สามารถเปล่งเสียงได้เพียงแต่มี เสียงที่แตกต่างกันเท่านั้นเอง เพื่อให้สามารถเข้าใจได้ง่ายเราก็จะสร้าง Method ที่ชื่อว่า เปล่งเสียง( ) มาเพียงชื่อเดียวแล้วใช้หลักการ polymorphism นี้เพื่อให้สามารถเปล่งเสียงได้หลายๆ รูปแบบ
การสร้างโครงสร้างการ Design แบบ OO ที่ดีนั้นควรพยายามสร้างตามหลักข้างบนให้ได้นะครับ จะช่วยได้มากเลยทีเดียว แต่ที่แน่ๆ พยายามทำให้คลาสของเรามีลักษณะที่เป็น Encapsulation ตามข้อแรกให้ได้ครับ
นี่ก็เป็นหลักการในการเขียนโปรแกรมแบบ OO ที่ผมสรุปมาจากความเข้าใจของตัวเองนะครับไม่ได้อ้างอิงมาจากที่ไหน ถ้ามีส่วนใดที่ผิดก็แสดงความคิดเห็นมาได้ครับ คราวต่อไปจะมาเล่าเรื่องปัญหาที่เกิดจากการ Design ให้ฟังครับ