ฉันคิดว่าคำตอบสำหรับคำถามของคุณส่วนใหญ่เป็นประวัติศาสตร์หากคุณมองย้อนกลับไปว่าห้องสมุดทั้งสองมีต้นกำเนิดและวิวัฒนาการอย่างไรตามกาลเวลา
คำตอบสั้น ๆ คือถ้าคุณไม่ได้ทำอะไรที่ "แฟนซี" ให้ใช้ ATL มันยอดเยี่ยมสำหรับอินเทอร์เฟซผู้ใช้ที่เรียบง่ายด้วย COM ที่ส่งเข้ามา
คำตอบยาว ๆ : MFC ถูกสร้างขึ้นในช่วงต้นทศวรรษที่ 90 เพื่อทดลองใช้ภาษาใหม่ที่เรียกว่า C ++ และนำไปใช้กับ Windows ทำให้ Office เป็นเหมือนฟีเจอร์พร้อมใช้งานสำหรับชุมชนการพัฒนาเมื่อระบบปฏิบัติการยังไม่มี
[แก้ไขการจัดแต่ง: ฉันไม่ได้ทำงานที่ Microsoft ดังนั้นฉันจึงไม่รู้ว่า Office ถูกสร้างขึ้นบน MFC หรือไม่ แต่ฉันคิดว่าคำตอบคือไม่ ย้อนกลับไปใน Win 3.1, Win 95 วันทีม Office UI จะคิดค้นการควบคุมใหม่บรรจุในไลบรารีจากนั้นทีม Windows และ MFC จะรวม Wrapper และ API เข้ากับการควบคุมเหล่านั้นด้วย dll ที่แจกจ่ายซ้ำได้ ฉันเดาว่ามีการทำงานร่วมกันและการแบ่งปันรหัสระหว่างทีมเหล่านั้นเล็กน้อย ในที่สุดการควบคุมเหล่านั้นจะทำให้เข้าสู่ระบบปฏิบัติการพื้นฐานในเซอร์วิสแพ็คหรือ Windows เวอร์ชันถัดไป รูปแบบนี้ดำเนินต่อไปโดยใช้ Office Ribbon ซึ่งถูกเพิ่มลงใน Windows เป็นส่วนประกอบเสริมหลังจากที่ Office จัดส่งและตอนนี้เป็นส่วนหนึ่งของ Windows OS]
ในเวลานั้นไลบรารีค่อนข้างเป็นแบบดั้งเดิมทั้งเนื่องจากภาษา C ++ และคอมไพเลอร์เป็นของใหม่และ Microsoft ก็สร้างมันขึ้นมาเมื่อเวลาผ่านไปเมื่อ Office พัฒนาขึ้น
เนื่องจากประวัติศาสตร์นี้ MFC:
- มีการออกแบบที่ค่อนข้างเกะกะ มันเริ่มต้นจากการเป็น light wrapper รอบ ๆ Windows API แต่เติบโตขึ้น มี 'คุณสมบัติ' เล็ก ๆ น้อย ๆ มากมายที่ต้องประดิษฐ์ขึ้นเนื่องจากคอมไพเลอร์และภาษาไม่รองรับ ไม่มีเทมเพลตพวกเขาคิดค้นคลาสสตริงประดิษฐ์คลาสรายการออกแบบการระบุประเภทเวลาทำงานของตนเองเป็นต้น
- ห่อหุ้มวิวัฒนาการของ Office และ Windows เป็นเวลา 20 ปีซึ่งรวมถึงสิ่งที่น่าเบื่อทั้งหมดที่คุณอาจไม่เคยใช้: อินเทอร์เฟซเอกสารเดียวและหลายเอกสาร DDE, COM, COM +, DCOM, การเชื่อมโยงและการฝังเอกสาร (เพื่อให้คุณสามารถฝังเอกสารคำใน แอปของคุณหากคุณต้องการ), ตัวควบคุม ActiveX (วิวัฒนาการของการฝังออบเจ็กต์สำหรับเว็บ!), การจัดเก็บเอกสารที่มีโครงสร้าง, การทำให้เป็นอนุกรมและการกำหนดเวอร์ชัน, การทำงานอัตโนมัติ (ตั้งแต่ต้นปี VBA) และแน่นอน MVC เวอร์ชันล่าสุดได้รับการสนับสนุนสำหรับการเชื่อมต่อหน้าต่างสไตล์ Visual Studio และ Office ribbon โดยพื้นฐานแล้วเทคโนโลยีทุกอย่างของ Redmond ในรอบ 20 ปีอยู่ที่นั่นที่ไหนสักแห่ง มันใหญ่มาก!
- มี gotchas ข้อบกพร่องวิธีแก้ปัญหาสมมติฐานการสนับสนุนสำหรับสิ่งต่างๆที่ยังคงอยู่ที่นั่นซึ่งคุณจะไม่เคยใช้และทำให้เกิดปัญหา คุณต้องคุ้นเคยอย่างใกล้ชิดกับการนำคลาสต่างๆมาใช้และวิธีที่พวกเขาโต้ตอบเพื่อใช้กับโปรเจ็กต์ขนาดพอเหมาะ การเจาะลึกซอร์สโค้ด MFC ระหว่างการดีบักเป็นเรื่องปกติ การค้นหาโน้ตเทคโนโลยีอายุ 15 ปีบนตัวชี้บางตัวที่เป็นโมฆะทำให้เกิดข้อขัดข้อง สมมติฐานเกี่ยวกับการเริ่มต้นของการฝังเอกสารโบราณอาจส่งผลกระทบต่อแอปพลิเคชันของคุณในรูปแบบแปลก ๆ ไม่มีสิ่งที่เรียกว่านามธรรมใน MFC คุณต้องทำงานกับมันเป็นเรื่องแปลกและภายในทุกวันมันไม่ได้ซ่อนอะไรเลย และอย่าให้ฉันเริ่มต้นด้วยตัวช่วยสร้างชั้นเรียน
ATL ถูกคิดค้นขึ้นเมื่อภาษา C ++ พัฒนาขึ้นและเทมเพลตก็มาถึง ATL เป็นการแสดงวิธีใช้เทมเพลตเพื่อหลีกเลี่ยงปัญหารันไทม์ของไลบรารี MFC:
- แผนที่ข้อความ: เนื่องจากเป็นเทมเพลตจึงมีการตรวจสอบประเภทและหากคุณทำผิดฟังก์ชันที่ถูกผูกไว้ก็จะไม่สร้างขึ้น ในแมปข้อความ MFC จะขึ้นอยู่กับแมโครและรันไทม์ที่ถูกผูกไว้ สิ่งนี้อาจทำให้เกิดข้อบกพร่องแปลก ๆ ข้อความที่ถูกส่งไปยังหน้าต่างที่ไม่ถูกต้องเกิดข้อผิดพลาดหากคุณมีฟังก์ชันหรือมาโครที่กำหนดไว้ไม่ถูกต้องหรือเพียงแค่ใช้งานไม่ได้เนื่องจากมีบางอย่างไม่ได้เชื่อมต่ออย่างถูกต้อง ยากกว่ามากในการแก้ไขข้อบกพร่องและทำลายได้ง่ายขึ้นโดยไม่สังเกตเห็น
- COM / Automation: คล้ายกับแมปข้อความโดยเดิม COM ถูกผูกไว้กับรันไทม์โดยใช้มาโครซึ่งต้องการการส่งข้อผิดพลาดจำนวนมากและทำให้เกิดปัญหาแปลก ๆ ATL ทำให้เทมเพลตเป็นไปตามรวบรวมเวลาที่ จำกัด และจัดการได้ง่ายกว่ามาก
[แก้ไขการปรุงแต่ง: ในขณะที่สร้าง ATL ขึ้นแผนที่ทางเทคนิคของ Microsoft เน้นที่ "การจัดการเอกสาร" เป็นหลัก Apple กำลังฆ่าพวกเขาในธุรกิจสิ่งพิมพ์บนเดสก์ท็อป Office 'การเชื่อมโยงและการฝังเอกสาร' เป็นองค์ประกอบหลักในการปรับปรุงคุณสมบัติ 'การจัดการเอกสาร' ของ Office เพื่อแข่งขันในพื้นที่นี้ COM เป็นเทคโนโลยีหลักที่คิดค้นขึ้นสำหรับการรวมแอปพลิเคชันและ Document Embedding API นั้นใช้ COM MFC ใช้งานยากสำหรับกรณีการใช้งานนี้ ATL เป็นทางออกที่ดีในการทำให้เทคโนโลยีเฉพาะนี้ง่ายขึ้นสำหรับบุคคลที่สามในการใช้ COM และใช้คุณสมบัติการฝังเอกสาร]
การปรับปรุงเล็กน้อยเหล่านี้ทำให้ ATL จัดการกับแอพพลิเคชั่นง่ายๆที่ไม่จำเป็นต้องใช้สำนักงานทั้งหมดเช่นคุณสมบัติของ MFC บางอย่างที่มี UI ที่เรียบง่ายและ Office Automation บางอย่างมีขนาดเล็กรวดเร็วรวบรวมเวลาได้มากช่วยให้คุณประหยัดเวลาและปวดหัวได้มาก MFC มีไลบรารีชั้นเรียนขนาดใหญ่ที่อาจไม่สะดวกและยากที่จะทำงานด้วย
น่าเสียดายที่ ATL หยุดนิ่ง มันมีเครื่องห่อสำหรับ windows API และการสนับสนุน COM และจากนั้นก็ไม่เคยไปไกลกว่านั้นจริงๆ เมื่อเว็บเปิดตัวเนื้อหาทั้งหมดนี้ถูกลืมไปแล้วว่าเป็นข่าวเก่า
[แก้ไขการปรุงแต่ง: ไมโครซอฟท์ตระหนักดีว่า "สิ่งที่อินเทอร์เน็ต" นี้จะใหญ่โต แผนที่ทางเทคนิคของพวกเขาเปลี่ยนไปอย่างมากเพื่อมุ่งเน้นไปที่ Internet Explorer, Windows Server, IIS, ASP, SQL Server, COM / DCOM ในเซิร์ฟเวอร์ธุรกรรมแบบกระจาย ดังนั้นการเชื่อมโยงและการฝังเอกสารจึงไม่มีความสำคัญสูงอีกต่อไป]
รอยเท้าขนาดใหญ่ของ MFC ทำให้ไม่สามารถถ่ายโอนข้อมูลได้ดังนั้นจึงยังคงพัฒนาอย่างช้าๆ เทมเพลตได้ถูกรวมกลับเข้าไปในไลบรารีเช่นเดียวกับการปรับปรุงภาษาและ API อื่น ๆ (ฉันไม่เคยได้ยิน WTL จนกระทั่งฉันเห็นคำถามนี้ :)
ท้ายที่สุดแล้วจะใช้อันไหนเป็นเรื่องของความชอบ คุณลักษณะส่วนใหญ่ที่คุณต้องการอยู่ใน OS API พื้นฐานซึ่งคุณสามารถเรียกใช้โดยตรงจากไลบรารีใดก็ได้หากไม่มี Wrapper ที่เหมาะสมในไลบรารี
เพียง 2 เซ็นต์ของฉันจากการใช้ MFC เป็นเวลาหลายปีและฉันใช้มันทุกวัน ฉันขลุกอยู่กับ ATL เมื่อเปิดตัวครั้งแรกในสองสามโครงการในช่วงสองสามปี เป็นการสูดอากาศบริสุทธิ์ในสมัยนั้น แต่ไม่เคยไปไหนจริงๆ แล้วเว็บก็เข้ามาและฉันก็ลืมเรื่องนี้ไปทั้งหมด
แก้ไข: คำตอบนี้มีอายุยืนยาวอย่างน่าประหลาดใจ เนื่องจากมันยังคงปรากฏขึ้นในหน้าสแต็กล้นของฉันฉันคิดว่าฉันจะเพิ่มการจัดแต่งบางอย่างให้กับคำตอบเดิมที่ฉันคิดว่าขาดไป