Ya saben que me gusta programar con modelos en memoria. Hace ya un tiempo (¿meses? ¿años?) empecé un projecto AjBase para hacer una base relacional en memoria, en C#. Para practicar TDD, decidí comenzar a implementarla de nuevo desde cero, y dejar documentado en video los primeros pasos. Luego de mostrar mi flujo de trabajo, seguiré en mi cuenta de GitHub. El video quedó en
http://www.youtube.com/watch?v=N7zCTVZiWfo&feature=youtu.be
[View:http://www.youtube.com/watch?v=N7zCTVZiWfo]
El código va quedando en:
https://github.com/ajlopez/SharpBase
Vean que no hice grandes decisiones de diseño por adelantado. Todavía no implementé lo que es una fila (Row) ni siquiera pensé en índices y cosas parecidas. Ni en los tipos de las columnas. Solamente fui implementando los primeros casos de uso de la API, con ejemplos sencillos: crear una base con nombre en memoria, ver que existe, etc. Puede que fuera de la lista de los primeros videos implemente algunos tests adicionales sencillos, quedando siempre la historia de commits por test en GitHub.
Uso directamente las facilidades de Visual Studio (Professional, Ultimate) de tests integrados con la IDE. Es bastante cómodo de usar, aunque si usan Visual Express deberán apelar a otro tipo de soluciones, como NUnit. Tendría que revisar cuanto soporte de test traen las versiones Express últimas.
Pero lo importante no es la herramienta: es el flujo de trabajo de escribir un test con un nuevo ejemplo de uso, implementar el mínimo o casi mínimo código que haga pasar el test a verde, refactorizar si es posible, volver a escribir el próximo test. No tenerle miedo a las refactorizaciones (cambios internos de implementación) o a los rediseños (cambios en la API expuesta por el código que estamos armando), Y también hay refactorización de código de tests. En general, es en los refactor donde van apareciendo lo que conocemos de programar “bien”, usando patrones, evitando la repetición de código, etc. En mi caso, trato de no diseñar mucho hacia adelante, y esa forma de trabajo me ha dado muchas satisfacciones en mis proyectos personales y profesionales.
Espero que se entienda el Anglish (Angel’s English) 馃檪
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
@ajlopez