Ưu nhược điểm của lập trình giao diện (GUI) giữa mfc c++ và winform c#?

nghe mọi người nói dùng mfc hơi củ chuối còn winform thì nhanh hơn,dễ hơn cho mình hỏi giữa mfc và winform thì nên chọn cái nào ,và ưu nhược điểm của từng cái ?
mong mọi người giải đáp thank so much

1 Like

Đạt thấy style của MFC khó code lắm, Winform hướng đối tượng dễ làm hơn nhiều. MFC là Microsoft Foundation Class Library, là thư viện C++ để lập trình giao diện trên Windows, giờ có Qt cũng dùng C++ làm giao diện tốt hơn nhiều.

Đạt có học và làm MFC, nhưng thấy khó dùng. Trong khi đó Qt thì đọc qua là làm được ngay.

Đạt chỉ thấy nhược điểm của MFC là cũ, khó sử dụng. Không thấy ưu điểm.

3 Likes

nếu muốn lập trình giao diện thì như anh @ltd nói thì Qt hay hơn MFC nhiều :smiley: minh cũng đang học cái Qt này, khá dễ học, thấy nó cũng giống giống lập trình winform với C#. Nếu bạn thích lập trình giao diện với C++ thì nên xem cái Qt. Qt chạy được đa nền tảng, window hay ubuntu đều chạy được, ứng dụng viết ra hình như còn chạy đa nền tảng được nữa :smiley: như window, ubuntu, android,vv

thanks mọi người nha

Hình như là dùng MFC với C++ thì hiệu năng cao, có thể can thiệp sâu vào hệ thống, không cần cài đặt thêm các framwork .Net => chạy được luôn trên tất cả các máy windows không cần cài đặt thêm gì. Hóng hớt được vậy không biết có đúng không.

1 Like

Ưu của MFC:

  • Hiệu năng cao, tốc độ nhanh, tại vì nó chạy trực tiếp, ko cần qua Framework.Net, chuyển qua máy khác ko phải cài gói gì thêm nếu đã có đầy đủ thư viện MFC, gọn nhẹ, MFC nó thiết lập một số cơ bản của Windows API thành Class, nên cũng được xem như là lập trình Windows API (C Windows )
  • Có thể custom GUI (hay là một thứ gì đó) tận sâu, muốn custom kiểu gì cũng được (Vì thế đa số các ứng dụng hệ thống lớn trên windows đều phát triển từ MFC/API )

Nhược điểm:

  • Khởi tạo ứng dụng khó khăn hơn Windows Form,
  • Tại vì MFC nó đơn giản nên design giao diện rất khó, nếu muốn hoàn thiện cần phải can thiệp bằng code rất nhiều
  • Chỉ có một số Class cơ bản, ko hỗ trợ nhiều bằng .NET Windows Form.
  • Làm MFC thì cần có kiến thức C/C++ sâu, và nhiều cái cũng phải phát triển từ đầu, ví dụ như kế nối CSDL bằng C++ thì khó khăn hơn nhiều so với C#. Làm ko cẩn thận là ứng dụng chạy ko ổn định.

Ưu của Windows Form:
xem như nó loại bỏ những nhược điểm trên của MFC, thiết kế nhanh gọn lẹ, trực quan, làm Windows Form bằng C# thì cũng ko cần có kiến thức lập trình sâu của C++

Nhược điểm của Windows Form:
Ứng dụng rất nặng nề, Giả sử nếu một cái chương trình chỉ có một cái Form với một nút nhấn, build ra file release hoàn chỉnh thì phải 1, 2 MB (Chưa tính phải có gói .NET đi kèm), trong khi đó MFC chỉ cần dưới 100KB là có 1 file EXE (Chưa tính gói thư viện MFC)

2 ứng dụng chức năng giống nhau giữa Windows Form và MFC, thì MFC có thể chạy nhanh hơn gần chục lần so với Windows Form.

Windows Form cần phải có nguyên bộ .NET đi kèm mới chạy được (xem như bộ máy ảo chạy dưới để phiên dịch cho Windows ). Còn MFC chỉ cần 1 file thư viện MFC_Version.DLL đúng với version mà ứng dụng đang sử dụng (Khoảng 1 - 3 MB )

Có khi Windows Form mà muốn can thiệp xuống hệ thống thì khó hơn MFC, như custom giao diện theo ý muốn.

Tóm lại:
Cái gì cũng có ưu nhược điểm riêng, ưu cái này cũng là nhược cái kia,
Nói chung là tùy theo yêu cầu,
Ví dụ như muốn làm một ứng dụng quản lý gì đó, ko liên quan gì tới hệ thống máy tính, đồ họa thì làm windows form cho nó nhanh, ổn định,
Còn muốn làm mấy ứng dụng hệ thống, ứng dụng đồ họa thì nên làm MFC/API …

Thực tế mình để ý, Windows Forms áp dụng nhiều nhất vào những ứng dụng quản lý, có liên quan tới CSDL
Còn tất cả ứng dụng còn lại đều phát triển từ MFC/API lên !

(Thực sự cơ chế dưới giữa 2 ứng dụng MFC/API và .NET là khác nhau hoàn toàn …)

12 Likes

Mình không thấy ưu điểm của MFC :
Những thứ được coi như ưu điểm :

  • Hiệu năng cao: cái này thực chất không quá cần thiết vì không phải các ứng dụng đều phải thực hiện rất nhanh. Nó chỉ có ý nghĩa với những ứng dụng cần xử lý cực nhiều (nhưng ứng dụng này không nhiều).
  • Không cần Framework đi kèm: Hiện tại những bản Windows XP còn rất ít, các bản Windows 7 trở lên đều có .NET Framework 3.5 trở lên nên ứng dụng .NET cũng không cần mang theo thứ gì. Phần này MFC vô giá trị.
  • Can thiệp sâu hệ thống: thực ra cũng không quá cần thiết bởi rất ít ứng dụng cần tới điều này. MFC đa phần gọi đến các API của Windows, .NET cũng gọi được đến các API này bình thường. gọi API và sử dụng unsafe vẫn làm cho .NET can thiệp sâu vào hệ thống.
  • Build App dung lượng nhỏ : Không mang giá trị gì nếu để lưu trữ hoặc phát hành. Thực tế thì mình thấy MFC build ra còn nặng hơn .NET rất nhiều lần. Một ứng dụng gồm WinForm và 1 button trong .NET chỉ mất 10KB. MFC phải mất ít nhất vài chục KB. App lớn thì chưa xác thực.
    Nhưng dù gì thì bây giờ build ra một cái 1MB và 1 cái 20MB đi nữa cũng không mang ý nghĩa gì cả.
    Những thứ là nhược điểm :
  • Các component trong MFC ít và thô làm cho giao diện làm bằng MFC cực xấu. Giao diện của một App rất quan trọng, giao diện xấu thì ít được đánh giá cao. Một cô gái cực tốt nhưng mặt xấu thì cũng chả ma nào dám bén mảng lại gần.
  • Câu cú của MFC lằng nhằng, sử dụng từ ngữ mang tính hình tượng thấp nên khó viết code, khó hình dung.
  • Hỗ trợ rất ít thư viện nên khi làm việc rất nhọc khi cần tương tác với nhiều thứ mở rộng (ví dụ SQL…).

MFC ra đời rất sớm, nên rất rất nhiều ứng dụng được viết bằng MFC. Nhưng nó không chắc là hướng đi đúng cho tương lai bởi vì bây giờ có nhiều hướng đi tốt hơn MFC nhiều (QT, C++ Builder, .NET). MFC đa phần còn lại trong dự án mang tính bảo trì ( dự án được viết bằng MFC rất lâu và giờ không chuyển sang cái khác được nên vẫn phải dùng MFC để bảo trì hoặc phát triển).

Đó là ý kiến của mình.

3 Likes

Mình đang làm MFC, có nhúng thêm tool ngoài, mọi nhược điểm đều có thể khắc phục đc, cái quan trọng là can thiệp được sâu…đó là ý kiến cá nhân :slight_smile:

1 Like

Theo quan điểm của mình thì MFC bây giờ chỉ tồn tại dưới dạng maintain. Các dự án bây giờ gần như là không sử dụng MFC nữa vì thực tế là cost (time - money) để phát triển nó lớn hơn rất nhiều so với .NET. Các HĐH windows sau này đều default .NET 3.5 nên việc deploy ứng dụng cũng không phải là vấn đề.
Nếu bạn là architech cho dự án, nếu dự án không có yêu cầu j đặc biệt từ khách hàng, quyết định là ở bạn, thì mình khuyên bạn nên sử dụng C#, vì tính khả thi của dự án.
Còn nếu bạn là người đang đi học, thì cứ học cái nào mà bạn cảm thấy hứng thú

Thực ra cho đến thời điểm này, mặc dù mình đã được nghe rất nhiều đến từ “can thiệp sâu vào hệ thống” những quả thật không hiểu nó là làm những gì và nó mang ý nghĩa thế nào ? :frowning:

Viết vào MBR của ổ cứng; Viết vào Bios; hay gì gì :frowning:

Hiệu năng:
Bạn ko cần hiệu năng cao thì có thể do bạn chỉ làm những ứng dụng nhỏ
Những ứng dụng lớn trên thê gian hiện giờ như Photoshop, Corerel, AutoCAD, … hay những phần mềm diệt Virus mà sử dụng .NET thì thật là ko thể tin được

Can thiệp vào hệ thống: Thì mình đã nói là tùy vào ứng dụng muốn viết rồi mà, cần hay ko cần thì cũng tùy vào ứng dụng, chứ ngôn ngữ nào cũng làm được cái mình muốn cả.

  • Bạn build cái app .NET nào mà file release dưới 10KB, gửi cho mình xem thử ?

Những thứ nhược điểm thì bạn nói đúng rồi.

Những thứ can thiệp sâu chẳng phải gì xa xôi cả, , Ví dụ như customize giao diện tùy biến theo thiết kế, thử sài Windows Form mà làm một cái GUI như mình mong muốn thử, ví dụ như hình thù bất kì tròn, méo, elip, … thì windows form làm cực như MFC mà kết quả ko tốt bằng đâu nhé,

Ngôn ngữ nào cũng can thiệp được sâu vào hệ thống cả, vấn đề là dễ hay khó thôi, như .NET là ngôn ngữ tầng trên của C++, nên nó muốn làm việc ở hệ thống thì cần qua trung gian nhiều
Còn C++ thì ở tầng dưới làm dễ hơn thôi…
Tìm phần mềm diệt Virus hay chống phân mảnh đĩa nào trên thị trường mà viết bằng .NET thử đi …

Ví dụ như thế này cho dễ hiểu
2 thằng ở cùng một chung cư
Một thằng ở tầng 1 với 1 thằng ở tầng 10,
Thằng tầng 1 chê thằng tầng 10: ở trên đó cao, lên xuống cực, có nguy hiểm gì chạy ko kịp, thì thằng tầng 10 lên tiếng là ở trên có hỗ trợ phòng chống hết rồi, có thang máy rồi
Còn thằng tầng 10 lại chê tầng trệt: ở dưới đất hưởng dơ ở trên thả xuống, dưới đất không khí ô nhiễm, … thì thằng tâng 1 lại nói là ở dưới đóng cửa mở máy lạnh là oke.

Thì tùy theo nhu cầu bạn muốn ở đâu làm gì thì lựa chọn cho thích hợp

Chứ mình đã nói là ưu cái này là nhược cái kia
Nếu MFC hay .NET tốt perfect thì ng ta chẳng phải ra một đống mấy cái khác làm gì …

1 Like

@Lam_Quang_Minh:

Hy vọng bạn đừng đánh đồng C++ là MFC và ngược lại. Các phần mềm hiệu năng cao được viết bằng C++ -> đúng. Mình có phủ nhận đâu, tuy nhiên nó ít. Và một điều nó được viết bằng C++ chứ chưa chắc bằng MFC. Biết đâu nó viết bằng C, biết đâu nó viết bằng delphi, biết đâu nó cũng viết bằng C++ nhưng là QT, là C++ Builder, là …

,NET vẫn có thể có được hiệu năng của C++ (hoặc kém một chút không đáng kể ) khi gọi API hoặc khi dùng các dll build bằng C++. Cái này thì nhiều người trong đó có mình đã test rồi nên nếu bạn muốn biết thêm thông tin có thể google cũng thấy. Mình test C# và dll của C++ cho hiệu năng cao hơn cả QT ( C++ ) -> Cái này chưa rõ nguyên nhân.

Và bạn lại đánh đồng .NET với WindowsForm. .NET đâu chỉ có mỗi WindowsForm ?
Bạn không tin mình release một App với 10KB ? Và bạn bảo là tùy chỉnh GUI tròn méo elip là khó hơn MFC ?

Mình đã build luôn 2 App cho bạn xem đây. Mình làm cả 2 cái trong chưa đầy 5 phút. Một cái 9KB, Một cái nhiều Tools hơn thì 10KB.
Cái App dưới (10KB) đều là các control nhé không phải là hình ảnh đâu. Cái nghiêng ngả, cái lộn ngược rồi màu sắc dạng gradient…

2 Likes

Mình ko có đánh đồng C++ với MFC, nhưng MFC nó based cơ bản nhất từ C++, ko gọi nó là C++ chứ gì? Khi làm MFC cũng phải viết bằng C++.
Mình có nói mấy cái app trên viết bằng C++ là MFC đâu, nhưng mình khẳng định là ko phải .NET
.NET ko thể có hiệu năng bằng C++ được đâu, nhanh như Java mà hiệu năng thua C/C++ hơn 10 lần, Mà Java còn nhanh hơn .NET đấy. Mà nói vậy thôi chứ giờ ko còn quan trọng lúc này, nhưng cái mình muốn khảng định ở đây là .NET ko thể nhanh bằng C++ được. Tại .NET nó chạy phải có trình thông dịch (VM) ở dưới
Cơ chế 2 app chạy Native C++ với .NET là khác nhau hoàn toàn như mình đã nói ở tuốt trên kia.

Mình ko có đánh đồng .NET với WindowsForm, tại 2 cái đó ý nghĩa khác nhau hoàn toàn, nhưng hồi xưa đi học WindowsForm được xem như là danh từ mượn để hiểu là lập trình Windows Form bằng .NET

Mình nói bạn customize thử cái cửa sổ ở ngoài bự kìa, chứ ko phải customize cái button, customize ko dùng tool nhé …
Còn cái vụ 10KB thì có thể mình đã sai. Tại vì cách đây 1 năm, ở công ty mình có 2 người bạn cùng làm 1 ứng dụng giống hệt nhau, một đứa làm bằng C# .NET, một đứa làm bằng MFC… Nhưng build ra file release thì .NET là 1.2 MB, còn MFC là 110 KB. Cái này để mình xem lại thử !

Mình mới học thì thấy Winform bằng C# thì dễ hơn MFC, và cũng vì MFC giờ ít cộng đồng hỗ trợ quá. Tìm tài liệu thì cũng toàn từ 2006 tới giờ

@Lam_Quang_Minh

Điều bạn muốn nhấn mạnh là C++ cho hiệu suất cao hơn .NET là đúng. Nếu chỉ nói đến hiệu năng thì .NET (xét trên tổng thể) thua C++, nhưng thắng Java nếu như bạn nói. Bạn nói Java thua C++ 10 lần nhưng mình thấy .NET thỉ thua C++ tối đa 3.5 lần thôi.
Và không nên nghĩ rằng cứ cái gì làm bằng C++ cũng đều cho hiệu năng cao cả. Rất nhiều cái làm bằng C++ nhưng hiệu năng thấp.

Mấy control mình customize không dùng tool nhé. Gõ lệnh cả đấy. Customize form thì cũng nhiều người làm rồi và rất nhiều cách.

Điều mình muốn nhấn là MFC bây giờ lỗi thời rồi. Nếu để có được những thứ mạnh của C++ thì có nhiều lựa chọn khác như QT, C++ Builder… cũng là C++ và nó có nhiều ưu điểm hơn và còn đa nền tảng trong khi MFC chỉ chạy trên Windows.

Nếu chỉ chạy trên Windows thì phần lớn .NET sẽ được dùng so với MFC vì đa phần ứng ụng không đòi hỏi hiệu năng thật cao. .NET có hiệu năng không bằng MFC nhưng là tương đối đủ để con người khó nhận thấy khác biệt bằng cảm giác. Mặt khác .NET hỗ trợ sử dụng các thư viện C++ tốt và khi dùng nó sẽ có được hiệu năng của C++. Dùng .NET sẽ có được nhiều thứ tốt của MFC nhưng dùng MFC lại không có được những thứ hay của NET.

Còn về những phần mềm bạn ví dụ thì chưa hẳn đã phải là họ cần hiệu năng thật cao mà nó là kiểu kế thừa. Khi khởi đầu nó được viết bằng ngôn ngữ nào thì sau này nó vẫn sẽ được viết bằng ngôn ngữ đó mặc dù có ngôn ngữ khác tốt hơn. Bởi vì việc chuyển một dự án sang ngôn ngữ khác là vô cùng khó khắn và tốn kém. Gần như là viết lại dự án.

học cái gì cũng được, cũng tốt và dùng được cả, nhưng học cho đến đầu đến đuôi đừng có cái này 1 tí, cái kia 1 tí. Đấy mới là sai

Thôi bỏ đi :smiley:
Chủ thớt đang hỏi về 2 cái MFC C++ với Window Form .NET thì mình bàn về 2 cái này thâu
Còn mấy cái kia như QT, … nói làm gì,

Tóm lại chủ thớt học càng nhiều càng tốt, ko thừa đâu …

WindowForm cũng gần lỗi thời rồi. Nếu dùng .NET sao không thử WPF ?
Khi thành thạo WPF có khi không bao giờ muốn quay về với WindowForm nữa :smiley:

WPF cũng sắp lỗi thời rồi bạn ạ!

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?