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 () {
. 07
question =
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 (
1
, q.getChoices () size ().);
15.
assertEquals (
"Sono pazzi"
., q.getChoices () get (
0
) getAnswerText ().);
16.
17.
assertEquals (BooleanChoice.
classe
., q.getChoices () get (
0
) 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.