En nuestro día a día como desarrolladores, raro es el caso en el que no nos enfrentamos a una aplicación o a un módulo en el que tenemos que leer un fichero de configuración. Hay varias técnicas para su tratamiento, como el guardar sus datos en una clase estática, en un singletón, etc., el caso es que los valores del fichero de configuración estén accesibles en todo el proyecto. Esto no es una norma escrita, pero suele ser muy común.
Mostrando entradas con la etiqueta Español. Mostrar todas las entradas
Mostrando entradas con la etiqueta Español. Mostrar todas las entradas
martes, 23 de enero de 2018
App.Config Autoreader
En nuestro día a día como desarrolladores, raro es el caso en el que no nos enfrentamos a una aplicación o a un módulo en el que tenemos que leer un fichero de configuración. Hay varias técnicas para su tratamiento, como el guardar sus datos en una clase estática, en un singletón, etc., el caso es que los valores del fichero de configuración estén accesibles en todo el proyecto. Esto no es una norma escrita, pero suele ser muy común.
lunes, 1 de enero de 2018
Construyendo un Entity Framewor Generic Repository Conectado
Hace unas semanas, entramos en contacto con el primero de
nuestros Repositorios
Genéricos de Entity Framework, los de tipo desconectado. En esta segunda
entrega vamos a abordar el segundo tipo disponible por características y uso,
este es otro el llamado tipo conectado.
En esta nueva clase de repositorio genérico, aparece una actor fundamental que no es otro
que ObservableCollection<T>,
amigo inseparable de nuestro tipo conectado.
domingo, 26 de noviembre de 2017
Construyendo un Entity Framewor Generic Repository Desc
El patrón Repository, separa la lógica de devolución de
información de la base de datos, de la capa de la lógica de negocio. Cuando
optamos por este tipo de patrón, creamos un Repository por cada una de nuestras
entidades de negocio, que comúnmente suelen ser cada una de las tablas de
nuestra base de datos.
viernes, 23 de junio de 2017
Notificaciones WPF para todos
En los tiempos que corren, todos los sistemas operativos e
incluso los navegadores, contienen un sistema de notificaciones. Esta es una característica
muy práctica y nos habilita la posibilidad de tener aplicaciones 100%
conectadas y 100% vivas. Con las notificaciones, podemos tener información
referente a otras aplicaciones de nuestro entorno, a usuarios, errores, etc.,
en el mismo momento en el que ocurren.
miércoles, 24 de mayo de 2017
MVVM Auto ViewModelLocator
Este post está dedicado a presentar un pequeño truco
referente a la instanciación automática de ViewModels
dentro del patrón MVVM.
En ocasiones, cuando trabajamos con pequeñas soluciones, no
necesitamos la presencia de la clase ViewModelLocator
como instanciador de clases ViewModels,
porque normalmente no necesitamos guardar ninguna referencia a ninguna de
ellas. En las siguientes líneas, aprenderemos a instanciar de forma automática
nuestras clases ViewModel, sin tener
que preocuparnos en registrarlas y crear propiedades de uso dentro de nuestro ViewModelLocator class.
jueves, 11 de mayo de 2017
Dapper Generic Repository
Dapper es un micro ORM realizado para Microsoft .NET Framework. Este proporciona una serie de
acciones para mapear nuestros objetos POCO a bases de datos Relacionales.
Fue desarrollado por el equipo de StackExchange para sus webs (StackOverflow, Mathematics,
etc), ya que la tecnología que utilizaban Linq To Sql no les proporcionaba un
rendimiento óptimo en su desempeño de acceso a datos.
sábado, 22 de abril de 2017
Linq Extended Joins
Hace unos años leí un artículo de C. L. Moffatt (link), donde se explicaba de forma clara y concisa los diferentes tipos de joins en SQL, y tomé la idea de escribir un artículo similar pero enfocado a LinQ, ya que había visto en muchas ocasiones muchas preguntas en foros dirigidas a este tema, pero no he encontrado ninguna en la que aune todos y cada uno de los casos.
Espero dar algo de luz con las líneas que siguen.
lunes, 10 de abril de 2017
Visual Studio Collection Visualizers
Hace tiempo, varios años atrás, estuve desarrollando un
programa en .NET, la cual contenía una gran cantidad de comparaciones
entre secuencias. El tamaño de estas colecciones eran bastante grandes y el
debugeo y la comprobación de los resultados se convertía en un infierno el
navegar entre los treeviews de resultados.
Decidí construir una dll
que me permitiera poder visualizar las secuencias y los filtrados y las
comparaciones entre ellos. Un tiempo después lo actualicé a un visualizer, simplificaba bastante el
trabajo. Ya que el resultado fue bastante satisfactorio, hoy lo comparto con
todos vosotros.
martes, 4 de abril de 2017
System.Diagnostics Acciones Útiles
jueves, 23 de febrero de 2017
WPF Copy/Paste Excel Fácil
He desarrollado una forma sencilla de copy y pegar
datos entre Excel y una aplicación WPF. Este código es compatible con
controles que heredan de System.Windows.Control.ItemsControls,
ósea que poseen la propiedad ItemsSource.
Algunos de estos controles son DataGrid, ListBox, ListView, etc.
Es de código abierto y su código está en GitHub.
Su uso es extremadamente sencillo y se puede instalar fácilmente
desde nuget.
Una vez instalado simplemente configuraremos un import en el XAML y unas
AttachProperties
en el control en cuestión.
jueves, 9 de febrero de 2017
WPF SearchAll Control (básico)
SearchAll es un control de WPF que realiza de filtrados
de manera extremadamente sencilla. SearchAll reduce el tiempo y el esfuerzo y
posee una interfaz muy amigable y cuidada. Este control está basado en el
control de búsqueda de la página de formación Pluralsight, con la diferencia de que SearchAll es válido para cualquier
tipo de datos, ya que es un control completamente genérico.
Vamos a ver todas sus bondades.
viernes, 20 de enero de 2017
Clonando Objectos en .NET Framework Parte II
Cuando publiqué la primera parte del artículo, decidí dejar fuera un modo más de clonación, el impulsado por Reflection. La decisión de dejarlo fuera vino principalmente porque hubiera querido abordarlo profundamente y pensaba que se podía alargar mucho y perder el sentido. A la vez en los comentarios de otras páginas especializadas me sugirieron también el modo mediante Expressions Trees, algo que no conocía en este planteamiento, pero tratándose de Arboles de Expresiones, no era para nada lo que se puede decir sencillo.
Buscando más información, me topé con 2 fantásticas
librerías en Git Hub, accesibles
mediante Nuget, que
funcionaban perfectamente bien y que hacen el trabajo de forma maravillosa, así
que ¿para qué reinventar la rueda?
En esta segunda parte trataré de explicar ejemplos con Nuclex y CloneExtensions, que nos permiten realizar clonados profundo,
tanto en modo Reflection como Expression Trees.
martes, 27 de diciembre de 2016
Clonando Objectos en .NET Framework
En esta entrada vamos a tratar un par de formas o estrategias para realizar clonación de objetos en .NET Framework. Analizaremos los pros y las contras por cada uno de los métodos, ya que a día de hoy no existe una fórmula infalible para realizar esta tarea.
Todo lo que vamos a ver está dirigido al uso de clases, ósea a tipos por referencia que no sean clases inmutables (strings, delegados, structuras, etc), ya que éstas tienen un tratamiento diferente en memoria que se queda fuera del objetivo de este post.
jueves, 17 de noviembre de 2016
Generic IEqualityComparer -S-
En este post, hablaremos sobre la implementación genérica
para IEqualityComparer.
Este tipo de implementaciones, son ideales, para gente vaga,
y que le gusta aprovechar más su tiempo realizando otro tipo de tareas, que con
copy/pastes prácticamente iguales.
IEqualityComparer es una de las interfaces, más importantes dentro del mundo de LinQ. Muchos de sus métodos más
importantes, toman una sobrecarga con un parámetro de este tipo, o de una clase
que deriva de esta interfaz. Ejemplos
de ella son: Contains, Distinct, Except, Intersect,
GrouBy, GroupJoin, Join,
SecuenceEqual, ToDictionary, ToLookUp
y Union.
domingo, 6 de noviembre de 2016
Extendiendo LinQ
Como hemos mencionado en otros posts y en otras ocasiones,
la librería principal de LinQ,
System.Linq, está formada por un
conjunto de métodos extensores que en la mayoría de los casos expande la
funcionalidad del tipo
IEnumerable<T>. Por este motivo, y por facilidad de generación
de este tipo de métodos, alargar, dilatar, mejorar o incluso moldear muchos de
ellos, se vuelve una tarea muy simple y en ocasiones bastante gratificante y
útil.
domingo, 30 de octubre de 2016
PLinQ 2
En este nuevo post de PLinQ,
nos vamos a centrar en los métodos más importantes de ParalallelEnumerable, decimos los más importantes, ya que nos
ofrecen una funcionalidad extra para nuestras consultas parametrizadas.
Cabe destacar, como nombramos en el anterior post de PLinQ,
que la clase ParallelEnumerable,
tiene una definición para cada uno de los métodos
extensores (operadores de consulta) de la clase System.LinQ, para hacer completamente transparente su uso, de
modo que pensemos que estamos utilizando una consulta simple a un IEnumerable.
sábado, 22 de octubre de 2016
PlinQ 1
A forma de introducción, PLinQ,
ofrece la capacidad de realizar consultas LinQ
To Objects, de forma paralela, ósea
utilizando todos los cores
(núcleos) de el microprocesador. En un primer vistazo, podemos pensar que esto
es magia, pero como veremos a continuación, no es algo que sea 100%
recomendable en todos los casos, y puede llegar a tener una serie de
consideraciones y fallos, que o bien no conocemos o no estamos acostumbrados en
la programación síncrona.
Una de las ideas que solemos tener en nuestra cabeza acerca
de la programación en paralelo, es que si poseemos una máquina con 4 cores o microprocesadores, un
trabajo que tarda en hacerse 20 segundos, debería de tardar 20/4, solo 5
segundos. Esto no es cierto, hay algunos casos en que la ejecución sobre un
único núcleo es más rápida que sobre n.
La diferencia radica, en que para poder hacer una ejecución en paralelo es
necesario particionar la información en trozos, para que cada uno de estos, sea
tratado por un núcleo y luego volver a fusionar la información. Todo este
trabajo, conlleva un sobrecoste, que en ocasiones no es conveniente.
lunes, 16 de mayo de 2016
Let
Una entrada que pudiera ser no merecedora de un espacio para
ella sola. La cláusula Let,
tiene una serie de virtudes que van desde una mejora notable en la lectura y
comprensión del código, hasta un incremento en el rendimiento por la reducción
de llamadas redundantes.
La única nota negativa, pero no menos importante, es que
esta cláusula, solo puede utilizarse con sintaxis de consulta (azúcar sintáctico), por lo que nuestras queridas Lambdas se quedan fuera.
domingo, 8 de mayo de 2016
Operadores de Conversión
Como su propio nombre indica, los operadores de conversión
realizan transformaciones de datos de un tipo de colecciones a otras.
En este caso tenemos un grupo de operadores de conversión
que son de ejecución instantánea, compuesta por los operadores ToList, ToArray, ToLookUp
y ToDictionary, y otro grupo de carga
perezosa o diferida, compuesta por OffType
y Cast. De este último tipo también
sería el operador AsEnumerable,
pero en éste no pondremos mucho énfasis, ya que es un operador que se utiliza
más en LinqToSql o LinqToEntities, y este curso es de LinqToObjects.
domingo, 1 de mayo de 2016
Operadores de Ordenación
Llegamos al grupo de operadores destinados a realizar el trabajo de ordenación en nuestras colecciones. Dentro de este apartado nos encontramos con un nuevo actor de este teatro, un actor que tiene una importancia mínima pero que forma parte de todo este tinglao, es la interfaz IOrderedEnumerable<TElement> . Es una interfaz super simple, que hereda de IEnumerable<TElement> y de IEnumerable, y que simplemente añade un método CreateOrderedEnumerable, cuya función será la de crear las ordenaciones. Es importante nombrarla ya que será el tipo de devolución que generen nuestros operadores de ordenación OrderBy, OrderByDescending, ThenBy y ThenByDescending.
Llegados a este momento del repaso de LinQ, volveremos a ver las diferencias para estos operadores
entre la sintaxis de consultas
y nuestras queridas Lambdas.