2012-12-10 6 views

risposta

28

Svantaggi di file collegati:

  • Aggiungi come Link può essere difficile da mantenere, soprattutto perché si scala a più progetti e molti file sorgente. Tooling (come Project Linker per Visual Studio 2010, o tenendo premuto ALT mentre si trascina in Visual Studio 2012) può rendere tutto più semplice.
  • Gli strumenti di refactoring non funzionano con i file collegati. Ad esempio, se si rinomina una classe o un metodo in un file collegato, gli strumenti di refactoring non aggiorneranno i riferimenti ad altre copie collegate di tale API.
  • Quando si modifica il codice in un file collegato, intellisense potrebbe mostrare API non disponibili su tutte le piattaforme a cui è collegato il file.
  • Visual Studio fornisce una finestra di messaggio che dice "Questo documento è aperto da un altro progetto" quando si tenta di aprire un file collegato già aperto da un altro progetto.
  • Si finisce con una DLL separata per ogni piattaforma. Se stai creando una libreria riutilizzabile che vorresti condividere con altri, potrebbe essere più facile distribuirla se c'era una sola versione di essa, non una separata per ogni piattaforma.

Svantaggi di librerie di classi Portatili:

  • si sono limitati alle API che sono disponibili su tutte le piattaforme di destinazione. Non è possibile utilizzare la compilazione condizionale (istruzioni #if) per aggirare le differenze tra le piattaforme
  • Può essere difficile capire quali API sono supportate su una determinata combinazione di piattaforme. Ecco un foglio di calcolo che può aiutare con questo: Portable Class Library API List

Per alcune indicazioni su come sfruttare portatili librerie di classi, vedere il seguente:

Sebbene io sia parziale rispetto alle Portable Class Libraries (come membro del team PCL), i file collegati sono anche un modo di condividere il codice completamente valido e se non si ricorrere o non badare agli svantaggi, quindi andare avanti e utilizzare i file di origine collegati. Per lo più utilizzo le librerie di classi portatili, ma utilizzo ancora i file di origine collegati quando i PCL non si adattano.

+2

Questa risposta mi sembra ottima. L'unica cosa che aggiungerei è che il percorso del file collegato aggiunge anche problemi di manutenzione del fattore N. Quando ho usato per mantenere la versione del file collegato di mvvmcross, l'aggiunta di una nuova piattaforma era una prospettiva scoraggiante, ma ora sono passato al codice PCL, sto pensando di aggiungere un paio di nuove piattaforme - aggiungerle non è così grande o sgradevole un compito. – Stuart

+3

Ho mentito ... C'è ancora un paio di cose che aggiungerei: 1. che la strada pcl incoraggia i test e rende i test molto più facili; 2. Che imo la strada pcl incoraggia una buona architettura - incoraggia l'uso di interfacce e l'iniezione di dipendenza, mentre il collegamento di file incoraggia il collegamento statico alle classi e le istruzioni #if che in seguito causano la rottura di altre build. – Stuart

+0

Abbiamo esaminato la conversione in PCL, ma penso che sia davvero qualcosa che deve essere pensato dal giorno 1. – iwayneo