Motivo di progettazione per più condizioni e azioni nei WebForm eventi evento

0

Sto cercando di implementare qualsiasi modello valido in un'applicazione web ( asp.net 4.6.1 WebForms, Legacy , C #).

Ho una grande classe ( code-behind ) con un evento Click enorme . Voglio valutare eventuali condizioni ed eseguire i comandi (o azioni) e gestire gli errori per comunicare con l'interfaccia utente.

Non posso usare la transazione completa (i comandi-azioni coinvolgono modify ActiveDirectory, WCF WebServices calls, send emails and database updates ). Ogni comando può fallire, è richiesta la gestione degli errori e le notifiche all'interfaccia utente. Questo è un po 'un trucco.

Ho l'impressione che gran parte della logica può e dovrebbe trovarsi in una classe logica aziendale (o multipla) , con la comunicazione tra l'interfaccia utente limitata a una classe parametro utilizzata per passare parametri dall'interfaccia utente al back-end, mentre un'altra classe restituisce i risultati (successo / errore) e vari messaggi.

Forse, sarebbe un altro buon modello migliore per gestire il flusso utilizzando più condizioni e comandi e gestione degli errori per comunicare con l'interfaccia utente .

codice (frammento) per l'evento clic (senza gestione degli errori)

  if (ActionTypePage == ActionType.Modificacion || ActionTypePage == ActionType.MyDataM)
  {

            var password = DataPersonales.GenerarPassword();
            var personalData= fillDataPersonales(password);
            var userPortal = fillUserPortal();

            var isEmployer = userPortal.IsEmployerRoleAorRoleB();
            var existsInAD = ADOperations.ExistsUserInActiveDirectory(personalData.User);

            if (userPortal.IsEnabled.Value && isEmployer)
            {
                // 1a) If RoleA, RoleB (employer) NOT exists in AD ==> Error
                // 1b) If RoleA, RoleB (employer) exists in AD ==> Enable user in CRM (if false, Request New CRM)
                if (!existsInAD)
                {
                    var msg = String.Format("The employer {0:-10} no exists in ActiveDirectory", personalData.User);
                    var log = String.Format("User: {0, -15} - Error: {1:-100}", personalData.User, msg);
                    LoggerAD.Trace("[AdminDataUsers] - Update ERROR. ExistsUserInActiveDirectory. " + log);

                    ((NsiMaster)Master.Master.Master).ShowNotification(msg, CommunicationType.Error, true);
                    return;
                }

                // Enable in CRM (if false, Request New CRM)
                var okEnable = AdminManager.EnableUserEnCrm(personalData.User);
                if (!okEnable)
                {
                    var msg = "Cannot enable user in CRM. Please, do new Request CRM";
                    ((NsiMaster)Master.Master.Master).ShowNotification(msg, CommunicationType.Error, true);
                    return;
                }

            }

            if (userPortal.IsEnabled.Value && !isEmployer)
            {
                // 2a) If NOT RoleA, RoleB (not employeer) NOT exists in AD ==> Create in AD and Enable user in CRM (if false, Request New CRM)
                if (!existsInAD)
                {
                    var okToCreateInAD = (UserLogado.IsUserWithRoleMA() || UserLogado.IsEmployerRoleAorRoleB())
                        && !userPortal.IsEmployerRoleAorRoleB();

                    var okAD = false;
                    if (okToCreateInAD)
                    {
                        var msgStateAD= "";
                        okAD = ADOperations.AddUserInActiveDirectory(personalData.User, personalData.Password,
                            personalData.Name, personalData.Surname + " " + personalData.Surname2
                            , personalData.FullName
                            , isEmployer, UserConsultado.UserSystemAire, UserConsultado.CustomValue
                            , personalData.Email, personalData.Telephone, personalData.Mobile
                            , out msgEstadoAD);

                        if (!okAD)
                        {
                            var log = String.Format("User: {0, -15} - Error: {1:-100}", personalData.User, msgEstadoAD);
                            LoggerAD.Trace("[AdminDataUsers] - Update ERROR. AddUserInActiveDirectory. " + log);
                        }

                        if (okAD)
                        {
                            var log = String.Format("User: {0, -15} - Password: {1:-10}", personalData.User, PassManager.ShowPassword(personalData.Password));
                            LoggerAD.Trace("[AdminDataUsers] -  Update. AddUserInActiveDirectory. " + log);
                        }
                    }

                    // Enable in CRM (if false, Request New CRM)
                    var okEnable = AdminManager.EnableUserEnCrm(personalData.User);
                    if (!okEnable)
                    {
                         var msg = "Cannot enable user in CRM. Please, do new Request CRM";
                        ((NsiMaster)Master.Master.Master).ShowNotification(msg, CommunicationType.Error, true);
                        return;
                    }
                }

                // 2b) If NOT RoleA, RoleB (not employeer) exists in AD ==> Send Warning (Email) and Enable in CRM (if false, Request New CRM)
                if (existsInAD)
                {
                    //  Warning (Email)
                    AdminManager.SendEmailWarning(personalData.User);

                    // Enable in CRM (if false, Request New CRM)
                    var okEnable = AdminManager.EnableUserInCrm(personalData.User);
                    if (!okEnable)
                    {
                        var msg = "Cannot enable user in CRM. Please, do new Request CRM";
                        ((NsiMaster)Master.Master.Master).ShowNotification(msg, CommunicationType.Error, true);
                        return;
                    }
                }

            }


            // Disable
            // 1a) If RoleA, RoleB (employer) NOT exists in AD ==> Error
            // 1b) If RoleA, RoleB (employer) exists in AD ==> not Enable in CRM (Delete en CRM) and Delete License CRM 

            if (!userPortal.IsEnabled.Value && isEmployer)
            {
                if (!existsInAD)
                {
                    var msg = String.Format("The employer {0:-10} not exists in ActiveDirectory", personalData.User);
                    var log = String.Format("User: {0, -15} - Error: {1:-100}", personalData.User, msg);
                    LoggerAD.Trace("[AdminDataUsers] - Update ERROR. ExistsUserInActiveDirectory. " + log);

                    ((NsiMaster)Master.Master.Master).ShowNotification(msg, CommunicationType.Error, true);
                    return;
                }

                // Not Enable en CRM (Delete in CRM)
                AdminManager.DisablesUserInCrm(personalData.User);

                // Delete License CRM 
                AdminManager.DeleteUserCrmActive(personalData.User);
            }

            if (!userPortal.IsEnabled.Value && !isEmployer)
            {
                // 2a) If NOT RoleA, RoleB (not employeer) NOT exists in AD ==> Send Warning (Email) and Not Enable in CRM (Delete in CRM) - Delete License CRM 
                if (!existsInAD)
                {
                    // Send Warning (Email)
                    AdminManager.SendEmailWarning(personalData.User);

                   // Not Enable en CRM (Delete in CRM)
                   AdminManager.DisablesUserInCrm(personalData.User);

                   // Delete License CRM 
                   AdminManager.DeleteUserCrmActive(personalData.User);
                }

                // 2b) If NOT RoleA, RoleB (not employeer) exists in AD ==> Delete in AD and Not Enable in CRM (Delete in CRM) - Delete License CRM 
                if (!existsInAD)
                {
                    // Delete in AD
                    var res = ADOperations.DeleteUserInActiveDirectory(personalData.User);

                    // Not Enable en CRM (Delete in CRM)
                    AdminManager.DisablesUserInCrm(personalData.User);

                    // Delete License CRM 
                    AdminManager.DeleteUserCrmActive(personalData.User);
                }
    }

Qualche suggerimento per il refactoring, non l'odore del codice, magari anche con la gestione degli errori?

    
posta Kiquenet 01.08.2016 - 09:41
fonte

0 risposte

Leggi altre domande sui tag