lunedì 20 febbraio 2012

Rapido sviluppo di una applicazione Quiz utilizzando Spring Roo

A dire il vero, ho speso così tanto tempo in esecuzione di una pratica di formazione, scrivere un libro e si occupano di applicazioni Rails che il mio cervello aveva bisogno di un po 'di adeguamento al long-form, più di un giorno di codifica assegnazioni. Ho provato a iniziare con un semplice JPA / hibernate modello, ma l'anello di retroazione mentale, anche con Roo al timone, era troppo lento per me.
(Ricordate, io sono su una scadenza due settimane a destra ora a scrivere due presentazioni e ottenere il quiz di lavoro se ho un colpo a questo. Così sto cercando di controllare un sentimento agitando. E pensare che sto solo facendo una presentazione successiva tempo).
Sono andato attraverso tre fasi del pensiero prima di scrivere questo in giù:

Fase 1 - concentriamoci sul modello

Ho pensato che i dati è stato fondamentale, e che avrei potuto modellare dal database up. Ho finito dibatte dopo poche ore di questo, rendendosi conto che abbiamo due problemi qui - il modello della struttura quiz, e si occupano di istanze in esecuzione del quiz, le risposte di registrazione e reporting dei risultati.
I risultati sono stati piuttosto usa e getta, quindi non vi annoierò con loro.
Così, sono andato allo stadio 2

Fase 2 - Andate tutti progettazione patterny su di esso

Ok, si concentrano solo sugli oggetti e in memoria del modello. E 'stata una grande svolta, come mi ha fatto pensare sui contratti, costruire gli oggetti, ecc ho capito che potevo avere un Quiz in memoria del modello, e che avrei potuto costruire utilizzando un generatore. Così ho speso tempo a scrivere fino costruttori che sembravano qualcosa di simile:
01. package com.chariot.games.quizzo.model.quiz;
02. 
03.pubblico class {QuestionBuilder
04. 
05.questione delle interrogazioni;
06.pubblico QuestionBuilder () {
. 07question = nuova domanda ();
08.}
09. 
10.pubblico title QuestionBuilder (String title) {
11.question.setTitle (titolo);
12.restituire questo ;
13.}
14. 
15.pubblico QuestionBuilder scelta (scelta Choice) {
16.question.getChoices. () aggiungere (a scelta);
17.restituire questo ;
18.}
19. 
20.pubblico asQuestion Question () {
21.ritorno questione;
22.}
23.}
Poi ho potuto utilizzare il generatore nei test, ala:

01.@ test
02.pubblico void testBuildQuestionWithBooleanAnswer ()
03.getta CloneNotSupportedException {
04. 
05.Domanda q = nuovo QuestionBuilder ()
06.. titolo ( "Gli studi dicono che la gente è pazza." )
07.. scelta ( nuovo ChoiceBuilder ()
08.. booleanChoice ( true )
09.. testo ( "Sono pazzi" )
10.. asChoice ()
. 11.) asQuestion ();
12. 
13.assertEquals ( "Gli studi dicono che la gente è pazza". , q.getTitle ());
14.assertEquals ( , q.getChoices () size ().);
15.assertEquals ( "Sono pazzi" ., q.getChoices () get ( ) getAnswerText ().);
16. 
17.assertEquals (BooleanChoice. classe ., q.getChoices () get ( ) getClass ().);
18. 
19.Domanda q2 = q.clone ();
20.assertEquals (q2, q);
21.assertNotSame (q2, q);
22.}

Fase 3 - Prototipo rapidamente su carta, modelli nuovo

Ma alla fine, quello che ho veramente bisogno è una definizione di quiz, con domande, ecc, e ho bisogno di persistere loro a un certo punto. Così, è stato divertente, e mi ha aiutato a comprendere le relazioni, ma torna alla JPA.

Il mio modello fino ad ora ...

Ok, finora non ho gli elementi seguenti modelli:
01.@ RooJavaBean
02.@ RooToString
03.@ RooJpaActiveRecord
04.pubblico class Scelta {
05. 
06.@ NotNull
07.@ taglia (max = 300 )
08.private String testo;
09. 
10.@ NotNull
11.private Boolean corretto;
12. 
13.@ NotNull
14.@ ManyToOne
15.private questione delle interrogazioni;
16.}
17. 
18.@ RooJavaBean
19.@ RooToString
20.@ RooJpaActiveRecord
21.pubblico class Domanda {
22. 
23.@ ManyToOne
24.private quiz Quiz;
25. 
26.@ NotNull
27.@ taglia (max = 300 )
28.private String testo;
29. 
30.@ OneToMany (cascade = CascadeType.ALL)
31.private Set <Choice> scelte = nuova <Choice> HashSet ();
32.}
33. 
34.@ RooJavaBean
35.@ RooToString
36.@ RooJpaActiveRecord
37.pubblico class {Quiz
38. 
39.@ NotNull
40.@ taglia (max = 200 )
41.private String titolo;
42. 
43.@ NotNull
44.@ taglia (max = 500 )
45.private String description;
46. 
47.}
48. 
49.@ RooJavaBean
50.@ RooToString
51.@ RooJpaActiveRecord
52.pubblico class Squadra {
53. 
54.@ NotNull
55.@ taglia (max = 80 )
56.private String name;
57. 
58.@ NotNull
59.private missione String;
60. 
61.@ ElementCollection
62.privati ​​<TeamMember> Lista membri della squadra;
63.}
64. 
65.@ RooJavaBean
66.@ RooToString
67.@ Embeddable
68.pubblico class {TeamMember
69. 
70.@ NotNull
71.@ taglia (max = 40 )
72.private String name;
73.}

Ho già detto - i rami Git sono a buon mercato?

Git è grande per cose come questa -. Poiché mantiene le versioni e le filiali all'interno del vostro git directory del database, è possibile diramazione e unione a volontà, e quindi spingere gli aggiornamenti repository quando si è pronti.

Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.