2010-03-20 5 views
7

Supponiamo che tu sia uno studente IT con una conoscenza di base di C++ e C#. Supponiamo che si vuole progettare applicazioni che:Domanda difficile su WPF, Win32, MFC

  1. necessità di fornire alcune prestazioni, come software di archiviazione, algoritmi di crittografia, codec
  2. fare uso di un qualche sistema chiama
  3. hanno una gui

e vuoi imparare una Api che ti permetta di scrivere app come quelle descritte in precedenza e:

  1. è mainstream
  2. è a prova di futuro
  3. dà diritto a trovare un lavoro decente
  4. è abbastanza facile - voglio dire facile come VCL, non è facile come winapi

Così, rendendo questi presupposti, ciò Api sceglierai ? MFC, WPF, altro? Mi piacciono molto VCL e QT, ma non sono mainstream e penso che pochi datori di lavoro vorranno che tu scriva app in QT o Visual C++ Builder ...

Grazie per le risposte.

+1

"Supponiamo che tu sia uno studente IT con una conoscenza di base di C++ e C#." Ora sappiamo che sei uno studente IT. :-) –

risposta

10
  • Win32 API - mi piacerebbe non pensarci più, se fossi in te. La programmazione di un'applicazione Windows direttamente tramite l'API Win32 ha senso solo se si sta programmando in pura C, o se si ha realmente bisogno di fare molte chiamate di sistema, o se si è preoccupati del sovraccarico aggiuntivo introdotto da più "comodi" piattaforme o framework (come quelli sotto indicati).Programmare le interfacce utente direttamente tramite l'API Win32 è faticoso, disordinato e devi gestire molti dettagli. Non è nemmeno indipendente dalla piattaforma, ma puoi anche non esserne preoccupato.

  • MFC - Forse un'opzione se si programma in C++ e si fissa sulla piattaforma Windows. Non ho mai capito cosa ci sia di tanto eccezionale, a parte il fatto che rende l'API Win32 molto più comoda (AFAIK è fondamentalmente una raccolta di wrapper orientati agli oggetti attorno all'API Win32 che ne rimuovono parte della sua complessità/disordine). Inoltre, non è molto indipendente dalla piattaforma.

  • Qt, wxWidgets - abbastanza diffuso framework di interfaccia utente. Potrebbe essere una buona opzione in cui l'indipendenza dalla piattaforma ha un ruolo. AFAIK entrambi i framework sono mirati al linguaggio C++.

  • WinForms (.NET) - Simile a MFC, anche questo si basa sull'API Win32 (USER32 e GDI +). AFAIK il framework WinForms ora viene portato su Mono e quindi un po 'multipiattaforma. Tuttavia, non è esattamente la tecnologia più aggiornata. Per le UI complesse a volte può anche essere un po 'pigro. Se dovessi decidere oggi quale framework usare, preferirei scegliere ...:

  • WPF (NET) - più moderno di WinForms, con funzionalità più grafico e, a quanto pare, rendering più veloce, in quanto non è più basato sull'API Win32 (GDI). (E gira su .NET, che trovo un'ottima piattaforma per lo sviluppo. Programmare in C# è molto più facile della programmazione in C++ IMHO, che è anche un argomento contro Win32 API, MFC, Qt e wxWidgets.) Nota che WPF non è multipiattaforma, esiste solo sulla piattaforma Windows finora.

  • Quindi ovviamente c'è Java, inclusi i framework UI forniti. Non posso dire molto sul fatto che non sono una persona di Java, ma potrei immaginare che Java sarebbe la scelta migliore per l'indipendenza dalla piattaforma; ed è la piattaforma dominante (su .NET) in alcuni settori (ad esempio telefoni cellulari, servizi bancari, a causa della solida JVM e considerazioni di sicurezza).

Così mia raccomandazione sarebbe il framework .NET e WPF per l'interfaccia utente, se hai intenzione di rimanere per lo più nel mondo Microsoft. Ricorda che puoi ancora utilizzare l'API Win32 (non ti avvicinerai più a "chiamate di sistema") tramite P/Invoke.

+0

La mia unica domanda sarebbe: io uso WPF e .net, come sarò in grado di implementare il codice che rende uso di un po 'di aritmetica pesante, fare uso del puro muscolo della CPU? Come è possibile implementare un archiviatore di file usando .net? Forse interfezioni tra WPF GUI + C++? – Mack

+0

Beh, sono sicuro che c'è più di un modo per farlo. Potresti, ad es. ** (1) ** scrivi i tuoi lavori pesanti in C e compilarli in un file .DLL, quindi accedi alle funzioni all'interno della DLL tramite le funzionalità di interoperabilità di .NET. Oppure ** (2) ** scrivi un componente COM (che è fondamentalmente uguale all'opzione 1, ma orientato agli oggetti). .NET e COM interagiscono abbastanza bene. ** Ma **, prima di fare tutto questo: potrebbe essere una buona idea vedere se l'interoperabilità è necessaria o se le tue operazioni gravose funzionano abbastanza bene quando sono scritte nella tua lingua .NET preferita. – stakx

+4

@Mack - Vorrei effettuare il check-out di C# e fare alcuni test per vedere quanto velocemente funziona per i tuoi scopi. Ovviamente c'è un sovraccarico in un linguaggio gestito, ma a meno che tu non stia * davvero * sottolineando la CPU (al punto che alcune differenze di prestazioni percentuali significano molto), potresti non notare che .NET è molto più lento. Naturalmente dipende da cosa hai intenzione di fare con esso ... –

5

Se ti piace codificare in C# e lavorare con il framework .Net ti consiglio di dare un'occhiata a WPF. WPF è un ottimo framework GUI in cui puoi fare praticamente qualsiasi cosa - e anche farlo brillare! WinForms potrebbe essere più facile da afferrare, ma direi che WPF è più "a prova di futuro". Un'altra cosa positiva è che WPF è molto simile a Silverlight, quindi se gestisci bene WPF dovresti essere in grado di scrivere anche le applicazioni Silverlight, se questo è interessante. Si prega di non preoccuparsi di imparare MFC .. Non posso credere che ci sono molti che sta usando MFC oggi per altri motivi di quello che stavano usando prima, e non avuto l'opportunità di cambiare ..

Là ci sono un sacco di buoni lavori là fuori per i programmatori .Net, quindi essere in grado di gestire alcuni framework GUI oltre a C# e la conoscenza generale del framework .Net sarà utile.

Quando si tratta dei punti in cui si è in grado di "offrire alcune prestazioni come archiver, algoritmi crittografici, codec", questo non dovrebbe dipendere dalla struttura della GUI scelta. Questo tipo di codice verrà scritto a strati al di fuori del livello della GUI e in genere verrà associato alla GUI. Con WPF scrivi i tuoi ad es. algoritmi crittografici in C# in qualche classe indipendente dal livello della GUI, quindi la vista scritta in WPF si legherebbe al codice C# e otterrà la sua risposta da qui. Tuttavia, se hai usato WinForms, avresti comunque fatto la stessa cosa, e le prestazioni dipendono dagli algoritmi, non dalla GUI.

Quando si tratta di iniziare con WPF ci sono un sacco di domande su SO per aiutare con questo. Quindi dovresti trovare un buon aiuto con una ricerca rapida.

Buona fortuna!

+0

Bene, grazie per la risposta. WPF sembra carino. Ma non capisco "Questo tipo di codice verrà scritto a strati al di fuori del livello della GUI e in genere verrà associato alla GUI." parte. Vuoi dire che scrivo la GUI usando WPF separatamente e il codice che utilizza la potenza della CPU non elaborata separatamente e in qualche modo li collego magicamente insieme? Questo implica l'uso di C++ e interope non gestiti? – Mack

+0

Nessun C++ non gestito, nessun interruzione, a meno che tu non voglia. Nessuna magia davvero. Considera di scrivere una classe in C# che gestisce i tuoi pesanti algoritmi. Ora puoi scrivere un'applicazione console che mostra il risultato - o potresti scrivere un'applicazione WPF. Le prestazioni dipendono dalla libreria di classi che gestisce i tuoi algoritmi, non dalla GUI che mostra il risultato. Le prestazioni della GUI sono per lo più rilevanti quando si tratta di animazioni e grafica GUI fantasiosa, e questo è gestito molto bene in WPF. – stiank81

+0

Grazie. Sceglierò il percorso C# + WPF. Entrambi sono abbastanza carini, nuove tecnologie e tutto.Non ero sicuro che C# potesse offrire prestazioni sufficienti per i programmi desktop. – Mack