No dia a dia de arquiteto, percebo a imensa redundância de código, pois os programadores de modo geral possuem uma imensa dificuldade para identificar quem é responsável pela funcionalidade. Os desenvolvedores, em geral, estão preocupados em colocar seus códigos para funcionar custe o que custar. Enxergando essa dificuldade, resolvi a partir de um Cenário para demonstrar a aplicação correta de um código que foi feito de forma redundante, por estar fora de sua governança. O exemplo é meramente ilustrativo e utilizei uma funcionalidade básica que sempre esta fora de governança em nossos códigos.
Cenário:
Em nosso sistema possuimos Mensagens (Alert, Dialogs) disparados utilizando o mesmo padrão, mudando apenas a mensagem e possivelmente um redirect ou não.
Solução Senso Comum:
O desenvolvedor chama uma rotina que dispara a Mensagem na tela e a coloca dentro de cada formulario web, assim tendo que replicar o mesmo código a cada novo formulario.
Exemplo de codigo:
ScriptManager.RegisterStartupScript(page, page.GetType(), identificador, "alert('Alteração realizada com sucesso');", true);
Problema da implementação:
Em uma eventual alteração, por exemplo de javascript para jquery, teríamos que ir formulário à formulário implementando a alteração, além de dar a responsabilidade de alerta a cada formulário e não ao conjunto de formulários nesse caso a implementação esta errada pois esta fora de sua governança, pois quem deveria possuir tal método seria uma classe responsável pelas funcionalidades que pode ser usadas por qualquer formulário.
Solução:
A solução para o problema é a criação de uma classe que será delegada a responsabilidade de disponibilizar as funcionalidade que podem ser usadas de forma genérica pelos formulários. E nela colocaremos o nosso código.
public static class FormularioFuncionalidades { public static void Alert(Page page, string mensagem, string identificador) { string strScript = "alert('" + mensagem + "')"; ScriptManager.RegisterStartupScript(page, page.GetType(), identificador, strScript, true); } }Em nossos formulários web chamaríamos o alert dessa maneira:
FormularioFuncionalidades.Alert(page, "Atualização efetuada com sucesso.", href, "OK2");Vantagens:
Respeitaremos o principio SOLID, assim em caso de alteração teremos que faze-la em apenas 1 unico lugar. Por exemplo imagine que agora queremos implementar um redirect e que a Mensagem seja disparada utilizando Jquery UI, nesse caso seria facil em nosso medoto Alert fariamos as alterações abaixo e já estaria replicado para todo formulario que estivesse chamando o Alert.
public static void Alert(Page page, string mensagem, string href, string identificador) { page.Controls.Add(PreparaMensagem(mensagem)); ScriptManager.RegisterStartupScript(page, page.GetType(), identificador, PreparaScript(href), true); } private static string PreparaScript(string href) { string strScript = string.Format("$(document).ready(function () {" + "$('#dialog').dialog({" + " modal: true," + " width: 400," + " show: 'drop'," + " hide: 'drop'," + " resizable: false," + " buttons: {" + " Ok: function () {" + " $(this).dialog('close');" + " }" + " }" + "}).bind('dialogclose', " + " function(event, ui) " + " { {0}" + " }" + ");;" + "});", (string.IsNullOrEmpty("")) ? "" : "window.location.href = '" + href + "'; "); return strScript; } private static Literal PreparaMensagem(string mensagem) { return new Literal() { Text = String.Format("", mensagem) }; }{0}
Nenhum comentário:
Postar um comentário