Applicazione basata su meta e anti-pattern nel contesto MVC?

1

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?

    
posta Pithikos 08.07.2016 - 12:13
fonte

1 risposta

2

I sistemi basati su metadati personalizzati come questo hanno l'abitudine di trasformarsi nel tempo in pasticci non mantenibili. Il tuo supervisore ha ragione ad essere prudente riguardo all'approccio. Mentre possono essere utili (se attentamente progettati) possono anche finire con un ampio elenco di casi speciali aggiunti per gestire le strutture che sono necessarie per le singole operazioni su una base ad-hoc, e prima o poi diventano troppo difficili per chiunque ma un esperto con cui lavorare. Un esempio ampiamente discusso di questo tipo di sistema e dei problemi che causa è descritto in questo articolo . Leggi i commenti; ci sono un sacco di storie di guerra da persone che hanno avuto a che fare con questo tipo di sistema.

Un aforisma comune è il suggerimento che dovresti "fare la cosa più semplice che potrebbe funzionare" , che è sicuramente un'idea che si applica in questo caso.

    
risposta data 08.07.2016 - 13:03
fonte

Leggi altre domande sui tag