Ver por etiquetas

Todas las etiquetas » C# » Conceptos (RSS)
Peer2.net ( https://github.com/lontivero/peer2net ) es una librería muy liviana y sencilla de usar orientada a la creación de aplicaciones peer to peer en .net utilizando el protocolo tcp. El punto es que la programación con sockets, y en particular con tcp, introduce algunas complejidades que bien pueden abstraerse y que enumero a continuación: Desempeño : Actualmente existen tres alternativas para utilizar sockets en .net, cada uno con sus pros y contras: Llamadas...
Cuando comencé a programar en c# pensé que nunca más iba a volver a divertirme con algoritmos como los de administración de memoria, pero estaba equivocado! El hecho es que estoy trabajando en un proyecto ‘mascota’ en el que potencialmente cientos de sockets pueden estar enviando y recibiendo datos de manera asíncrona, potencialmente cientos o miles de veces por segundo. Posiblemente te preguntarás qué tiene que ver eso con la administración de la memoria, o más precisamente por qué necesitaría alguien...
@Ayende ha comenzado una serie de post en lo que revisa algunos patrones de diseño (Go4) luego de transcurridos más de 18 años desde su formalización en el libro Design Patterns: Elements of Reusable Object-Oriented Software .  Inspirado por esa serie, y por el hecho de que en mi última entrevista laboral me preguntaron sobre esto,  voy a presentar una revisión sobre el patrón visitor.   Visitor en su forma clásica La motivación detrás de este patrón es poder añadir funcionalidad a...
Es C# realmente dinámico? Si hace Cuac es un pato, si hace lo mismo que un lenguaje dinámico es dinámico. Qué te dice este código:
Leía este post de Luis Ruiz Pavon acerca del comportamiento de los closures en el que Luis anima a responder cual es la salida de un bloque de código en el que se devuelve un array de expresiones lambdas que referencian a la variable utilizada para iterar dicho array (closures) y entonces veo este comentario de Eduard Tomàs i Avellana : El link al que referencia Eduard pertenece al blog de Eric Lippert: Closing over the loop variable considered harmful , una vieja entrada que había leído en su oportunidad...
Publicado por Lucas Ontivero | 1 comment(s)
Archivado en: ,,
Les dejo la tercera entrega de la serie sobre excepciones. Saludos
Les dejo la segunda entrega de la serie que estoy desarrollando para el equipo de desarrollo en el cual trabajo.   Saludos
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
Muchas veces uno cree que el código que .Net Reflector muestra es fiel reflejo de lo que el desarrollador escribió, pero obviamente eso no puede ser cierto ya que esta herramienta toma el IL de un ensamblado y trata de mostrar su equivalente en los lenguajes que se le pida (C#, VB.NET, F# entre otros). Claro que muchas veces hacen tan buen trabajo que uno se olvida de eso. Como a ILSpy le falta una vueltita de rosca en este aspecto, esto se hace más evidente ya que uno termina...
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...
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...
Veamos el siguiente código: Lo que buscamos crear al menos una prueba unitaria para este. ¿Cómo lo hacemos?. Bueno, antes quiero plantear algunos supuestos: Si bien parece un TransactionScript, hagamos de cuenta que no lo es. El hecho de tener solo un método y ningún campo, propiedad o evento es solo para hacer de este un ejemplo ultra sencillo. Por lo tanto pensemos que sí tiene campos, propiedades y varios métodos. Si bien usamos un System.Net.Mail.SmtpClient, la idea es no limitarse solo a esta...
Si el compilador de C# pudiera utilizarse como cualquier assembly, podríamos generar código y compilarlo en tiempo de ejecución. Con esto, muchas de las cosas que hoy hacemos mediante CodeDom o Expression trees, las podríamos hacer simplemente concatenando strings (hay maneras mejores). Por ejemplo, imaginemos un framework para crear clases Mock al que llamaremos RinhaMock. Aplicaremos este framework en el siguiente test unitario: 1: [TestClass] 2: public class Tests 3: { 4: public void It_should_send_messages_with_values...
Pensaba acerca de las cosas que podríamos hacer si el compilador de C# fuese un assembly reutilizable (Compilar as a service). Lo primero, y menos original, que se me ocurrió es que podríamos tener algo como JSON pero para C# en lugar de Java Script. 1: class Program 2: { 3: static void Main( string [] args) 4: { 5: const string data = @"results[" "professional" "] = 6: new 7: { 8: FirstName = " "Juan Pablo" ", 9: LastName = " "Ibañez" "...
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...
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...
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...
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...
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...
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...
Más artículos Página siguiente >