Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16

Discussione: Verifica su riga vuota

  1. #11
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    OK la tua affermazione mi è chiara, allora potresti spiegarmi la logica corretta per strutturare un'applicazione ntier usando i dataset tipizzati.

    Effettivamente i DStipizzati semplificano la vita e strutturano già il DAL, ma volendo eseguire una semplice query (come nel mio caso precedente), che soluzione (strutturata in 3tier) potrei usare?

    Grazie

  2. #12
    L'utilizzo di dataset tipizzati per realizzare una architettura a 3 livelli e' solo una delle possibilita'. Nessuno ti vieta di mettere nella BLL una funzione es. ValidateUser(string _user, string _pass) che utilizza a sua volta una funzione nel DAL che non fa altro che fare una query senza scomodare alcun dataset tipizzato. Ed eccoti i 3 livelli.
    Questo in generale. Nel caso specifico visto che si parla di autenticazione (e di conseguenza poi arrivano anche le autorizzazioni) non mi sognerei mai di non utilizzare il sistema che asp.net e il framework 2.0 mettono a disposizione gia' pronto da usare e personalizzabile con eventuali basi dati preesistenti. Piuttosto che avventurarmi in un sistema custom diverso dallo standard, preferirei studiare la form autentication, l'oggetto login, l'utilizzo dei membershipprovider e membership user ecc.
    Saluti a tutti
    Riccardo

  3. #13
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    Ok, per cortesia dimentichiamo l'autenticazione di .NET 2.0, sto parlando in generale e non del caso specifico dell'autenticazione; ovvero vorrei capire come strutturare correttamente una logica ntier utilizzando i dataset tipizzati (anche se ci sono altre soluzioni, ora sto usando questa e vorrei capire come organizzarla al meglio).

    Quindi, se mi trovo a dover gestire una elenco di records (es. per un datagrid) è semplice usare un dataset tipizzato, ma nei casi particolari nei quali devo lavorare sui singoli dati, come posso strutturare al meglio l'applicazione per separare bene i livelli, ora posto la soluzione che ho adottato e sono consapevole che:

    1) fa pena
    2) non c'è nessuna separazione dei livelli


    Qualcuno potrebbe darmi dei suggerimenti per come gestire al meglio la mia situazione?? Ho trovato su ASP.NET esempi di gestione di DS tipizzati e ntier, ma quanto poi devo calare l'esempio nella mia situazione specifica mi blocco sempre, in questo caso, al contrario, vorrei partire dal problema (quindi il mio pezzo di codice) e capire come gestire al meglio gli ntier.

    Codice PHP:

        
    protected void btnAccedi_Click(object senderEventArgs e)
        {
            
    dbm dbConnection.OpenDB();
            
    dbm.DatabaseDisconnesso tblUtenti;
            
    //Vengono caricati i dati nel DataSet
            
    qrySelect "SELECT * FROM utenti";
            
    dbm.CaricaTabella(tblUtenti.webutentiqrySelecttrue);
            
    tblUtenti.webutenti.DefaultView.RowFilter string.Format("login ='{0}' and password ='{1}'"tbAccessoLogin.TexttbAccessoPassword.Text);
            if (
    tblUtenti.webutenti.DefaultView.Count == 1
            { 
                
    //Utente trovato, viene istanziata la classe User
                
    DataRow r tblUtenti.webutenti[0];
                
    user dbConnection.LoadUserInfo(r["ID"].ToString());
            } 
            else 
            { 
                
    //Utente non trovato 
                
    lblLogin.Text "Accesso non consentito...";
            }       
        } 
    Grazie ancora

  4. #14
    Nel codice che hai indicato non ci sono ntier ma e' tutto mischiato nell'interfaccia utente. Peraltro visto che non muore nessuno anche se non si fanno ntier, almeno pero' separa la logica dall'evento click del pulsante. Mettila in una funzione separata e richiamala dall'evento click cosi se un domani volessi mettere sotto test quella procedura o riutilizzarla da un altra parte lo potrai fare.
    Aggiungo che il dataset non sembra essere tipizzato o almeno tu non lo usi come tale.
    Un dataset tipizzato invece di costringerti a fare cosi
    r["ID"].ToString()
    ti avrebbe permesso di fare cosi
    r.ID
    altrimenti dove il bello della tipizzazione?
    Poi stai usando degli oggetti custom che hanno funzioni particolari tipo CaricaTabella o LoadUserInfo o OpenDB ecc. quindi e' un po difficile poterti aiutare senza conoscere cosa c'e' dietro. Un consiglio che posso darti e', se proprio vuoi usare i dataset tipizzati, di (re)iniziare approfondendo l'uso del tableadapter, degli objectdatasource e, naturalmente, dell'autenticazione di asp.net 2.0
    Saluti a tutti
    Riccardo

  5. #15
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    3,072
    Grazie mille per tutti i suggerimenti, sicuramente approfondirò gli argomenti relativi ai dataset tipizzati (sto già leggendo del materiale a riguardo)

    Sul fatto che non è presente alcuna gestione ntier hai pienamente ragione... ma volendo gestirla almeno un minimo... spostando ad esempio le query ecc.... come potrei fare?

    Grazie

  6. #16
    Originariamente inviato da Valeria75_bis
    ...spostando ad esempio le query ecc.... come potrei fare?
    come dicevo e' difficile riorganizzare un codice dove sono presenti delle "scatole nere" che poco hanno a che vedere con uno standard applicativo es. l'oggetto dbm o dbconnection ecc.
    Se e' solo per separare l'evento click dalla procedura senza toccare nient'altro, non considerando eventuali problemi di sicurezza o di gestione di eccezioni uno spunto potrebbe essere

    codice:
    protected void btnAccedi_Click(object sender, EventArgs e) 
        {         
            if (CheckUser(tbAccessoLogin.Text, tbAccessoPassword.Text) != null) 
            { 
                //Utente trovato 
            } 
            else 
            { 
                //Utente non trovato 
                lblLogin.Text = "Accesso non consentito..."; 
            }        
        }
    
    public User CheckUser(string _username, string _pass)
    {
    user = null;
    dbm = dbConnection.OpenDB(); 
            dbm.DatabaseDisconnesso = tblUtenti; 
            //Vengono caricati i dati nel DataSet 
            qrySelect = "SELECT * FROM utenti"; 
            dbm.CaricaTabella(tblUtenti.webutenti, qrySelect, true); 
            tblUtenti.webutenti.DefaultView.RowFilter = string.Format("login ='{0}' and password ='{1}'", _username, _pass); 
            if (tblUtenti.webutenti.DefaultView.Count == 1) 
            { 
                //Utente trovato, viene istanziata la classe User 
                DataRow r = tblUtenti.webutenti[0]; 
                user = dbConnection.LoadUserInfo(r["ID"].ToString()); 
            } 
    return user;
    }
    Saluti a tutti
    Riccardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.