Modi di sviluppo per piccoli sistemi. Cosa è opportuno?

1

Sto sviluppando un piccolo sistema per l'automazione interna. Io uso i webform di asp.net e di fronte a una scelta:

  1. sviluppa un'architettura di sistema in uno stile orientato agli oggetti (lo sviluppo diventa più difficile e richiede molto tempo)

    o

  2. inserisci i controlli nei moduli e scrivi query sql nei gestori di controllo (sviluppo ad alta velocità, complessità dei test)

Сurrently sto usando il primo metodo, ma ho iniziato a dubitare che la mia scelta sia corretta. In che modo è opportuno?

    
posta Igor Chemidov 12.12.2013 - 02:33
fonte

3 risposte

6

Flessibilità vs. formalismo

Esiste un continuum tra progetti che non richiedono qualità (ad esempio prototipi) e quelli che richiedono la massima qualità possibile (ad esempio sistemi critici per la vita).

Sullatosinistro,iprototipihannounoeunsoloobiettivo:esseresviluppatirapidamentepermostrarequalcosa,poibuttativia.Qui,scrivereuncodicediqualitàoseguireglistandardnonèilpunto.Ilcodiceèscrittounavoltaemailetto.L'elevatonumerodibugèaccettabile.

Sullatodestro,isistemicriticiperlavitarichiedonoestremacautelainterminidiaffidabilità,ilchesignificachedevonoessereutilizzatealcunetecnicheparticolarmentecostose,comelaprovaformale.Qui,unbugpuòcausareunincidenteaereoounafusionediunacentralenucleare,ilcherendeestremamenteimportanteessereilpiùvicinopossibileallaperfezione.

Quandosipassadaunprototipoaunsistemavitale,diventanosemprepiùtecnichenecessarieperridurrelespeseamedio/lungotermineogarantireunasortadiconformitàrichiestadaun'autorità.Questetecnichehannouncosto:aumentanoilcostoabreveterminedelprodotto.Questetecnicheincludonomanonsonolimitatea:

  • Testdelsoftware,
  • recensioniinformalieformalidelcodice,
  • Convenzionidicodifica,
  • Conformitàaglistandard,
  • Documentazioneformale,
  • Analisidelcodicestatico,
  • ecc.

Individuazionediunprogetto

Dov'èiltuoprogettosuquestocontinuum?Sesitrattadiunprogettothrow-awayabrevetermine,bastamettereicontrollisuimoduli,spedireinanticipoedimenticarsene.Seèunprogettochehailpotenzialediesseremantenutodadiversisviluppatorinelcorsodeglianni,allorarendilopulito:ituoisuccessori(otestessopochimesidopo)tiringrazieranno.

Cisonomoltifattorichepossonoaiutareadeterminarelaposizionedelprogetto:

  • Cisonomoltisviluppatorichelavoranosuunprogettoosolouno?
  • Laconformitàallenormepreciseèrichiesta(pensatealsoftwarerelativoallacontabilità,adesempio)?
  • Ilprogettoèrealizzatoperesseremantenutoperanniorapidamentesostituitodaunaltrosistema?Notachec'èunpregiudizioversounaduratalimitata:alcuniprogettisonostatipensatiperviverealmassimodue-treanni,eventiotrent'annidopo,sonoancoraattivi.
  • L'affidabilitàèrichiesta?Un'appWebperusopersonalepotrebbebloccarsifrequentemente;anessunoimportaUnsistemaaziendalechegestisceognitransazionediogniclientecauseràmoltipiùproblemisesibloccaditantointanto.
  • Quantepersoneutilizzerannoilprodotto?
  • ecc.

Senonsaidovemettereiltuoprodottonelcontinuum,chiedialtuocliente.Assicuratichesiascrittoinuncontratto(hoavutoclientichehannochiestodiconsegnareASAPunprototipo,quindisonorimastodavverosorpresodalfattochenonsaràmantenutosenzariscrivere,nonostantesiastatoinformatoviae-maildall'inizio).Senessunolosa,applicaYAGNI:fallocomesefosseunprototipo,masiiprontoperiniziaredazeroseilprogettosembraessereunbuoncandidatodamantenereperanni.

Paradigmieprocessi

Senonriesciaspedirecostantementeunprodottoinanticipo,potrestipensaredicambiare:

  • Oiparadigmicheusi.Adesempio,dailinguaggidiprogrammazionestaticiaquellidinamici,cheoffronospessomaggioreflessibilitàevelocitàdisviluppoperleappWeb,senzacomprometterelaqualitàdelcodice.

  • Oiprocessi.Adesempio,Agileconsentedispedireprodottidilavoroinanticipo,quindidimigliorarlicontinuamente,ilchesignificachehaisialosviluppoadaltavelocitàcheilcodicediqualitàinsieme.

Perrisponderealladomanda...

Perrisponderedefinitivamentealladomanda:

  1. Parlidiun"piccolo sistema per l'automazione interna". Sembra che tu non abbia bisogno di una qualità estrema. Ma ancora, stai attento; non vuoi spedire qualcosa di brutto, quindi mantenerlo per anni. Se è davvero piccolo, cosa ne pensi di dedicare qualche giorno alla creazione di un prototipo e, in caso affermativo, crea l'app reale?

  2. ASP.NET? Perché non un linguaggio dinamico, come Python? Con Django, è un candidato eccellente per un'applicazione web che dovrebbe essere fatto rapidamente e sarà probabilmente molto più pulito rispetto a ASP.NET con query SQL nei moduli.

risposta data 12.12.2013 - 08:46
fonte
0

Ehy se inizi a programmare mettendo le cose qua e là il tuo progetto diventa un casino! Segui il metodo numero 1, come stai facendo ora, pagherà più tardi.

Considera che un sistema di automazione, per quanto piccolo possa essere, deve garantire un servizio affidabile e conveniente per un periodo medio-lungo.

Se non usi una buona struttura e poi devi fare manutenzione in 2-3 anni sarai grato a te stesso se strutturi il progetto / implementazione in un modo molto migliore, organizzato e coerente.

Anche l'aggiornamento del sistema sarà più semplice, se continui con l'approccio 1 e hai anche il grande vantaggio di poter riciclare del codice per altri progetti se i componenti sono ben progettati.

    
risposta data 12.12.2013 - 08:09
fonte
0

Questa domanda non è veramente risolvibile senza che noi sappiamo praticamente tutto sulla tua organizzazione, ma qui ci sono comunque alcuni suggerimenti.

Non ascoltare ciecamente il consiglio che ogni riga di codice che scrivi deve essere perfettamente astratta e stratificata, SOPRATTUTTO per i nuovi sistemi. Se prendi i tuoi requisiti iniziali e crei un'app astratta e perfettamente strutturata, cosa farai 6 settimane dopo la distribuzione quando l'utente tornerà e dirà "Oh, sai, quello di cui abbiamo effettivamente bisogno non è" x ", è" y'." Si lamenterà e si lamenterà, e alcuni programmatori cercheranno effettivamente di convincere l'utente che si sbagliano riguardo al nuovo requisito. Tutto perché hai una grande architettura in cui sei investito e non vuoi strappare tutto.

A volte il cambiamento che ritorna dopo la distribuzione è minore, o forse hai capito abbastanza il dominio per anticiparlo durante la fase di progettazione, ma questo non sempre si verifica. Il cambiamento potrebbe aggirarsi in qualche nuovo dominio con cui non hai esperienza. In tal caso, è praticamente impossibile che i tuoi modelli esistenti possano essere semplicemente aggiunti, dovrai strappare, cambiare e trasformare un sacco di codice.

Il mio consiglio è sempre quello per il NUOVO software ("hey, puoi dare ai venditori un database per i contatti?"), dovresti SEMPRE creare un prototipo funzionante nel modo più rapido / semplice possibile. Le forme web con origini dati SQL proprio lì nel markup sono PERFETTAMENTE FINE per questa fase di prototipo. Diavolo, sei sicuro di aver bisogno di un vero database? Ora puoi fare molto con NoSQL o semplicemente oggetti serializzati su disco, ed è molto più veloce da sviluppare rispetto alla codifica per riempire le tabelle SQL. Utilizza un framework UI come Twitter Bootstrap per ridurre il tempo dell'interfaccia utente. Cerca in Entity Framework per accelerare l'accesso ai dati, se hai veramente bisogno di scrivere su un database relazionale dal primo giorno.

Assicurati solo di comunicare che "fatto e schierato" significa "Devo ancora tornare tra 2 mesi e ottimizzarlo". Inserisci questi dati nella tua stima e quando questi cambiamenti successivi alla distribuzione tornano, aggiungi solo il tempo extra necessario.

A seconda del livello di modifica che ritorna dopo la prima distribuzione, dovrai decidere a che punto sei diventato sicuro che "davvero" sappia che il sistema è stabile e quindi prenditi il tempo necessario per rompere le cose fuori in strati appropriati. L'ottimizzazione prematura è la radice di molti problemi e, a mio avviso, l'astrazione e la stratificazione premature cadono in "ottimizzazione". Buona fortuna!

    
risposta data 12.12.2013 - 15:53
fonte

Leggi altre domande sui tag