architettura n-layer design, vale davvero la pena?

7

Stavo costruendo un'applicazione in .Net per quasi un anno (quasi da sola), ho preso la decisione di costruirla con un design a 3 strati. Recentemente, quando ho finito il progetto, ho analizzato se lo sforzo di creare questa applicazione con il design del layer in mente compensasse davvero i "benefici" ottenuti implementando tale design.

Uscire dall'applicazione desktop sul Web senza alcuna riscrittura del codice principale e essere praticamente indipendente dal database; Non vedo ulteriori benefici di questo.

Qualche esperienza e pensieri?

    
posta Rafael 06.01.2012 - 15:23
fonte

4 risposte

12

Se hai appena finito la tua applicazione, non hai visto i benefici di questo approccio. Troverai la maggior parte del vantaggio di farlo mentre inizi a apportare modifiche all'applicazione esistente. Pensa a quanto sarà facile spostare gli elementi nell'interfaccia utente mentre cambi l'applicazione. O quanto sarà facile per le prestazioni mettere a punto una parte specifica della funzionalità di archiviazione dei dati senza modificare alcun altro codice. È la separazione delle preoccupazioni che è importante nell'architettura n-tier. Imparerai molto da questa esperienza solo se continui a mantenere la base di codice. Tutti usano sempre gli esempi di "scrivere una nuova interfaccia utente" o "scambiare gli esempi del database". Questi casi sono rari, se non del tutto. Quello che succede è che dovrai aggiungere nuove funzionalità o modificare quelle esistenti. Questo è quando raccoglierai i vantaggi di avere le tue preoccupazioni separate in diversi livelli.

Con ciò che è stato detto. Un'applicazione n-tier appropriatamente scritta può essere altrettanto difficile da mantenere come una versione ad-hoc. Il punto chiave di n-tier è la separazione delle preoccupazioni. Devi esaminare tutti i metodi che scrivi e chiediti: quanto sarà facile modificare questa funzionalità esistente senza influire su altre parti dell'applicazione? Questo è il ragionamento alla base dello sviluppo di entrambi i livelli e di SaaS. Sono solo due versioni diverse della stessa cosa: separazione delle preoccupazioni .

    
risposta data 06.01.2012 - 16:27
fonte
10

Se la tua applicazione ha effettivamente questi livelli separati (presumo UI, BLL e DAL), quindi:

  • Puoi scrivere altre interfacce utente (desktop, dispositivi mobili) senza modifiche ad altri livelli
  • Puoi apportare modifiche al tuo BLL e non influire sull'interfaccia utente o sul DAL (e con diverse interfacce utente le modifiche avverranno automaticamente)
  • È possibile eseguire la migrazione in un archivio dati diverso senza dover modificare l'interfaccia utente o il BLL (quindi, sharding, NOSQL e clustering possono essere opzioni)
  • Testare ciascun livello in isolamento è molto più semplice

Se si dispone di una separazione di questo tipo, è possibile ridimensionare i diversi livelli separatamente (è necessario più potere sul bit dell'interfaccia utente) È possibile aggiungere un server Web alla farm Richiede più potenza DB? Shard, cluster o qualsiasi altra cosa ha senso, sebbene normalmente un tale cambiamento richieda di cambiare l'architettura).

Naturalmente, se hai sviluppato un sito che non ha bisogno di questa scala e non avrà bisogno di essere modificato nei modi di cui sopra, allora tale architettura può essere sopra l'ingegneria.

    
risposta data 06.01.2012 - 15:30
fonte
5

I livelli per il gusto di avere strati è un problema comune. Ho visto un numero di servizi e applicazioni che erano tecnicamente di livello superiore ma che erano molto colpevoli di violare principi come DRY, separazione di preoccupazioni e simili. Ad esempio, ho lavorato con le app con oltre 10 passaggi di creazione dell'oggetto tra l'interfaccia utente e il DB, oltre 30 DLL diverse con funzionalità ridondanti e così via.

Ora, c'è un enorme vantaggio se riesci a separare con successo le preoccupazioni ed evitare il codice ridondante, dipendente e contorto. Rende il programma più facile da testare, migliorare e mantenere. Sarebbe bello se questo fosse fatto più spesso piuttosto che strati di "livello settoriale carico".

    
risposta data 06.01.2012 - 16:47
fonte
3

I database vengono superati e i fornitori smettono di supportare le versioni precedenti. L'interfaccia utente è obsoleta (è molto difficile supportare la versione precedente di ASP / ASP.net). Ci sono nuovi requisiti per l'interfaccia utente in questi giorni con l'avvento degli smartphone. Se è necessario sostituire uno di questi, non si desidera sostituire tutta la logica aziendale. La logica di business è l'elemento che rischia di durare più a lungo (basti pensare alle applicazioni Cobol di 30 anni che sono ancora in esecuzione!). A un certo punto potresti anche voler orientare l'applicazione e questo sarà più facile se puoi accedere direttamente alla logica di business.

Inoltre, il layering lo rende molto più gestibile e scalabile, ma lo rende anche molto più logicamente strutturato e leggibile. Sai esattamente dove tutto deve andare, e quando torni a farlo, sai dov'è. Ad esempio, ho lavorato su molte applicazioni 'forms over stored procedure' (questa è un'alternativa comune a un'applicazione a più livelli) e trovo la logica aziendale sparsa tra l'interfaccia utente e le stored procedure. Se c'è un BLL, non ci sono scuse per essere in nessun altro posto oltre al BLL (OK, tranne in circostanze eccezionali).

Inoltre, discuto sul fatto che un'applicazione a livello n richiede veramente che molto più sforzo per svilupparsi? Credo che il sovraccarico di sviluppo sia ampiamente ripagato dalla manutenibilità.

Non tutte le applicazioni richiedono un'architettura a livello di n, ma immagino che qualsiasi cosa abbia richiesto un anno di sviluppo sarebbe.

    
risposta data 06.01.2012 - 15:45
fonte

Leggi altre domande sui tag