Io fondamentalmente colpito tutti sulla testa con codice Scala nel nostro ultimo progetto, in quanto mi sono ammalato di debug gli stessi problemi causati da una mancanza di comprensione di Hibernate + JBoss. (E 'incredibile, davvero gli sviluppatori che scrivevano del sistema originale sono ancora lì e ancora si perdono in dettagli Hibernate..)
Ciò che abbiamo avuto -> un sistema strambo costruita per lo più con un mucchio di chicchi di EJB apolidi cablata insieme con qualche codice di ibernazione mescolato con un po 'di SQL. (Siamo un ASP, in pratica. Il cluster di produzione è abbastanza piccolo -> solo circa 100 macchine.)
Cosa ho fatto -> mettere insieme vari servizi basati su REST, dove abbiamo ridefinito l'RPC tra alcuni server . Questo rende tutto molto facile da codificare, oltre a implementare un'API pubblica in quello che era un sistema in cui non si prestava attenzione alle dipendenze.
Finora, abbiamo iniziato a distribuire il codice dentro e fuori le istanze di JBoss senza problemi reali. La prima volta che provi a usare Scala object
in Java, probabilmente ti arricci il naso. Altrimenti, nessuno se n'è mai accorto.
Finora sono trascorsi circa 5 mesi dall'inizio. Abbiamo fatto un paio di revisioni importanti, e successivamente siamo dietro, ma il sistema è molto, molto meglio testato rispetto al passato. Quindi, mentre abbiamo avuto alcune idee sbagliate mentre stavamo imparando il sistema, ora siamo stati in grado di rimuoverle tutte e di avvicinarci molto alla distribuzione della produzione. Tutto sommato, direi che il tipico tizio ha bisogno di 2-3 mesi per smettere di programmare come un programmatore Java, e diventare "familiare" con la maggior parte delle librerie standard.
Scrivere codice JDBC invece di un sistema ORM ha praticamente eliminato tutti i nostri problemi di prestazioni. La velocità è stata in realtà significativamente migliore, ma soprattutto perché ero in grado di fare tutto ciò che volevo con un codice applicativo meno reale.
Strumenti che sto usando:
- Restlet: molto soddisfatto di questo quadro. Il nostro livello di restlet è scandalosamente codice banale.
- JDBC -> Nota: abbiamo ottimizzato quello che era fondamentalmente lì nel wiki
- XML (e presto, JSON)
- Buildr, Maven su un paio di progetti che non volevo convertire (più Nexus e Hudson). Sto sperimentando con sbt, che è già molto bello per progetti scala.
Non abbiamo avuto assolutamente alcun problema con il riutilizzo di una delle vecchie librerie java, ma tendiamo a racchiuderle in livelli scala-fied. Principalmente solo per scrivere meno codice.
E il modello pimp my library è di gran lunga il più importante da conoscere. Il pattern "torta" è bello, ma devi controllare l'istanziazione, che a volte non è abbastanza utile. Ho anche usato Guice in un ambiente misto, non proprio difficile. Ma trovo che il codice di mixaggio sia molto meno utile di quanto pensassi all'inizio, anche se probabilmente è perché sto sostituendo un sacco di codice Java davvero pessimo.
Il mio ambiente di modifica è principalmente TextMate su OS X, ma viene implementato su server Linux.
P.S. Sì, lo so che ha circa 4 mesi, ma qualunque cosa. È rilevante, soprattutto ora che abbiamo qualche esperienza.
Nel caso in cui qualcuno fraintenda la frase "in rabbia", si riferisce all'uso di qualcosa nel servizio effettivo verso il suo scopo, in contrasto con l'uso della pratica. La frase non è un giudizio qualitativo, di per sé. Può essere ovvio per tutti, ma forse no. – nsayer