Qual è l'approccio corretto per passare i dati da diversi modelli a un servizio?

5

Ho un AccountModel e una pagina in cui l'utente può caricare un file. Quello che mi piacerebbe che succedesse è quando l'utente carica il file. Il PageController fa qualcosa di simile al seguente. questo è un rapido tentativo appena scritto nella domanda per illustrare la mia domanda.

public class PageController : Controller {
  private Service service;
      public ActionResult Upload(HttpPostedFileBase f){
         service.savefile(f,_AccountModel_whatever.currentlyloggedinuser.taxid)          }
}


public class Service
{
// abunch of validation and error checking to make sure the file is good to store
}

Questo approccio non sarebbe nella cattiva pratica? Dal momento che sto facendo dipendere il mio controller dall'esistenza di AccountModel? Questo diventerà un programma ENORME nei prossimi anni e desidero davvero massimizzare la qualità del framework ora.

    
posta MVCylon 24.05.2011 - 18:30
fonte

4 risposte

1

Un paio di angoli qui. In primo luogo, si potrebbe probabilmente passare il modello di account al proprio servizio come dipendenza del costruttore se viene effettivamente utilizzato ovunque. Usando qualsiasi framework IoC puoi facilmente eliminare queste dipendenze dal framework presumendo che sappia come idratarle.

In secondo luogo, in genere eviterei di arrotolare il mio modello di account, o almeno di scrivere codice su di esso. Nella maggior parte dei casi, IPrincipal e IIdentity fanno il lavoro per te e rendono il tuo modello di account molto flessibile.

    
risposta data 23.08.2011 - 13:07
fonte
0

È una cattiva pratica se c'è un caso in cui qualcuno potrebbe passare al caricamento di file senza essere loggato . In tal caso, ci sarebbe un'eccezione. Ma non vorresti che ce ne fosse uno? Suppongo che tu stia monitorando i file in base all'account, quindi altrimenti avresti problemi.

Fintanto che ti assicuri di riportare le persone con le sessioni scadute alla schermata di accesso, non vedo alcun problema oltre a quelle inerenti alle app web non statiche.

    
risposta data 24.05.2011 - 18:58
fonte
0

Potresti astrarre il modello di Conto avendo un'interfaccia che condivide con il controller, se sei preoccupato per i cambiamenti in AccountModel. Ma IMO, i modelli "di solito" non cambiano nel tempo (potrebbero aumentare progressivamente) a causa della solita dipendenza dallo storage sottostante: la migrazione dei dati in un sistema di produzione è un problema. Quindi potresti essere preoccupato prematuramente in questo caso.

Non vuoi un sistema con un'interfaccia per ogni interazione con il modello, prova e identifica i pezzi fluidi e li astragga da solo. In primo luogo, una buona visione del prodotto a lungo termine dovrebbe aiutarti ad arrivare ai mattoni giusti.

    
risposta data 25.05.2011 - 11:55
fonte
0

Il tuo AccountModel è un elemento principale di qualche tipo? In tal caso, farei in modo di implementare IPrincipal e seguire i normali schemi. Puoi quindi inserire il principal e lanciarlo per ottenere i dati di cui hai bisogno.

Se non lo è, puoi avere un AccountModelId in un campo modulo nascosto. Fai in modo che il tuo metodo di azione prenda un AccountModel. Un raccoglitore modello personalizzato può cercare questo ID e ritirare il tuo modello per te, se deve essere letto da un database o qualcosa del genere.

In ogni caso, sei in una buona posizione per essere in grado di testare il tuo controller mentre il modello AccountModel viene facilmente assegnato al controller.

    
risposta data 22.10.2011 - 14:55
fonte

Leggi altre domande sui tag