Upload
lek-pongpatimet
View
32
Download
3
Tags:
Embed Size (px)
Citation preview
1
ชอไฟล : Introduction Software Factory ตนฉบบ : นกเขยนตนฉบบ : ลงในฉบบ / คอลมน : โดย (หรอ เรยบเรยงโดย) : ปฐมรตน ใจกวาง (นายประกอบ พงศปฏเมธ) บรรณาธการ : ชอเรอง : 1. การพฒนาซอฟตแวรดวย Software Factory Toolkits 2. ความรเบองตนเกยวกบ Enterprise Software Architecture Development 3. ความรเบองตนเกยวกบ Software Factory เรองยอ : การพฒนาซอฟตแวรดวยแนวคด Software Factory เปนแนวคดทใชออกแบบและพฒนาระบบงานขนาดใหญ (Enterprise Software Development) ซงจ าเปนอยางมากทตองพฒนาโครงสรางหลกหรอสถาปตยกรรมซอฟตแวร (เฟรมเวรค) ใหดเสยกอน แตนกพฒนาในบานเราสวนมากกคดพฒนาเฟรมเวรคดวยตนเอง ใครมประสบการณมากกพฒนาไดด ใครมประสบการณนอยกพฒนาไดไมดนก รวมถงความรในเรอง Enterprise Software Architecture ของนกพฒนาบานเรายงมไมมาก และตางคนตางพฒนา ท าใหวธการและกระบวนการมความหลายหลากและไมสามารถแลกเปลยนแนวคดกนไดมากนก ท าใหกระบวนการเรยนรของเรามจ ากด ดงนนสวนทผมเสนอมานคอการน าแนวคดมาตรฐานททางกลมพนธมตรไมโครซอฟต (Microsoft Community) ไดพฒนามาใหใชเพอใชเปนรปแบบ (Patterns) และน ามาปฏบตไดจรง (Practices) ซงกตรงกบชอกลมทเขาตงมาคอ Patterns & Practices นนเอง ดงนนจงอยากเรยนเชญผอานทกทานลองมาท าความรจกเครองมอ รปแบบและกระบวนการทเขาใหมาวามนจะดเพยงใด และถามนดจรง กอยากใหพวกเราชวยกนเรยนรและมาแลกเปลยนความคดกน ผมเพยงแตเปนผน าเสนอและเรมตนใหครบ รวมทงยนดตอบค าถามททานผอานสงสยในสงทผมพอตอบไดครบ โปรยเปด : เนอเรอง :
2
Enterprise Software Architecture Development กบ Software Factory
สวสดครบ ผมปฐมรตน ใจกวาง ส าหรบครงนเปนครงแรกทผมเขยนบทความลงบน PC Magazine แตกไมใชใหมเสย
ทเดยว เพราะวาเคยแปลหนงสอของ Microsoft Press ทเกยวกบ Windows 2000 Professional ตอนนนเปนอะไรทเหนอยมาก เพราะเรมตนไมรจะใชค าอะไรด การใชภาษาเปนเรองยากจรงๆ
มาวนนไมไดมาแปลหนงสอ แตมาเขยนบทความทมาจากประสบการณ ทงทเคยวเคราะห ออกแบบระบบ และ ศกษาและพฒนา (Research and Development) เทคโนโลยใหมๆ ของไมโครซอฟตมาหลายป จนไดไปเหน เครองมอทใชพฒนางานทเปนรปแบบ มตวอยางการใชงาน ตวอยางระบบงานจรง ขนตอนและวธการใชงานเปนระบบแบบแผน รวมถงตวซอฟตแวรเลยทเดยว โดยมบรษทไมโครซอฟตเปนแกนน า และมพนธมตรมารวมตงเปนกลมนกพฒนาโดยใชรปแบบการพฒนามาตรฐาน ซงผมกสนใจเขาไปศกษาและเรยนร รสกวานาสนใจมาก กเลยอยากแนะน าสงดๆ ใหผอานลองอานดครบ และเปดโอกาสใหทกทานวจารณและแลกเปลยนความคดเหนกนได ผมกเพยงเอาประสบการณเลกๆ นอยๆ มาน าเสนอ
ส าหรบเครองมอดงกลาวนน เปนเครองมอทใชพฒนาระบบงานและสถาปตยกรรมซอฟตแวรขนาดใหญ (Enterprise
Software Development) ซงผมจะเรมตนจากแนวคดของการตงโรงงานพฒนาซอฟตแวร (Software Factory) เพราะวาแนวคดของเครองมอพฒนาดงกลาวนมาจากแนวคดของโรงงานผลตซอฟตแวร (Software Factory) ซงหลายทานอาจจะเหนวาเปนเรองใหญมาก และเรวๆ น กมขาวบอกมาวา เราจะเปน Outsource แขงกบ อนเดย จน เวยดนาม ในดาน Enterprise Software กขอใหทบทวนนโยบายใหม เรามนกพฒนาซอฟตแวรหลกหมน แตเวยดนามมแผนจะผลตนกพฒนาซอฟตแวรเปนหลกลาน เราจะท าอยางไรด ถาบทความผมมประโยชนตอการสรางสรรคนกพฒนาซอฟตแวรเลกๆ ผมกยนดแลวครบ ถาผใหญของเรายอมแพ พวกเราจะยอมแพตามหรอเปลาครบ ผมคนหนงทไมยอมแนนอน
กอนอนเรามาเรมเรองแนวคดของการพฒนาระบบงานดวย Software Factory ของเราดกวาครบ แนวคดของการพฒนาระบบงานดวย Software Factory
ส าหรบแนวคดในการออกแบบระบบงานนนจะใชแนวคดของโรงงานพฒนาซอฟตแวร (Software Factory) ซงเปนการรวบรวมองคความรสมยใหมแบบบรณาการเพอใชแกไขปญหาและปรบปรงกระบวนการพฒนาซอฟตแวรจากการพงพาฝมอของนกพฒนาไปสการใชเทคโนโลยชนสงและความรทางวศวกรรมซอฟตแวรททนสมยใหเหมอนกบอตสาหกรรมการผลตประเภทอน เชน อตสาหกรรมผลตรถยนต เปนตน โดยแนวคดโรงงานพฒนาซอฟตแวร (Software Factory) นจะเนนการออกแบบและพฒนาชนสวนซอฟตแวร (Semi-Part) ซงจะถอวาเปน Software Asset พรอมทจะน ามาปรบแตงและน ามาประกอบกนใหเปนชนสวนซอฟตแวรส าเรจ (Finished Software Part) เพอน าไปใชประกอบกนเปนแอพพลเคชนอกทหนงตวอยางเชน ชนสวนหนาจอทใชบนทกเรยกดสนคาคงคลงเปนตน ซงชนสวนนจะแยกออกจากชนสวนเปนบซเนสโลจก (Business Logic) และสวนทจดการขอมล (Data Access) ส าหรบชนสวนหนาจอนนกยงสามารถแยกออกเปนชนสวนยอยๆ ไดอกและน ามาประกอบกนเปนหนาจอส าเรจ (Finished Screen Part) เพอใหงายตอการปรบปรงเปลยนแปลงหนาจอใหมความหลายหลากตามความตองการของลกคาทเปลยนไป รวมไปถงการเปลยนแปลงเทคโนโลยใหมในอนาคต
จากแนวความคดโรงงานพฒนาซอฟตแวรนน กเปนทพดกนมานานมากทงในประเทศและตางประเทศแตกยงไมประสบความส าเรจมากนกเนองจากขาดเทคโนโลยสนบสนนท าใหการพฒนาใชตนทนสง ซงผทเรมใชแนวคดของโรงงานพฒนาซอฟตแวรครงแรกคอ บรษท Hitachi ไดเรมพฒนา Hitachi Software Factory ขนมาเมอป 2512 ตอจากนนบรษท System Development ของอเมรกา กเรมใชแนวคดนในการพฒนาเมอป พ.ศ. 2518
3
จากแนวคดดงกลาวนน ในปจจบนนมความเปนไปไดสงขนเมอ Jack Greenfield และ Keith Short ซงทงสองทานเปน Architect อยทบรษทไมโครซอฟท ไดเขยนหนงสอชอวา “Software Factories Assembling Application with Patterns, Models, Frameworks, and Tools” เมอป พ.ศ. 2547 หลงจากนนป พ.ศ. 2548-ปจจบน ทางบรษทไมโครซอฟต รวมถงกลมพนธมตรของไมโครซอฟต (Microsoft Community) ทอยทวโลก กไดผลตเครองมอในการพฒนาซอฟทแวรขนตามแนวคดของบคคลทงสองน โดยเรมตนจาก Enterprise Library Block ซงใชเปนมาตรฐานในการเขยนโปรแกมในเรองตาง ๆ เชน การตดตอฐานขอมล การเขยนโปรแกรมตรวจสอบความผดพลาดของโปรแกรม การเขยน Log File เปนตน หลงจากนนกไดออกชดเครองมอ Smart Client Software Factory (SCSF) ซงนบไดวาเปนกาวแรกของแนวคด Software Factory จากนนกไดออก Web Service Software Factory (WSSF) ซงใชเปนเครองมอหรอเครองจกรในการผลตชนงานทเปน SOA ซงเครองมอทงหมดนจะใช Guidance Automation Toolkit เปนเครองมอสรางชนสวนซอฟตแวรใหโดยอตโนมตถาชนสวนนนถกพฒนาดวยวธการ รปแบบและขนตอนเดยวกน หลงจากนนกไดพฒนา Composite Application Guidance ส าหรบ WPF และ Silverlight เพอใชกบเทคโนโลยใหมของไมโครซอฟต นนกคอ WPF และ Silverlight นอกจากนนกมเครองมออนๆ อกมาก ซงเครองมอตางๆ นสามารถดาวนโหลดมาใชไดโดยไมเสยคาใชจายใดๆ ซงจะท าใหประหยดตนทนในการพฒนาเครองมอและท าใหระบบงานรองรบงานไดยดหยนและมมาตรฐานเทยบเทาตางประเทศได ส าหรบรปท 1 นนจะเปนสงทมาพรอมกบเครองมอ
รปท 1: ค าแนะน ามาตรฐาน (Guidance) และตวอยางการใชงานของ Software Factory
จากรปท 1 จะเหนวาชดเครองมอของ Software Factory นนจะม ขอแนะน าเชงปฏบต (Recommended Practices) ซงจะแบงออกเปนหลายๆ ดานดวยกน คอ เอกสารทอธบายสถาปตยกรรมการออกแบบ (Architecture Documentation) ตวอยาง QuickStarts
4
รปแบบมาตรฐานทใชพฒนา (Patterns) ไลบราร และ บลอกมาตรฐานส าหรบพฒนาแอพพลเคชน (Application Blocks) เทมเพลตชวยการพฒนา และ Recipes รวมถงตวอยางแอพพลเคชนจรงทใชพฒนาดวยวธน (Reference Implementation) ซงชวยใหสามารถศกษาวธการใชงานของเครองมอดงกลาวไดเปนอยางด
จากแนวความคดเรองโรงงานพฒนาซอฟตแวร (Software Factory) รวมถงเครองมอตางๆ ทบรษทไมโครซอฟตไดพฒนาขนมาชวยสนบสนน ท าใหเราสามารถพฒนาชนสวนซอฟตแวร (Simi-Software Part) ไดงายขนดวยวธการดงรปดานลาง
รปท 2: รปแสดงการพฒนาชนสวนซอฟตแวร
จากรปจะเหนวา สวนทอยดานลางนนจะเปน Fixed Assets ซงเปนชนสวนประกอบทจะใชท าเปนซอฟตแวร และทางฝงซายมอ กเปนกระบวนการทเพมเขามาคอ เราตองมการท า Product Line Development ซงตรงนกอาจหมายถง การแบงออกเปน การพฒนาหนาจอ สวนเชอมตอฐานขอมล และสวนบซเนสโลจกเปนตน ซงเมอเราเตรยมเสรจเรยบรอยแลว มนกจะเปน Variable Asset ทพรอมเขาไปอยในกระบวนการทางดานขวามอกคอ Product Development ซงจะเปนกระบวนการท าใหออกมาเปนงานส าเรจรปทพรอมใหทดสอบการท างานหรอใหผใช ใชงานตอไป
Automation Lifecycle Management (ALM) ในการพฒนาระบบงานทเปนโรงงานผลตซอฟตแวรนน จ าเปนอยางยงทตองใชเครองจกรททนสมยเพอใหสามารถ
รองรบการพฒนาทซบซอน และสอดคลองกนทงกระบวนการ ตวอยางเชน จากความตองการลกคา (Requirements) นนเปนสงแรกทเขามาในกระบวนการ จากนนกจะเขาไปสกระบวนการวเคราะห (Analysis) สรางโมเดลการออกแบบ (Modeling) และพฒนา (Develop), Build, ทดสอบระบบ(Test) ซงทงหมดจะตองท างานเปนระบบสอดคลองกนตงแตตนจนจบ และควบคมชนงานทออกมา ในแตละขนตอนใหสามารถตรวจสอบไดและตรงตามความตองการของลกคาทใหมา และกระบวนการทงหมดควรจะเปนระบบอตโนมตใหมากทสดเพอทจะประหยดคนท างาน แตไดงานมประสทธภาพสงสด ดงนนการสรางโรงงานพฒนาซอฟตแวรจงหลกเลยงไมไดทจะตองใชเครองจกรททนสมย ซงตรงนกตรงกบผลตภณฑของไมโครซอฟตคอ Visual Studio Team System ซงผมก าลงรอใชเวอรชน 2010 อย ซงจะมฟเจอรดๆ หลายๆ อยาง
5
รปท 3: รปแสดงกระบวนการท างานของ ALM
จากรป เปนแผนภาพแสดงสวนประกอบตางๆ ทท างานรวมกนของกระบวนการพฒนาซอฟตแวรทเปน ALM
6
สรางโรงงานซอฟตแวร ส าหรบเนอหาในตอนนเราจะสรางโรงงานกน ส าหรบโรงงานผลตซอฟตแวร (Software Factory) จะประกอบดวยองคประกอบดงน
1. สถานท ผมคดวาถาเปนไปไดผมจะสรางเวบไซตสวนกลางและใหสมาชกผอานทงหลายทสนใจ เขามามสวนรวมในโรงงาน
ซอฟตแวรดวย โดยแบงเปนบทบาทแตละบทบาทซงผมจะไดอธบายตอไป และเราจะพฒนาซอฟตแวรตนแบบกน กอาจจะตองม
เรอง Software Development Environment เขามาเกยวของ ซงตอไปจะสรางเปนรปแบบใดคอยวากนไป (ถามนเกดขนได) และ
ผทท างานกสามารถท างานอยทใดกไดโดยผานอนเตอรเนต เพอใชเวลาวางใหเปนประโยชน (ส าหรบทานทยงมภาระท างาน
ประจ าอย) เพอทจะไดเปนสนามฝกฝนในเรอง Enterprise Software Architecture Development
2. ทมงาน แนนอน โรงงานกตองประกอบดวยเจาของและผถอหน และพนกงานใชไหมครบ ซงกมดงตอไปนครบ
2.1 Project Sponsor หรอผใหการสนบสนน ส าหรบตรงนผมวา ทกทานทรวมในโครงการเปน Project Sponsor ไดครบ
เพราะวาอะไร กเพราะวาเราท างานโดยไมตองใชเงนทนจากคนอน เราท างานโดยใชเงนทนของพวกเรากนเอง นนคอเวลาท
มารวมท างาน หลายคนอาจจะงงวา เราจะท าอะไร ในตอนเรมตนคงยงไมมอะไรมากกคงเปนสนามฝกใหคนในชมชนเขาใจ
การท าแอพพลเคชนแบบโรงงานซอฟตแวรนนเอง (ถาพวกเราเหนดวยนะครบ ผมแคเสนอแนวคดเขาไป) แลวตอไปคอยวา
กนวาพวกเราจะท าอะไรตอส าหรบชมชนเรา เนองจากการท าโรงงานซอฟตแวร ตองใชทมงานทมความรความสามารถ
เฉพาะดานในเรองตางๆ มาท างานรวมกน ภายใตจดมงหมายเดยวกน และดวยกระบวนการทด และทกคนกเปนเจาของ
รวมกน (ดไหมครบ) เอ ฟงดจะท าไดอยางไร กมารวมออกความคดกนกไดครบ นอกจากนนผมอยากใหทาง บรษท
ไมโครซอฟตเขามาสนบสนนดวย เพราะวาเขาเปนเจาของเทคโนโลย และเรากเอาเทคโนโลยเขามาใชรวมกนเปน Total
Solution จะใหเปนตงค หรอใหเปนเครองมอกไดครบ หรอทานสมาชกทานใดทมเงนเหลอเยอะและไมรจะเอาไปท าอะไรก
บรจากกไดครบ
2.2 ทมพฒนา ส าหรบทมงานนนจะมบทบาทและความรบผดชอบดงรปดงนครบ
รปท 4: รปแสดงโครงสรางของทมงาน
7
จากรปท 4 เปนรปแสดงโครงสรางของทมงานซงมรายละเอยดดงตอไปน
2.1.1 Project Manager (PM) ท าหนาทบรหารจดการโครงการ เพอใหงานส าเรจอยภายในเวลาและคาใชจายท
ก าหนด
2.1.2 Business Analyst ท าหนาทวเคราะหความตองการของระบบงาน ซง BA จะตองมความรดในเรอง Business
Process ของงานทก าลงท าอย ซงทจรงแลวจะตองรดมากวาผใชเพราะวาผานงานมาหลายหลากและจะตอง
แนะน าผใชและปรบปรงกระบวนการท างานของผใชได ไมใชไปรบฟงผใชงาน และท ากระบวนการตามผใช
ก าหนดอยางเดยว ถาเปนอยางนเราจะเรยกวา System Analyst มอใหมหดขบครบ
2.1.3 Software Architect ท าหนาทออกแบบโครงสรางของระบบงาน (Framework) และจดท ารปแบบการพฒนา
มาตรฐาน (Patterns and Standard Guideline) และเครองมออนๆ ให Developer ไวใชงาน ซง Software
Architect นนจะตองมความรดในเรอง OOAD/OOP และ Development Patterns รกเทคนคเปนชวตจตใจ
Software Architect จะไมชอบไปวเคราะหระบบมากนก ท าไดครบแตใหเลอกไมเอาดกวา พดแลวเหมอน
ท านายดวงคนรา Software Architect เลยครบ เพราะวาผมกคนรานเหมอนกน (ผเขยนเคยเรยนวชา
โหราาสตรมาแตไมมเวลากษาเพมเตม แคตดตามเทคโนโลยใหทนไมโครซอฟตกแยแลว) นอกจากนน
ส าหรบการออกแบบทเปนโรงงานซอฟตแวรนน Software Architect จะคอยท าหนาทสรางชนงานทเปน
Simi-Part และก าหนดสเปกเพอใหสามารถน ามาประกอบกน (Assembly) ใหไดเปนชนงานส าเรจ รวมถง
จดท าคมอการท างานของไลนการผลตตาง ๆ ฝกอบรมการใชงาน แกไขปญหาทเกดขนทเกยวกบงานนน
รวมถงปรบปรงกระบวนการใหดขน
2.1.4 ตอไปเปน System Analyst (SA) ซงท าหนาทเปนนกวเคราะหระบบ เกบรวบรวมความตองการลกคา จดท า
Requirement Specification และควบคมการเปลยนแปลงความตองการเพอไมใหกระทบกบแผนงานหลก
มากนก ส าหรบ Software Architect นน (ผเขยนไมรจะใชตวยออะไรเนองจากเหมอนกบ SA ถาใครอยากตง
ตวยอกเชญครบ) และนอกจากนน SA กจะตองเขามาออกแบบระบบโดยจะตองท างานรวมกนกบ Software
Architect ซงในสวนตวผมมองวา SA จะออกแบบในเชง High Level Design หรอในระดบภาพกวางๆ ซงยง
ไมใชเทคนคมากนกเพอใหครอบคลมความตองการของลกคาเพราะวารความตองการของลกคาไดดกวา สวน
Software Architect นนจะออกแบบในเชงรายละเอยด (Detail Level Design)โดยรบขอมลมาจาก SA (SA
และ Software Architect อาจเปนคนเดยวกนไดครบเพราะผมพดถงบทบาท (Role) คนหนงอาจท าไดหลาย
Role ครบ) และจะตองให SA คอยทบทวน (Review) วาสงทไดออกแบบตอบสนองตอความตองการลกคาได
ทงหมดหรอไม ดงนน SA, Software Architect และ PM จะคอยตรวจสอบการออกแบบระบบงานกอนทจะ
เขาไปสกระบวนการผลตจรง เพราะวาถาเขาสกระบวนการผลตแลว มการเปลยนแปลงการออกแบบนนคอ
หายนะครบ เพราะวาจะท าใหตนทนสงขนอยางมหาาล
2.1.5 ตอไป กเปน SQA และ Test Manager ซงอาจจะแยกเปนแตละ Role กได โดย SQA (Software Quality
Assurance) ซงถาใครท า CMMI อยกจะรวาไมมคนนไมไดเพราะมนเปนพนฐานทส าคญเพอควบคม
8
กระบวนการท างานใหเปนไปตามทก าหนด ซง SQA จะเปนผบรหารจดการกระบวนการท างานและ
ตรวจสอบระบบงาน รวมถงการตรวจสอบทมงานวาไดท าตามกระบวนการทก าหนดไวหรอไมและจดท า
เอกสารตางๆ ทจ าเปนครบถวนหรอไม พดแลวหลายคนจะไมคนกบคนราน คนรานเปนนกตรวจสอบครบ
(เอาอกแลว) คอยหาวาชาวบานลมท าอะไรทส าคญ หรอละเลยบางอยางไปหรอไม บางคนเกงถงขนาดมอง
แปบเดยวรวาเราคยอะไรผด เหนไหมวาเขามความสามารถพเษอะไรทเราท าไมได อยาเอาคนรา Software
Architect ไปท าเดดขาดท าไดครบแตตองใชความพยายามสง และโดยนสยแลวไมชอบ ส าหรบ Test
Manager รวมถงนนจะเปนผบรหารจดการการท าสอบระบบงานตามแผนทดสอบ ตามเหตการณ (Scenario)
โดยแบงออกเปนกรณยอยๆ ซงเราจะเรยกวา Test Case และจดท าขนตอนการทดสอบรวมถงก าหนดลกษณะ
ขอมลทสอดคลองกบเหตการนนๆ เพอใหคมกรณตางๆ ใหมากทสด รวมถงกรณแปลกๆ ทจะเกดขนดวย
สวนผทท าการทดสอบนนจะเปน Tester ครบ
2.1.6 ส าหรบ Developer นนจะท าหนาทพฒนางานตามสเปกทไดออกแบบมาจาก SA โดยโครงสรางแลวกลม
Developer จะถกแบงออกเปนกลมยอย ๆ ซงในภาษาโรงงานจะเรยกวาไลนการผลตนนเอง ออลมไป ในสวน
Software Architect นนกจะแบงออกเปนกลมๆ เหมอนกนคอหวหนาทมดแลทงหมด และทมตาง ๆ ทท า
หนาทออกแบบสวนตาง ๆ (โดยธรรมชาตแลว Software Architect ในกลมตาง ๆ กเตมโตมาจาก Developer
นนเอง) และการแบงออกเปนกลมๆ นในทางปฏบตเปนเรองทท าไดไมยากแลวครบมเครองมอสนบสนน
(ไมใชวาผมจะเอาแนวคดสวยหรมาแสดงใหดเท แตมนปฏบตไดจรงซงผมจะไดอธบายตอไป) โดยจะ
แบงเปนกลมๆ ดงน
2.1.6.1 นกพฒนาว วกรรมหนาจอ (Screen Engineer) ซงการพฒนาหนาจอนในปจจบนนบวาเปนงานทม
ความซบซอนมาก และผใชจะยอมรบระบบหรอไมกอยทหนาจอน โดยเฉพาะหนาจอทใชเทคโน
โลย WPF และ Silverlight
2.1.6.2 นกพฒนาบซเนสโลจก (Business Logic Engineer) ส าหรบนกพฒนาสวนนผมเคยคดวาจะให SA
เปนคนท า เนองจากวา SA จะรด และสามารถเขยนไดดโดยทไมตองถายทอดสเปกไปให
Developer ซงแนนอน Developer กจะไมสามารถรบได 100% ขนอยกบ Developer วาม
ประสบการณมากนอยเทาไร สมมตวารบได 70% อก 30% กจะเปนขอบกพรองของซอฟตแวร
(Bug) ครบ ซงการพฒนาตรงนผมมองวาเราควรเอาเทคนคของ Windows Workflow Foundation
(WF) หรอเครองมอทใชพฒนา Workflow หรอ Business Process Management (BPM) มาใช
เพราะวา SA กตองเขยนสเปกเปนโฟลวอยแลว ท าไมไมเขยนโดยใชเครองมอทเปน Workflow เลย
ส าหรบสวนทเปนโปรเซสยอยของการท างานในโฟลวนน (จะเรยกวา Activity Code) กให
Developer เปนผพฒนา อยางนอยโฟลวกไมผด ตรงนเราสามารถออกแบบการท างานใหดได
นอกจากนนแลว ถาเปนงานทเปนเซอรวส กพฒนาใหเปน SOA ไดซงกมเครองมอ Web Services
Software Factory หรอเครองมออนๆ ชวยอยแลว ดงนนเรอง SOA กเปนเรองทมความซบซอนอย
แลวกอาจจะแยกเปนเรองหนงซงจะเอาไปตอกบ Workflow ได (WF 4.0 สามารถ integrated กบ
9
WCF ไดดแลวครบ ตรงนนบวาเปนขาวดส าหรบผทจะท า Workflow ใหเปน SOA) โครสนใจกมา
กษาตรงนได
2.1.6.3 ส าหรบฐานขอมลนนเปนหนาทของ Data Administrator (เปนคนเดยวกบ SA กไดครบ) ดแล
ขอมล ความสมพนธขอมลเพอสรางฐานขอมล และจดท า Data Model ส าหรบ Data Model น
ผเขยนไดใช ADO.NET Entity Framework (EF) ส าหรบท า Data Model ซงกจะท าใหนกพฒนา
สามารถเรยกใช Business Entity ทถกสรางมาจากโมเดลได โดยท Develop ไมตองไปสรางเอง ซง
การสราง Data Model และ Entity Class สวนกลางเปนหนาทของ Data Administrator ทสรางไว
ให Developer ใชงานเพอใหสามารถพฒนางานสวนนไดงายทสด
3 แนวคด เทคโนโลยและเครองมอทน ามาใช
ตอไปกจะพดเรองเทคโนโลยและเครองมอทจะน ามาใชครบ วาโรงงานเราจะน าเครองจกรอะไรมาชวยผลตซอฟตแวรใหทนสมย
ซงกมเปาหมายคอ ลดตนทนการท างาน (รวมตนทนทเกดจาการบ ารงรกษาซอฟตแวรดวย) เพมคณภาพของซอฟตแวรใหดขน ซง
จรงๆ แลวจะตองมกระบวนการพฒนาซอฟตแวรหรอ Software Process Improvement รวมดวยนะครบ การใชอยางใดอยาง
หนงไมสามารถบรรลเปาหมายได เหนไหมครบการพฒนาซอฟตแวรปจจบนท าไมเรองมากจง กลองจนตนาการโรงงานผลต
รถยนตกแลวกน ผมวาโรงงานผลตรถยนตยงมความซบซอนกวาโรงงานผลตซอฟตแวรตอนนเสยดวยซ า
3.1 แนวคดและเทคโนโลยทน ามาใช
ส าหรบแนวคดทจะน ามาใชผมกขอเสนอแนวคดทมาจากหนงสอ“Software Factories Assembling Application with
Patterns, Models, Frameworks, and Tools” เขยนโดย Jack Greenfield และ Keith Short ป 2547 ซงอธบายแนวคดท
ใชพฒนา Software Factory ไดอยางด แตไมใชวาเราจะไปนงอานหนงสอทงเลมกอนแลวถงจะมาท า เพยงแตเราเขาไปด
แนวคดเบองตนเพอน ามาปรบใชงาน และหลงจากนนกมหนงสอชอ Practical Software Factories in .NET ซงเขยนโดย
Gunther Lenz และ Wojtek Kozaczynski ป 2549 และหนงสอชอ Programming Microsoft Composite UI Application
Block and Smart Client Software Factory ของ David S. Platt ป 2551 ซง Platt นนเปนทปรกษา นกเขยน และผสอนอย
ท Harvard University และไดเปดหลกสตรการสอนเรอง Smart Client Software Factory ทงในยโรปและอเมรกา (ผเรยน
ตองเสยคาเครองบนและคาโรงแรมไปเรยนดวยนะครบซงยงไมรวมคาลงทะเบยนเรยน) เหนไหมวาในยโรปและอเมรกา
เขาตนตวในเรองนแคไหน และพวกเราละ ถาตกรถไฟขบวนนเราอาจจะลาหลงประเทอนๆ ชนดไลเทาไรกไมทน ส าหรบ
แนวคดในดานตางๆ กจะมดงนครบ
1. แนวคดในการออกแบบโรงงานพฒนาซอฟตแวร (Software Factory) โดยใช Guidance และชดเครองมอพฒนา Smart
Client Software Factory ส าหรบใชพฒนาระบบงานทเปนวนโดวฟอรม และ Composite Application Guidance
ส าหรบ WPF และ Silverlight ซงเปน Guidance และชดเครองมอทใชชวยพฒนา (มาพรอมกบ .DLL ส าหรบควบคม
การท างานของ WPF และ Silverlight) และควบคมการพฒนาหนาจอใหเปนชนสวนทตองการและน ามาประกอบกนให
เองโดยอตโนมต (Composite UI Guidance Asset) ใชส าหรบพฒนาแอพพลเคชนทเปน Windows Presentation
Foundation (WPF) และ Silverlight โดยใชเฟรมเวรครวมกน รวมถงม Guideline ทจะบอกวา ถาเราจะเปลยน
10
Code ของหนาจอทเปน WPF ใหเปน Silverlight จะตองระวงอะไรบางโดยแกไข Code ไมมาก ในอดตลองนกภาพวา
ถาเราจะเปลยนหนาจอทเปน Windows Form ใหเปน Web Form คณจะตองพฒนาทงหมด แตในเฟรมเวรคใหมน
คณสามารถเปลยน Code ไมมาก แตผมวาเราจะตองวางรปแบบกอนลวงหนาเพอใหงายตอการเปลยนหนาจอจาก WPF
ไปเปน Silverlight ใหไดงายมากขนและสามารถควบคมได ตรงนคงฝากผเชยวชาญทางดานนชวยเหลอครบ (ถาใครท
ชอบอะไรทสวยๆ งามๆ)
รปท 5: Composite Application Library Package
จากรปเปน Composite Application Library Package ซงในสวนดานบนสดจะเปน Application ทเราพฒนาอยรวมถงเฟรมเวรคและโครงสรางพนฐาน (Infrastructure) รวมถงโมดลตาง ๆ ทเราพฒนาซงจะใชเฟรมเวรครวมกน สวน Library ทอยใน Patterns & Practices นนกจะม Library ตาง ๆ ใหเราใชงาน สวนการใชงานอยางไรนน ใน Guidance จะบอกรายละเอยดรวมถงตวอยางการใชงาน ซงเปนหนาทเราทจะเขาไปศกษาและน ามาใชหลงจากนนมนกจะเปนมาตรฐานการท างานและการพฒนาของเราโดยอตโนมต ถาเราใช Library เหลานรวมกนในกลมของพวกเรา มนกจะเปนมาตรฐานการใชงานรวมกน ซงจะท าใหเราสามารถเขยนโปรแกรมดวยสไตลเดยวกน ผมวาท าไดแคนกไดประโยชนมาหาศาลแลวครบ ทานลองคดเลนๆ ตอไปวามนจะเกดประโยชนตอเนองอะไรอกครบ ตรงนผมขอยงไมขอพดครบ
11
รปท 6: Patterns ทอยใน Composite Application Library
ส าหรบรปนเปนรปแบบมาตรฐาน (Patterns) ทอยใน Composite Application Library ซงม Patterns ตาง ๆ ทถกสรางขนใน Composite Application Library ซงมมาทง Source Code ใหเราไดศกษาวธการเขยนโปรแกรมไดดวย
2. การบรหารจดการการพฒนาซอฟตแวรใหเปนระบบอตโนมต (Automation Lifecycle Management) หรอ ALM เปน
การควบคมขนตอนการพฒนาซอฟตแวรโดยใชเครองมอชวยเพอใหกระบวนการพฒนาซอฟตแวรมประสทธภาพมาก
ขนซงกจะใช Visual Studio Team System 2008 หรอ 2010 ซงจะใชฟงกชนของ Project Management, Source
Control, Build Server, Testing, Bug Tracking, Deployment สวนการบ ารงรกษาระบบงานกนาจะใช การท า
Branching และ Merging รวมถงท า Release, Service Pack คลายๆ กบทไมโครซอฟตเขาท ากน ในกรณท Build
ระบบงานใหกบลกคาแตละรายทมความตองการเฉพาะ ควรจะตองออกแบบเพอเตรยมรองรบไวลวงหนาซงตรงนอาจจะ
ตองพงพาผเชยวชาญ
3. Application Architecture Guide 2.0 Designing Application on .NET Platform เปน Best Practice ทชวย
แนะน าวธการพฒนาระบบงานขนาดใหญ ซงผอานเขาไปดไดท http://apparchguide.codeplex.com/
4. Standard Pattern Development เปนรปแบบมาตรฐานททวโลกยอมรบแลววาสามารถน ามาใชแกไขปญหาการ
พฒนาซอฟตแวรไดเปนอยางด ซง Composite Application Guidance ส าหรบ WPF และ Silverlight กถกพฒนา
อยบน Standard Pattern Development ตางๆ เชน Dependency Injection, Inversion of Control, Service
Locator, Presentation Model เปนตน ซงท าใหทมงานพฒนาโครงสรางไดเรยนรรปแบบการพฒนามาตรฐาน
ดงกลาวในขณะทกษาเครองมอน และท าใหทมงานสามารถพฒนาความรทางดาน Software Architecture ไดใน
เวลาเดยวกน
12
13
3.2 เครองมอทใชออกแบบและพฒนา (Design and Development Tools)
ส าหรบเครองมอทใชพฒนาแอพพลเคชนทเปนโรงงานซอฟตแวรนนผมกขอบอกวาเปนคายของไมโครซอฟตทงหมด ไมใชผม
รงเกยจคายอนนะครบ แตวาประสบการณทงชวตของผมอยกบไมโครซอฟตเทคโนโลย สวนเพอนๆ ผมรนเดยวกนไปเปน
ผบรหารระดบสงกนหมดแลว เหลอผมนแหละทยงตดตามเทคโนโลยอย แตกอยากเรยนเชญนกพฒนาคายอนลองมาดแนวคด
และน าไปปรบปรงงานของตนเอง มนไดแนวคดในเรอง Architecture Design ทดครบ ส าหรบชดเครองมอกมดงน
1. Visual Studio Team System 2008 หรอ Visual Studio Team System 2010 ส าหรบเปน Integrate
Development Environment และ Testing Tools
2. Windows 2008 Server Standard Edition หรอ Enterprise Edition ใชเปนเฟรตฟอรมทเราพฒนา
3. Microsoft SQL Server 2008 Express Edition, Standard Edition หรอ Enterprise Edition เปนระบบจดการ
ฐานขอมล
4. Windows SharePoint Service 3.0 หรอ MOSS 2007 ส าหรบพฒนางานทเปน Document หรอ Content
Management รวมถงใชเปนเครองมอทชวยจดการ Configuration Management
5. Windows Workflow Foundation ส าหรบพฒนางานทเปน Workflow
6. Windows Form, WPF และ Silverlight เทคโนโลยส าหรบพฒนาหนาจอ
7. ส าหรบ Client Platforms นนเพอความทนสมยเรากอาจจะใชบน Windows 7 เลย สวนอนๆ จะเปน Mobile
Application และอนๆ กเชญคนทเชยวชาญดานนนเขามารวมไดเลยครบ
ผมวาแคนกแยแลว
14
4 สภาพแวดลอมของการพฒนา (Development Environment)
รปท 7: รปแสดงสภาพแวดลอมของการพฒนา
ส าหรบสภาพแวดลอมของการพฒนานนกจะเปนในลกษณะดงในรปดานบน ซงผมไดท าเปน Environment Development ทใชพฒนางานอยในขณะน โดยเฉพาะ Project Server 2007 ทใชบรหารจดการโครงการขนาดใหญ ในกรณทเรามโครงการมากๆ ท าใหการบรหารจดการทรพยากรท าไดด การบรหารจดการโครงการท าผาน Project Web Access โดยไมจ าเปนตองใชกระดาษเลย ส าหรบเรอง Development Environment นนประกอบดวยสวนตางๆ ดงตอไปน 1. เครองทเปนโดเมนคอนโทรลเลอร ท าหนาทเกบ Active Directory ของผใชงานระบบ
2. เครองทเปน Database Server และ SharePoint Server จะตดตง Microsoft SQL Server 2008 และ Windows
SharePoint Service 3.0 (WSS 3.0) และ Microsoft Search Server 2008 Express Edition ถาเราจะใช SharePoint เปน
สวนหนงของการพฒนาระบบ ซง WSS 3.0 และ Microsoft Search Server 2008 Express Edition นนไมเสยตงค หรอจะ
ใช Microsoft Office SharePoint Server 2007 (MOSS 2007) กไดครบ ถาคณตองการความหร
3. เครองทเปน Project Management Server จะถกตดตง Windows 2008 Server Enterprise Edition, Microsoft SQL
Server 2008 Enterprise Edition, WSS 3.0 หรอ MOSS 2007 , Microsoft Project Server 2007 เปนเครองมอทใชบรหาร
จดการโครงการในระดบ High Level ส าหรบท า Enterprise Project Management
5 การบรหารจดการโครงการ
วธและกระบวนการท างาน (Methodology and Project Management Process) ส าหรบการบรหารโครงการนน นอกจากเราจะใชวธบรหารโครงการในรปแบบ MSF for Agile Software Development เปนแนวทางในการท างาน รวมทง Project Planning, Project Monitoring and Control ทอยใน CMMI มาชวยกระบวนการท างาน โดยเปาหมายหลกคอใหซอฟตแวรออกมาสตลาดใหเรวทสด และจะตองมคณภาพด
15
6 Software Process Improvement นอกจากนน เราควรจะม Software Process Improvement กระบวนการพฒนา
ซอฟตแวรทด และพฒนาใหดขนเรอยๆ (ไมมค าวาดทสด มแตค าวาดกวา และดกวา) ในดานตางๆ ตามกระบวนการของ CMMI หรอ
เราจะใช Agile กไดขนอยกบทมงาน เพอรบประกนวาซอฟตแวรทเราพฒนานนมคณภาพ ตรงนเปนเรองใหญครบ สวนผมตอนน
ท างานอยใน Committee ของ Thailand SPIN ในสวน Project Management ซงก าลงเผยแพรความรในเรอง Process
Improvement ใหกบ Community อยเหมอนกนครบ
ถงแมวาการสรางโรงงานผลตซอฟตแวรจะประกอบดวยสวนตาง ๆ มากมายกตาม แตเราพยายามมองภาพรวมใหไดกอน และสรางความสมพนธในสวนตาง ๆ ใหสอดคลองกน หาผเชยวชาญทางดานตาง ๆ มาท างานรวมกนตามบทบาททแตละทานถนด และท าตามบทบาทนน ผมวาในล าดบแรกเปนการท าความเขาใจกอนครบ เมอเขาใจแนวคดและเครองมอตาง ๆ ไดแลว มนกจะเรมงายขน ผมวาทกคนท าไดครบ
16
Software Factory Toolkits Overview สมมตวาตอนนเราไดเรมตงโรงงานซอฟตแวรแลว ซงตอไปถาจะตงโรงงานจรงๆ รายละเอยดของการตงโรงงานอาจจะมการเปลยนแปลงตามความเหมาะสมของสภาพแวดลอมและปจจยอน ๆ ผอานทกทานอยากเหนความส าเรจของโรงงานดงกลาวหรอไมครบ ถาอยากเหนกมารวมสรางดวยกน ผมเชอมนวามนสามารถท าไดจรงในทางปฏบต ดงนนบนไดขนแรกกคอการเขาไปรจกเครองมอของ Software Factory Toolkits รวมถงกระบวนการผลตตาม Role ตาง ๆ และขอใหสมาชกทกทานทสนใจเลอก Role ทตนชอบไวกแลวกน แตใครจะสนใจมากวาหนง Role กไดครบ ตอนนสมมตวาเราไดตงโรงงานแลวนะครบ ดงในรปดานลาง ตอไปเราจะไดเรยนรเครองมอในการผลตซอฟตแวรกนครบ
รปท 8: รปแสดงโรงงานผลตซอฟตแวร
กอนจะลงในรายละเอยด กจะขอเกรนทมาทไปของเครองมอหนอยครบ Software Factory Toolkits (ลองคดวามนคลาย ๆ กบเราซอชดคตของวทยมาตอใชงานเองซงผ เขยนเคยตอเองในสมยเดกๆ มนท าใหเหนภาพของการน าชนสวนซอฟตแวรมาตอกนและไดเปนแอพพลเคชนส าเรจ) ซงตอไปอาจจะมการท า Software Application Toolkits เอาไวใหผอานมาหดตอเลนกนครบ ส าหรบจดเรมตนของ Software Factory Toolkits นนเรมมาจาก Microsoft Community (เดมอยในสวนของ Patterns & Practices แตปจจบนอยในสวนของ http:www.codeplex.com) ไดออกเครองมอทชอ Enterprise Library Block (EntLib) ขนมาเมอป พ.ศ. 2547 (ตอนนเวอรชนลาสดเปน 4.1 ครบ) ซงเปนเครองมอใชชวยแนะน าวธการเขยนโปรแกรมใหเปนมาตรฐานแกนกพฒนาในดานตาง ๆ เชน การเขยน Logging Application Block, Data Access Application Block, Security Application Block, Exception Block และอน ๆ ซงผ เขยนจะไมลงรายละเอยดตอนน ซงปจจบนนมนรวมอยในเครองมอพนฐานทอยในชด Software Factory Toolkits หรอเปน Engine Tools ซงจะถกเรยกใชงานผานทางเครองมออนๆ เชน Smart Client Software Factory หรอ Composite Application Library นนเอง ซงกจะซอนความซบซอนของการใชงานของ EntLib เอาไวภายใน
17
ตอจากนน Patterns & Practices กไดออก Composite UI Application Block (CAB 1.0) ซงถกออกแบบมาเพอแยกสวนทใชแสดงผลหนาจอออกมาโปรเจกตแยกตางหาก และใหชอวา Shell
รปท 9: หนาจอแสดงสวนประกอบของ Composite UI
จากรปดานบนจะแสดงใหเหนสวนประกอบตางๆ ท CAB 1.0 ออกแบบมา ซงสวนประกอบดงกลาวนนจะถกน าไปใชโดยกลไกการท างานทอยเบองหลง (CAB Engine) ซงกลไกการท างานเบองหลงผมยงไมอธบายตอนน ส าหรบตรงนจะพดถงสวนประกอบของ CAB 1.0 เสยกอน ซงจะเหนวาแอพพลเคชนถกแบงออกเปนสองสวนคอ Shell Application (ซงเปนโปรเจกตหนง) และ Module ซงกเปนโปรเจกตอกโปรเจกตหนง ส าหรบในสวนทเปน Shell Application นนกเปรยบเสมอนเครองฉายภาพซงจะท าหนาทรบภาพมาแสดงผลเทานน จากรปจะเหนวาในโปรเจกต Shell Application นนจะม Shell Form ซงจะม SplitContainer ท าหนาทแบงแยกหนาจอออกเปน 2 สวน คอสวนทางซาย (Left Workspace) และสวนทางขวา (Right Workspace) ซงในสวน LeftWorkspace นนจะม TabbedWorkSpace บรรจอยภายใน (ส าหรบ CAB 2.0 นนเขาใช Region แทน ค าวา Workspace ครบ) ซง Shell Application นนจะเรยกสน ๆ วา Shell นนเอง หลายคนคงจะสงสยแลววา แลวหนาจอหายไปไหนละ คอยตดตามไปครบ ตอไปผมจะยกตวอยางการพฒนาระบบงานแบบปกตทเราพฒนากน โดยปกตแลวนกพฒนาจะนยมเขยนสวนทเปน Presentation Layer แยกออกมาเปนกลมๆ และแตละกลมกจะมโปรแกรมในสวนหนาจอกจะอยในโปรเจกต Presentation ดงในรปตอไปน ซงเปนทรวบรวมหนาจอหรอ Windows Form ของโมดลหนง ซงในตวอยางนจะม 3 หนาจอดวยกน
18
รปท 10: รปแสดงหนาจอในโครงสรางแบบงาย จากรปจะเหนวาถาเรามหนาจอสามหนาจอ เรากจะม Windows Form 3 ฟอรมดงในรป ซงขอดของมนกคอพฒนางายไมยงยากซบซอนถามการแกไขฟอรมกแกไขไปบนฟอรมไดเลย (ยงไมตองคดวามชนตดตอฐานขอมลหรอชนบซเนสโลจก คดวามอยชนเดยวกอนคอ Presentation Layer) สวนขอเสยคอ ถาบางสวนของหนาจอทงสามหนาจอมบางสวนทเหมอนกน กจ าเปนตองพฒนาสวนทเหมอนกนนนทงสามหนาจอท าใหตองพฒนางานซ าซอน แตอยางไรกเหมาะกบระบบงานเลกๆ แตถาเปนงานทเปน Enterprise Application นนจะมผลมากหรอนอยขนอยกบขนาดของแอพพลเคชน ถาขนาดของแอพพลเคชนใหญมากกจะมผลกระทบมากครบ ตอไปมาดวาเฟรมเวรคของ CAB 1.0 นนมนมดอะไร ขอใหทานผอานดรปตอไปครบ
19
รปท 11: รปโครงสรางระบบงานตวอยางทใชเฟรมเวรค CAB 1.0
ส าหรบรปนผมไดพฒนาใหกบหนวยงานราชการแหงหนง ซงเปนระบบงานจรงโดยใช Smart Client Software Factory ซงใช CAB 1.0 เปนเฟรมเวรคพฒนาหนาจอ ซงในโครงสรางของระบบงานนนจะม สวนทเปน Infrastructure ของระบบงานท าหนาทเตรยมสวนประกอบพนฐาน (ซงรายละเอยดจะคอยๆ เลาใหฟงตอไปครบ) ซงหนงในนนกคอ Shell Project อยางทผมเคยพดวามนเปนสวนทใชแสดงผลของหนาจอทถกสงมาจากโมดลตาง ๆ ของระบบงาน และจะม ShellForm ซงเปน Windows Form เพยงฟอรมเดยวในระบบงานน ทานผอานคงจะเหนสวนทเปน RID_F00, RID_F10 … สวนนเปนโมดลตาง ๆ ครบ จะเหนวาโมดลของแอพพลเคชนถกแยกออกมาจากสวนทเปน Infrastructure อยางเดดขาด (Module Independence) ซงในเรองนผมจะพดในรายละเอยดตอไปเพราะวามนส าคญกบการท าโรงงานซอฟตแวรมาก ภายในโมดลมอะไรลองดรปถดไปครบ
20
รปท 12: รปแสดงโครงสรางภายในโมดล RID_F10
ส าหรบในรปนจะเหนวาภายในโครงสรางของโมดล RID_F10 ยงแบงออกเปนโปรเจกต FID_F11 ซงเปนระบบงานยอยภายในมล RID_F10 ภายในโปรเจกตนใหดสวนทเปน Views ซงในสวนนกจะเปนหนาจอตาง ๆ นนเอง ซงลองมาดโครงสรางหนาจอทชอวา vwF11U0301 ซงมาจาก View ของโมดล F11 ของยสเคซ U0301 นนเอง ซงถาดไฟลกมดงน
1. vwF110301.cs นนเปนสวนแสดงผลนนเอง แตมนไมใช Windows Form มนเปน User Control ครบ เหนไหมวา ในสวนทเปน
สวนแสดงผลนนไมม Windows Form เลย
2. vwF11U0301Presenter.cs นนเปน Presenter ไฟล มนคออะไรเดยววากน
3. IvwF11U0301.cs นนเปนอนเตอรเฟซไฟลของหนาจอ
ดงนนสวนแสดงผลนจะใช Model View Presenter (MVP) Pattern ครบ ซงเขยนไดดงน
รปท 13: รปแสดง MVP Pattern จากรปเรมจาก View จะเหนวามเครองหมายยนออกมาสองขาคอ ขาหนงมจดกลม นนคอเครองหมายของอนเตอรเฟซ ซงแสดงวา View มอนเตอรเฟซโผลออกมาใหคลาส Presenter ตดตอภายใน View โดยผานทางอนเตอรเฟซ เมอถงตรงนกคงเหนแลววา สวนทแสดงผลหนาจออยตรงไหน แตวาทานกคงสงสยวา แลวมนจะน าออกไปแสดงใน Shell ไดอยางไร ตรงน ไมตองเปนหวงครบ เพราะ CAB มกลไกทน ามนไปแสดงใหอยแลวโดยคอมโพแนนซทจดเตรยมไว โดยมอบหมายงานใหคลาส
21
ModuleController เปนตวท าหนาทเรยกใช โดยเขยนค าสงเขาไปใน ModuleController ตามทก าหนดเทานน ซงรายละเอยดผมจะพดถงตอไปครบ ตรงนใหทานผอานเขาใจวธการท างานของ CAB เทานนวามนคออะไร จากเรองทพดมานนเปนเรอง Composite UI แตยงมอกยางหนงของ CAB คอโมดลแตละโมดลทออกแบบ ซงจะมความเปนอสระซงกนและกน และตดตอสอสารกน (โมดลหนงเรยกใชงาน เชน สอบถามขอมล ไปยงอกโมดลหนง) โดยผานทางกลไปพเศษ (Event Broker Pattern) ซงเปนรปแบบการตดตอสอสารเพอใหโมดลตาง ๆ มความอสระซงกนและกน เอ… ค าวาอสระซงกนและกน (Module Independent) หมายความวาอยางไร กหมายความวา ถามงานโมดล A ใหนกพฒนานงอยประเทศหนง และกมงานโมดล B กบนกพฒนาทท างานอยอกประเทศหนงโดยทนกพฒนาทงสองกลมไมตองรจกกนและตองพดคยกนเลย กท างานไดครบ Software Architect ทควบคมดแลโครงการกเพยงแตน าซอฟตแวรทงสองโมดลมาใสในโครงสรางหลก มนกจะตอใหเองโดยอตโนมต ซงเฟรมเวรคและกลไกการท างานของ CAB (ซงมนถกพฒนาอยบน Pattern ตาง ๆ) เปนผจดการใหครบ มหศจรรยไหมครบ ส าหรบ CAB นนไมไดบอกแค Pattern เทานน มนบอกถงวธการน าไปใชในชวตประจ าวนของนกพฒนาเลยเชยว แตขอใหพยายามเขาใจมนใหไดกแลวกน (ผมจะคอยเอาใจชวย) เอาละเรามาดเรองโมดลของ CAB กนดกวา
รปท 14: การท างานระหวางโมดลตาง ๆ ของ Composite UI Application Block จากรปขางบนจะเหนวาในระบบม Shell ทผมไดเกรนไปแลว และมโมดลอยสองโมดลคอ Moduel1 และ Module 2 ซงสองโมดลนอยในกรอบเสนประดวยกนทงค ซงแสดงใหเหนวามนมความเปนอสระซงกนและกน (Module Dependency) ผมไดเคยบอกแลววาโมดลตดตอกบ Shell ผานทางคลาส ModuleController ซงจะสงสวนแสดงผลทตองการไปแสดงอยใน Shell ทเปน Container ชนดหนงโดยผาน
22
กลไกของ CAB (เปนค าสงพเศษทเขยนเขาไปใน ModuleController เพอไปเรยกใชงานฟงกชนพเศษทอยใน .DLL ทมาพรอมกบ CAB (เวลาใชงานตอง Add Reference พวกนเขาไปถงจะท างานได) และโมดลตาง ๆ จะตดตอถงกนไดโดยผานทางกลไกสองแบบคอ Share State Property และ Event Broker Pattern เหนไหมครบเจอค าใหมเกดขนอกแลว Share State ยงพอไหวเดาวามนเกบขอมลเอาไวใน Cache เพอใชงานรวมกน แต Event Broker นนคออะไร ซงมทง Event (เหตการณทเกดขนเมอเกดการกระท ากบแอพพลเคชนเชน SearchClick() กคอคลกป มเพอคนหาขอมลเปนตน) และ EventTopicName กคอชนดของอเวนตทก าหนดไวในโปรแกรม (มนถกสรางเปน Global Class ทสามารถมองเหนรวมกนไดทงโซลชน) และผมจะบอกเพมเตมวาการตดตอสอสารกนระหวางโมดลไมใชการตดตอแบบมวๆ นะครบ อยดนกพฒนาจะไปเขยนโปรแกรมใหโมดลนตดตอกบโมดลนนตามใจตนเองไมไดนะ ถาท าอยางนบรรลยวายวอดครบ การตดตอสอสารกนระหวางโมดลจะตองเปนสวนหนงของการออกแบบในดานสถาปตยกรรมซอฟตแวร อยดๆ มนจะมาเกดเองตอนเขยนโปรแกรมไมได (อยางนจะเรยกวาออกแบบไปเขยนโปรแกรมตอไปเรอยๆ ) ตอนนพวกเราจะท าใหตวเราเองเปนวศวกรรมซอฟตแวร ดานไหนกวากนไป ใครจะเปนวศวกรรมซอฟตแวรดาน วศวกรรมการแสดงผล วศวกรรมโครงสราง วศวกรรมการเชอมตอฐานขอมล และอน ๆ พวกนจะเนนการออกแบบ พฒนาตนแบบใหดขนเปนล าดบ และจดท ารปแบบทดใหนกพฒนาไวใชงาน (ส าหรบนกพฒนาทท าตามรปแบบนเรามกใหจเนยร Skill Worker (เนนการท างานตามค าสงหรอขนตอนการท างานเทานน) หรอ Third Party ทจะเขามาเอาชนสวนซอฟตแวรของเราไปใช ส าหรบรายละเอยดของคลาส EventTopicNames นนสามารถดได ในรปดานลาง
รปท 15: โครงสราง Infrastructure ของระบบงาน
จากรปดานบนจะเหนไหมครบวาคลาสทชอวา EventTopicNames.cs นนจะอยในโปรเจกต Infrastructure.Interface ภายใตสวน Infrastructure อกทหนง ส าหรบรายละเอยดคลาสเปนดงนครบ
23
รปท 16: รายละเอยดคลาส EventTopicNames จากรปดานบนจะเหนวา EventTopicNames มนกคอ Global Variable นนเอง เพยงแตมนถกจดเกบใหเปนทเปนทาง อยดๆ นกพฒนาจะมาสราง Global Variable เองไมไดมนจะถกสรางจาก Architect และประกาศใหนกพฒนาทกทานทราบ ทานผอานเหนไหมวา การน า Guidance and Best Practices มาใชนนมนบงคบเราใหมระเบยบไปโดยอตโนมต ท าใหพวกเราสามารถเปนนกวศวกรรมซอฟตแวรทดไดไมยาก โอ… แคพดเรอง EventTopic เรองเดยวกมาไกลแลวครบ รายละเอยดเรองนเอาไวมาคยกนตอกแลวกน ตอนนกมาถงโมดลแตละโมดลจะตดตอถงกนโดยใช Event Broker Pattern โดยใช Event ทเกดขนกบ EventTopicNames ทเราไดสรางไวเปนพาหะน าไปครบ และการเชอมตอระหวางกนจะเกดขนตอนประมวลผลระบบงานครบ หรอตอน Run Time นนเอง ดงนนจะเหนวาโมดลไมไดผกตดกนตลอดเวลาเหมอนฝาแผดอนทร-จนทร ส าหรบการตดตอสอสารแบบ Share State นนมกจะใชภายในโมดลเดยวกนเพอความรวดเรวนะครบ ส าหรบรปดานลางกจะเปนโมเดลของ Event Broker และ View Navigation Pattern
24
รปท 17: รปแสดง EventBroker และ View Navigation Pattern จากรปดานบนจะเหนวามการตดตอกนระหวางสองโมดล ในขณะใดขณะหนง ฝายหนงจะเปนผสง (Publish) และฝายหนงจะเปนผ รบ (Subscribe) ซงฟงกชนตาง ๆ ทตองการเปดใหชาวบานเรยกใชงานกจะตอง Subscribe กอนนะครบ ถาคณหลบๆ ซอนๆ อยใครจะไปรวาม (จรงไหมครบ) เมอ Subscribe แลวกหมายถงคณไดลงทะเบยนบอกวา ถามใครอยากจะใชบรการคนหาขอมลทผมมอย ซงจะใช Global Variable ทอยในคลาส EventTopicNames เปนตวกลางนะครบ กบอกไดเลยครบแลวผมจะสงขอมลไปให สวนอกฝายทตองการใชบรการเชน ตองการคนหาขอมลทม EventTopicNames ทเปนชอเดยวกน กจะประกาศออกไป ซงผทคอบตรวจจบกจะท าหนาทไปหาในขอมลทไดลงทะเบยนเอาไวแลว และดวาม EventTopicName ทตรงกนหรอไม ถามตรงกนมนกจะท าหนาทเปนพอสอใหหนมสาวไดพบกน (โอไปกนใหญ เหมอนลงหนวดเลยใชไหม) ถงตอนน ทานผอานกคงจะไดรบางแลววา CAB 1.0 นนมนออกมาเพออะไร หลงจากททาง Microsoft Community ไดออก CAB มาแลว กจะเหนวา เรามรปแบบและขนตอนการพฒนาหนาจอเปนมาตรฐานเพอใหนกพฒนาไดน าไปใชเปนแนวทางเดยวกน แตวาขนตอนดงกลาวถงแมจะมขนตอนแนนอนชดเจนกตาม แตท าไมเราตองเขยนขนตอนซ าๆ ท าใหเสยเวลา บางครงอาจท าผดไปขนตอนหนงโปรแกรมกมปญหาแลว ดงนนตอมากมเครองมอทชอวา Guidance Automation Extension และ Guidance Automation Toolkit ซงเครองมอทงสองนนจะตดตงลงบน Visual Studio 2005 หรอ 2008 (แลวแตเวอรชน) เพอท าให Architect สามารถน าเอาขนตอนตาง ๆ ทก าหนดไวใน Guidance หรอคมอปฏบตงานของนกพฒนา มาสรางเปน Template เกบไว และน ามาสรางโซลชน สรางคลาสตามทก าหนด และอน ๆ ท Visual Studio ท าได และสงใหมน Generate ตามขนตอนทงหมดโดยอตโนมต ซงจะท าใหเราสามารถสราง Software Factory Solution ไดเพยงแคอดใจเดยว
รปท 18: รปแสดงวงจรการท างานของ Guidance Automation Toolkit
25
จากรปแสดงใหเหนวาผทใชเครองมอ Guidance Automation Toolkit กคอ Architect ท าหนาทสรางแมพมพชนสวนซอฟตแวร (ซงในเอกสารคมอเขาจะใชค าวา recipe ซงกคอสตรการปรงอาหาร) ซงเขาคงจะมองวาการท าซอฟตแวรเหมอนการท าอาหาร ซงตองใชสวนประกอบการท าอาหารหลายๆ สวนน ามาผสมรวมกนทเดยว แลวกไดอาหารออกมาส าเรจ แตผมวาเจา Guidance Automation Toolkit นนาจะเหมอนกบมะหมส าเรจรปมากกวา ใสน ารอนกนไดทนท (รอใหเยนกอนนะครบ) หรอคนทคดเครองมอนชอบการท าอาหารเปนชวตจตใจกไมทราบ แตตอนนผมชกหวขาวแลวนะครบ ไดเวลาทานขาวเชาพอด ตอนนเวลาเกอบเกาโมงเชา เดยวมาเขยนตอครบ ….. กมาตอกนไดแลวครบ Guidance Automation Toolkit นนเปนเครองมอของ Architect เพอท า Recipe ในรปแบบตาง ๆ เพอใหนกพฒนาใชงาน ส าหรบรายละเอยดของ Recipe แบบตาง ๆ จะอธบายเพมเตมในเรอง Smart Client Software Factory พอถงจดน ผอานไดสงเกตเหนไหมวา รปแบบและแนวคดททาง Microsoft Patterns & Practices Community ไดน าเสนอมานคออะไร เมอถงตรงนไดมค าศพทเกดขนมากอนทจะไปเปน Smart Client Software Factory ค านนกคอ Software Baseline Architecture สงเกตไหมวาสงทเราไดเรยนรมาทงหมดน มนเรมเปนสถาปตยกรรมซอฟตแวรเบองตนแลวครบ ส าหรบ Baseline กหมายถงมนเรมเปนรปเปนรางทจะเกบเปนเวอรชนแรก ไดแลว จากนนเรากจะเพมรายละเอยดเขาไปเพอใหมนเฟรมเวรคทสมบรณแบบมากยงขน จากนน Patterns & Practices Community กไดฤกษออก Smart Client Software Factory เมอเดอน ม.ย. 2549 ใชกบ Visual Studio 2005 เหนไหมวา Smart Client Software Factory (SCSF) มอายครบสามขวบกวา ๆ แลวครบ เวอรชนปจจบนคอเวอรชนของ Apr 2008 ส าหรบ Visual Studio 2008 ถาใครสนใจเขาไปดาวนโหลดใชงานไดท http://smartclient.codeplex.com/ แตวากอนทจะตดตง SCSF คณตองตดตงซอฟตแวรดงตอไปน
- Visual Studio 2008 SP1
- Guidance Automation Extension (GAX) และ
- Guidance Automation Tool Kit (GAT) ตามล าดบนะครบ ถาไมตามล าดบกตดตงไมได แตถาถอดมนออกกตองถอน GAT
ออกกอน แลวจงจะถอน GAX นะครบ
- จากนนตดตง SCSF เวอรชน Apr 2008 ซงมนจะตดตงไลบรารของ Enterprise Library และ CAB 1.0 มาใหโดยอตโนมต
เปนยงไงบางครบ คณพรอมทจะใชงาน Smart Client Software Factory แลวหรอยงครบ ตอนนผมจะสอนใหทานลองใชงานเบองตน (ส าหรบ GAX และ GAT นนใหดวามนเปนเวอรชนส าหรบ VS 2008 หรอไมดวยนะครบ) เรมลองใชงานท าดงนครบ
1. เปด Visual Studio 2008
2. คลก File/ New/ Project กจะปรากฏวนโดวสของ New Project ดงในรปตอไป
26
รปท 19: รปแสดงการสรางโปรเจกตของ SCSF
3. จากนนใหมาดสวนทเปน Guidance Packages และใหเลอก Smart Client Development – April 2008 ทอยภายใต
วนโดวสยอย Project Type จากนนใหเลอก Smart Client Application (C#) ส าหรบ ผทตองการใชภาษา C# ทอยใน
วนโดวส Template ดานขวามอ
4. จากนนในสวนทเปน Name: ทอยดานลางกสามารถเปลยนชอโซลชนได สมมตตอนนเราไมเปลยนชอ สวน Location
กแลวแตใครจะใหสรางโซลชนเกบไวทไหน จากนนคลกปม OK กจะปรากฏหนา Create a New Smart Client
Solution ซงกจะใหใสต าแหนงไลบรารของ Application Block ซงกจะม EntLib และ CAB นนเอง ซงตอนนเราตด
ตงอยในโฟลเดอร C:\Program Files\Microsoft Smart Client Factory April 2008\Lib\ ซงผอานลองเขาไปดกแลว
กนวามไลบรารอะไรบาง
27
รปท 20: รปแสดงการสราง Smart Client Solution
5. จากหนาจอนใหคลกปม Finish แลวรอสกคร สงเกตดวามนท าอะไร จ าไดไหมครบวาผมเคยพดเรอง Recipe มาแลว
และนกคอ Smart Client Software Factory Create Solution เหนไหมครบวามนท าเปนชดส าเรจเลยครบ ลองนกภาพ
วาถาเราตองเขยนเปนขนตอน (ผมไมทราบวามนจะใชกขนตอนเพราะวานบไมไหว)
6. ตอนนคณกไดโซลชนดงในรปดานลาง ซงกคอ Infrastructure เฟรมเวรคเบองตนของระบบ
28
รปท 21: รปแสดงโครงสรางหลกของ Smart Client Software Factory
จากรปดานบนจะเหนวาโครงสรางหลกของ Smart Client Software Factory ประกอบดวย สสวนหลก ดงนคอ - Infrastructure.Interface เปนโปรเจกตทใชเกบสวนประกอบหลกของระบบงาน เชน ตวแปรของระบบงาน ซงจะเกบอย
ใน Constants โฟเดอร ซงจะม EventTopicNames ทไดเคยอธบายมาแลว เกบ CommandName ซงเปนชอตวแปรทเปน
คอมมานด Workspace Name เปนชอตวแปรทเปน Workspace หรอพนทใชงานบนหนาจอ ซง SCSF จะม
LeftWorkspace (พนทท างานดานซาย) RightWorkspace (พนทท างานดานขวา) และ UI Extension Site Name ซง
ไดยนชอกไมคนหแลว ซง UI Extension Site Name มนกจะม MainMenu ใชกบสวนทเปนเมน MainToolBar ใชส าหรบ
สวนทเปน ToolBar และ MainStatus ส าหรบสวนทเปน Status Bar ซงสวนทงหมดของ UI Extension Site Name นนจะ
ประกอบกนเปนโครงสรางหนาจอหลก โดยถกใชรวมกนจากทกโมดล ส าหรบ Infrastructure.Interace นนจะถกใชงาน
หรอเปนอนเตอรเฟซของ Infrastructure.Module หรอ Infrastructure.Module เรยกใชงานฟงกชนหรอตวแปรตาง ๆ ผาน
ทาง Infrastructure.Interface
- Infrastructure.Library เปนไลบรารกลางหรอเซอรวส ทถกใชจากแอพพลเคชนทงหมด(Moduel)
- Infrastructure.Module เปนสวนประกอบหรอคอมโพแนนซทใชรวมกนระหวางโปรเจกตในโซลชน
29
- Shell: กเปนสวนทใชแสดงผลหนาจอทไดเคยอธบายมาบางแลว
ถงแมวา SCSF ยงมอะไรอกมากมายทยงไมร เอาไวตอนตอๆ ไปกจะคอยน ามาอธบายเพมเตมในสาระทผอานควรจะร ตรงนกขอจบเรอง Smart Client Software Factory อยางคราว ๆ เทานกอนครบ ส าหรบคมอใชงานสามารถดไดโดยเขาไปทเมน Mirosoft patterns & practices ดงหนาจอดานลาง
รปท 22: หนาจอแสดงการเขาไปใชงาน Smart Client Software Factory Help แคเรอง SCSF กเหนอยแลวครบ แตมนยงไมหมดเทานนะ และแมวาเรอง SCSF จะดมากเทาไรกตาม แตวา CAB 1.0 มขอจ ากดในโครงสรางทท าให SCSF ไมสามารถพฒนาตอเพอใหรองรบเทคโนโลยใหม นนกคอ WPF และ Silverlight ถงแมวา SCSF จะออกสวนชวยงาน (Contribute) ทสามารถใชงานไดกบ WPF กตาม ดงนน CAB 2.0 จงออกมาเพอรองรบเทคโนโลยของ WPF และ Silverlight ในตอนแรก ๆ นน CAB 2.0 จะรจกกนในชอของ Prism มใครบางคนคนชอนไหมครบ ถาไมคน อกชอหนงกคอ “Composite Application Guidance for WPF and Silverlight” ถายงไมคนอกกมาอานตอกแลวกน ส าหรบในตอนตอไปผมคดวานาจะพดรายละเอยดในเรอง SCSF ใหมากขนเพราะวามนมแนวคดทนาสนใจและเอามาใชเปนกรณศกษา สวน Prism นนปจจบนยงไมม Software Factory มแตเพยงรปแบบการใชงาน (Guidance) รวมถงไฟล .DLL ทมาพรอมกน ผมเดาเอาวามนอาจจะท ามาใหใชกบ Visual Studio 2010 เลยทเดยว แตอยางไรกตามถาเราเรยนร SCSF ไดแลว และศกษา GAT เรากสามารถสราง Prism Software Factory ของเราเองไดครบ ผมขอจบบทความตอนแรกเทานนะครบ
อางอง:
1. ชอหนงสอ Software Factories Assembling Applications with Patterns, Models, Frameworks, and Tools ส านกพมพ Wiley ผแตง Jack Greenfield และ Keith Short ป 2004 ISBN 0-471-20284-3
2. ชอหนงสอ Practical Software Factories in .NET ส านกพมพ APress ผแตง Gunther Lenz และ Wojtek Kozaczynski ป 2006 ISBN 1-59059-665-x
3. ชอหนงสอ Programming Microsoft Composite UI Application Block and Smart Client Software Factory ส านกพมพ Microsoft Press ผแตง David S. Platt ป 2008 ISBN 0-7356-2414-3
4. Smart Client Software Factory Help ของ Smart Client Software Factories เวอรชน Apr 2008 ของ Microsoft Patterns & Practice จาก http://www.codeplex.com
5. Prism: patterns & practices Composite Application Guidance for WPF and Silverlight site เวอรชน Feb 2009 จาก http:www.codeplex.com
30
6. Web Client Software Factory ของ Patterns & Practices เวอรชน Feb 2008 จาก http://www.codeplex.com