Ver por etiquetas

Patrón repetido en MVC. Mi propuesta
Cuando usamos ASP.MVC uno de los patrones que debemos respetar es el de “Un modelo entra, un modelo sale” y otro muy común es el de validar el modelo y si este no es válido devolverle la misma vista al usuario para que corrija los datos de entrada. Por esto es común ver el siguiente patrón: ¿Qué está mal aquí? ¿Lo ves? Lo que está mal es que este patrón se repite en cada una de las acciones de cada uno de los controladores de cada una de las aplicaciones que hacemos con MVC Framework y eso huele...
Código libre de NULLs
En este video explico los problemas que causan las referencias nulas en nuestro código y planteo cómo debemos crear un código libre de NULLs.
Refactoring–Extract Method para separar validaciones de operaciones
Existen casos en los que es conveniente extraer un bloque de código en un nuevo método por razones de validaciones de entrada. Es decir, queremos sepaar el código de validaciones de entradas del código que realiza propiamente las operaciones con estas. En algunos casos esto además puede traernos algunos beneficios de performance. Esto es más claro en los métodos recursivos. Para ilustrar esto pongamos como ejemplo al clásico método que calcula el Factorial de N de manera recursiva: Aquí el problema...
[Video] Serie sobre excepciones–El rol de las interfaces
Esta es seguramente la última entrada sobre excepciones en la que explico el rol de la interfaces (con el usuario u otro tipo de clientes) en la captura, tratamiento y traducción de las excepciones.
Excepciones – Un caso sobre los ejemplos del MSDN
Soy un convencido de que muchos de los malentendidos que existen en cuanto al manejo de excepciones en VB.Net y C# es por culpa de los malos ejemplos que siempre ha tenido el MSDN. Con solo invertir un par de segundos en google uno puede encontrar verdaderas aberraciones.. A modo de ejemplo solo pondré dos links y las capturas: http://msdn.microsoft.com/en-us/library/system.net.dns.resolve(v=vs.110).aspx   Si Bien es cierto que los ejemplos han mejorado muchísimo, porque años antes eran un desastre...
Creando un sistema de indexación para nuestros datos no estructurados en Sql
Introducción Existen ocasiones en las que almacenar y organizar nuestros datos en una estructura tabular puede no ser lo ideal, en las que por conveniencia queramos guardar un conjunto de datos fuertemente relacionados en un sencillo xml pero a la vez necesitemos muchas de las características propias de SQL. Si bien SQL Server nos permite guardar XML (con o sin esquema asociado) e indexarlo, estos índices son muchas veces demasiado grandes y algo lentos y, aunque funcionan obviamente muy bien, podríamos...
[Video] Serie sobre excepciones–Donde capturarlas
Les dejo la tercera entrega de la serie sobre excepciones. Saludos
Retoques a MVC y Razor para proyectos grandes–Una recomendación
Luego de revisar los requerimientos de la aplicación en la que vengo trabajado estos últimos 6 meses,  tuve que pensar cómo plantear la arquitectura de la misma teniendo en cuenta lo siguiente: La aplicación es muy muy muy grande, eso era lo primero que saltaba a la vista en los requerimientos. Al día de hoy, esta cuenta con 1.119 vistas, 797 controladores y un número similar de modelos, entre otras cosas. El equipo iba a ser grande y la idea era que trabajaran lo más focalizados posible en...
[Video] Serie sobre excepciones–Exceptions vs ErrorCodes
Les dejo el primero de una serie de videos sobre excepciones que estoy creando para el equipo de desarrollo al que pertenezco. Espero les guste. Saludos
Por qué no me gustan las plantillas T4
A mi anterior entrada la titulé “Las plantillas T4 son basura” cosa que respondió más a mi estado de bronca contra éstas que a su verdadero valor como herramienta. Muchos me preguntaron sobre el por qué de tal calificación y la verdad es que ese por qué es demasiado largo de explicar pero voy a mostrar la punta del ovillo para que a quien le interese pueda descubrirlo por sí solo. Veamos un par de ejemplo muy sencillos, el primero...
¿Lo que huele mal es la inyección de dependencias?
En mi anterior entrada mostraba distintas alternativas que podíamos utilizar para volver al siguiente fragmento de código fácilmente testeable. Obviamente existe una infinidad de alternativas que no he abordado como los frameworks de aislamiento, los servidores de smtp que no envían los mails y muchas más. La idea aquí  es mostrar el por qué este código no es un duro de testear. Obviamente es porque tiene una dependencia con la clase SmtpClient la cual se comunica mediante un socket con el ambiente...
¿Vale la pena crear pruebas unitarias?
La creación de pruebas unitarias requiere al menos lo siguiente: Un framework de pruebas unitarias que debemos dominar. Por lo general son muy simples. Código testeable. Típicamente esto implica código susceptible de ser “aislado”. Nada que decir con respecto al primer punto. Ahora, en cuanto al segundo punto, ¿qué significa que el código pueda ser “aislado”?. Bueno, esto significa que sus dependencias deben poder ser reemplazadas. Esto lo logramos bien por medio de inyectarle sus dependencias o...
Ruidos y señales en nuestra industria
Voy a tomar prestado las palabras señal y ruido del campo de las telecomunicaciones para explicar una situación que nos afecta de cerca. Entendamos la palabra señal , en el contexto de esta entrada, como el mensaje, lo importante, lo esencial y como ruido lo indeseable, lo molesto, lo que encarece y entorpece al mensaje. La señal, o el mensaje en este caso, que deseamos transmitir, por lo general todos los que hemos estado en esto durante algún tiempo (y que nos hemos equivocado terriblemente una...
Sobre los frameworks de BDD
BDD como idea original me parece correctísima. No obstante, la mayoría de los frameworks para llevar sus conceptos a cabo en C# me parecen ridículos. Veamos una misma prueba de ejemplo escrita de dos maneras: Alternativa 1: [Subject( typeof (Account), "Funds tranfer" )] public class When_transferring_between_two_accounts { static Account fromAccount; static Account toAccount; Establish context = () => { fromAccount = new Account { Balance = 1m }; toAccount = new Account { Balance = 1m...
Otro ejemplo de DSL en el mundo real
Desarrollo un sistema para la planificación, ejecución y seguimiento de encuestas en el que uno de los requerimientos es poder crear encuestas de manera sencilla y veloz. Además las mismas deben seguir un workflow (algo informal) de revisión. Otro dato importante es que el cliente diseña encuestas que van desde aquellas con solo algunas pocas preguntas hasta esas otras que nos tienen todo un domingo respondiendo acerca de alguna ginebra o algún nuevo centro comercial. Para rematar debo decir que...
Cuán cortas y cuan claras deben ser las pruebas unitarias?
Las pruebas unitarias debería ser así de cortas y claras: using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; using Losoft.Temo.Security.Authorization.Exceptions; namespace Losoft.Temo.Security.Authorization.Tests { [TestFixture] public class AdminGroupSpecs : TestsWithSecurable { [TestCase( "R" ), TestCase( "W" ), TestCase( "V" ), TestCase( "A" )] public void Will_Allow_All_Operation_To_Admin_Accounts...
Escalando DSL internos
En mi entrada Fluent Interfaces y TDD presentaba una prueba de concepto sobre un DSL interno que estaba desarrollando para encapsular varios detalles de la manipulación de documentos en el proyecto en el que trabajo actualmente. Luego de avanzar un tanto me doy con un problema muy común en la mayoría de las interfaces fluidas que he visto, a este patrón lo llamo sentencia única . Esto significa que una sentencia de un dsl interno no interactúa con otras del mismo. Veamos un ejemplo: Dh.Using.AnimalControl...
Qué debemos considerar antes de crear nuestro DSL
Hoy todos reconocemos el potencial que tiene (LOP) Language Oriented Programming, pero no solo eso sino que muchos ya están invirtiendo para hacerse con las ventajas prometidas por este paradigma(?). Muchos incluso diseñan la sintaxis de aquellos lenguajes que entienden, pueden hacerles alcanzar la productividad, calidad y mantenibilidad que buscan. Ahora bien, una vez decididos a crear el lenguaje (textual) propio para un dominio particular, hay que implementarlo. Aquí es donde deben estudiarse...
Como refactorizar métodos estáticos
Imagina que encontramos un clase estática con varios métodos estáticos los cuales tienen una cantidad aberrante de parámetros. Queremos eliminarla pero nos damos con que está siendo usada en muchísimas partes ¿que hacemos? ¿Como lo harias vos?. Para hablar más concretamente veamos uno de esos métodos: public static void CreateActivityLog( string containerSourceId, string containerId, string action, string sourceId, string instanceId, string docNo, string notes, IFrameworkSecurityContext credentials...
Fluent Interfaces y TDD
Desarrollar con TDD al principio no es nada fácil pero luego se vuelve “la manera” de desarrollar. Ahora, no siempre hago TDD, si quiero probar algo tan solo tiro las lineas y listo pero, por otro lado, si quiero hacer algo bien por más que tenga algo de código hecho lo tiro y lo comienzo de nuevo con TDD (nunca he perdido mucho. Por el contrario, lo hago porque veo una diferencia). El asunto es que diseñé una interface fluida para encapsular todos los detalles indeseables de la manipulación de documentos...
Más artículos Página siguiente >