Sto lavorando con Ruby on Rails al lavoro e sto leggendo il Programmatore pragmatico sul lato.
Mi è stato assegnato il compito di creare una piccola applicazione di registrazione con ~ 10 campi modulo. Dalla mia precedente esperienza, quando si tratta di moduli diventa un processo doloroso e Rails non sembra rendermi la vita molto più facile.
Influenzato dal libro ho iniziato a creare una libreria basata su un metadata YAML: alcune cose:
- Collega i metadati alla classe Model
- Genera getter e setter di attributi in base ai metadati
- Genera validatori (
ie. myuser.valid?
) in base ai metadati
Il file di metadati per un utente ( user.yml ) sarebbe simile a questo:
First Name(s):
programmatic_name: forename
example: James
validate: \D*
require: true
input_instruction: Type your first name(s) here
Surname:
programmatic_name: surname
example: Green
validate: \D*
require: true
input_instruction: Type your surname here
Club:
example: 'Hawks'
programmatic_name: club
require: yes
input_instruction: Choose your club
valid_num_values: 1
valid_values:
- Darlings
- Hawks
- SSG
Attualmente con questa configurazione ho generato campi modulo con un loop sui metadati. Convalido ogni campo in base alle voci * valide nei metadati.
Generazione di moduli:
<html>
<form>
<%
for attr_name, meta in metadata:
<input ..
..
%>
</form>
</html>
Inoltre automatizzo parzialmente il test utilizzando la voce di esempio nei metadati come qualcosa che dovrebbe essere valido e un garbe casuale per essere non valido.
Test:
test 'valid attributes should be accepted'
for attr_name, meta in metadata:
u = User.new({ attr_name: meta['example'])
assert u.valid
u = User.new({ attr_name: random_garbage())
assert not u.valid
end
Le mie preoccupazioni
I primi commenti del mio supervisore sono stati che, sebbene non sia sbagliato, aggiunge un sovraccarico di manutenzione. Dal mio punto di vista è l'opposto visto che ti permette di avere un posto centrale per riutilizzare le cose. Tuttavia non sono così esperto, quindi non posso assolutamente discutere.
Sono abbastanza sicuro di non essere il primo a fare qualcosa del genere, ma come mai non si parla molto di questo nel selvaggio web? Ho trovato questo interessante articolo risalente al 2006 che mi ha davvero spaventato un po ': link
Quindi come fai a sapere se i metadati si trasformano in un sovraccarico o in realtà ti stanno aiutando? Perché non ci sono applicazioni in circolazione utilizzando un approccio più metadrivizzato per generare le cose al volo? Qualche storia di successo? Le applicazioni di metadriv in un contesto MVC sono un vantaggio o un onere?