Como concatenar strings o generar una cadena de caracteres correctamente.

Esta semana estoy que lo peto. Otro post express!! para iniciados.

¿Como unirias dos strings?

string str1 = "hola";
string str2 = "mundo";
string str12 = str1 + str2;

Si esta es tu respuesta date una cleca y sigue leyendo.

Como unir o generar un string

Esto nos puede servir tanto para c# como para java. Unir strings utilizando el operador “+” es pecado capital en C# y java.

Se debe utilizar el objecto StringBuilder, que como el mismo nombre dice, construye strings. Es muy sencillo de utilizar y se suele usar cuando necesitamos generar un string utilizando bucles.

El ejemplo anterior pero bien hecho.

Opción 1

StringBuilder  strb = new StringBuilder();
strb.Append("Hola");
strb.Append(" mundo!");

string str12 =strb.ToString();

Opción 2

StringBuilder  strb = new StringBuilder("Hola");
strb.Append(" mundo!");
string str12 =strb.ToString();

Opción 3

StringBuilder  strb = new StringBuilder();
strb.AppendFormat("{0} {1}", "Hola", "mundo!");
string str12 =strb.ToString();

 

Utilicar el StringBuilder para unir dos cadenas puede ser un poco engorroso, asi que utilizaremos mejor “string.Format”, esta función no solo nos servira para unir cadenas sino tambien para formatearlas.

Un ejemplo.

string.Format("{0} {1}", "Hola", " mundo");

 

¿ Por qué debo usar string.Empty y no “”?

Hace ya bastante que no publico un post, lo reconozco, me da pereza tener que enrollarme.

Por esta razon voy hacer un post corto pero muy util, sobretodo para aquellos que se estan iniciando en c#.

Cuando estamos programando, en ocasiones tenemos la necesidad de utilizar una cadena vacia, es decir, “”. Pero en la mayoria de ocasiones ya sea por pereza, rapidez o simplemente desconocimiento no utilizamos el string.Empty cuando es la mejor opción.

Ahora te estaras preguntando pero si es lo mismo ¿no? que más da usar string.Empty que “”, pues sí es importante.

Si usas “” lo que estas haciendo es ocupar memoria de forma innecesaria. Por ejemplo, si tenemos un bucle que se ejecuta 10 veces con “” en su contenido lo que estaremos haciendo es generar 10 objetos “” en memoria, en cambio si utilizas string.Empty no se generaran esos 10 objetos de “” optimizando memoria.

En otro post express explicare como construir correctamente una cadena de strings.

A picar como monos!

C# Estándares y nomenclaturas de codificación

Hace ya varios meses que no publico ningun post. Hoy voy a publicar una serie de estandares de estilo de desarrollo, algo que toda empresa deberia de tener bien definida para que todo el mundo tenga el mismo estilo y facilite la lectura de código.

 

1.1.    Buenas prácticas

1.1.1.   PascalCasing

Se debe usar para el nombre de clases y métodos

public class ActividadCliente
{

public void BorrarEstadisticas()
{
//…
}
public void CalcularEstadisticas()
{
//…
}

}

¿Por qué?: Es consistente con .NET Framework de Microsoft y fácil de leer.

Se debe usar para las abreviaciones de 3 caracteres o más la notación para el nombre de clases y métodos

HtmlHelper htmlHelper;

FtpTransfer ftpTransfer;

UIControl uiControl;

¿Por qué?: Es consistente con .NET Framework de Microsoft y fácil de leer.

 

1.1.2.   CamelCasing

Se debe usar para el nombre de los argumentos de los métodos y variables locales.

public class Ejemplo
{
public void Add(Elemento item)
{
int itemCount = item.Items.Count;
// …
}
}

¿Por qué?: Es consistente con .NET Framework de Microsoft y fácil de leer.

1.1.3.    Declaración de variables y propiedades de clase

Se deben de declarar todas las propiedades y variables privadas de una clase en su parte superior.

public class Account
{
public static string BankName;
public static decimal Reserves;
public string Number {get;set;}
public DateTime DateOpened{get;set;}
public DateTime DateClosed{get;set;}
public decimal Balance{get;set;}
// Constructor
publicAccount()
{
// …
}
}

¿Por qué?: Esta muy generalizada y aceptada. Es una práctica que evita tener que estar buscando la definición de dichas propiedades y variables.

 

1.1.4.   Definición de tipos en las variables

Se debe usar los nombres de tipos predefinidos en lugar de los nombres de los tipos de sistema como Int16, Int32, etc

// Correcto
string firstName;
int lastIndex;
bool isSaved;

// Evitar
String firstName;
Int32 lastIndex;
Boolean isSaved;

¿Por qué?: Es consistente con .NET Framework de Microsoft y es mucho más natural de leer.

Se debe usar el tipo implicito “var”. Excepto para los tipos primitivos (string, int, etc)

var stream =File.Create(path);

var customers =newDictionary();

// Excepciones

int index =100;

string timeSheet;

bool isCompleted;

 

¿Por qué?: Elimina ruido, sobre todo cuando se trata de tipos genéricos complejos. El tipo es fácilmente detectable con los tooltips de Visual Studio.

 

1.1.5.   Clases

Utilizar Substantivos para nombrar las clases.

public class Empleado
{
}
public class Localizacion
{
}

public class Documento
{
}

¿Por qué?: Es consistente con .NET Framework de Microsoft y fáciles de recordar.

1.1.6.   Interfaces.

Utilizar el prefijo “I” y nombres o adjetivos para nombrarlas.

public interface IShape

{

}

public interface IShapeCollection

{

}

¿Por qué?: Es consistente con .NET Framework de Microsoft y fáciles de recordar.

1.1.7.   El nombre de los archivos de código

El nombre de los archivos de código fuente debe coincidir con la clase, a excepción, de las clases parciales que pueden tener un sufijo (designer, generated, etc).

// Archivo Task.cs

public partial class Task

{

//…

}

// Archivo Task.Designer.cs

public partial class Task

{

//…

}

¿Por qué?: Es consistente con .NET Framework de Microsoft. Los archivos están alfabéticamente ordenados, facilidad para buscar las clases.

1.1.8.   Alinear verticalmente entre llaves

public class Ejemplo

{

public void Main()

{

}

}

¿Por qué?: Hay muchos estándares respecto a esto, pero este es el más utilizado.

 

1.1.9.   Enums

Se debe nombrar en singular excepto aquellos que tengan la data anotation [Flag]

// Correcto

public enum Color

{       

       Red,

       Green,     

   Blue,

       Yellow,

       Magenta,

       Cyan

}

// Excepcion

[Flags]

public enum Posiciones

{

       None = 0,

        Top = 1,

        Right = 2,

        Bottom = 4,

        Left = 8

}

¿Por qué?: Es consistente con .NET Framework de Microsoft y hace el código mucho más natural de leer. El plural se usa con los enums que tienen el Flag porque pueden contener varios valores.

1.2.     Malas practicas

1.2.1.   Notación Hungara

No se debe usar la notación Hungara  o cualquier otro tipo de identificación de tipo.

// Correcto
int contador;
string nombre;


// Evitar
int iContador;
string strNombre;

¿Por qué?: Es consistente con .NET Framework de la Microsoft y Visual Studio hace la identificación de los tipos sea muy sencilla fácil de leer.

 

1.2.2.   Constantes y readonly

No se debe usar nombres con todos los caracteres en mayúsculas

// Correcto
    public static const string TipoDeTransporte = “tipo1”;


// Incorrecto
public static const string TIPODETRANSPORTE = “tipo1”;

¿Por qué?: Es consistente con .NET Framework de la Microsoft. Las mayúsculas desvían nuestra atención.

1.2.3.   Abreviaciones

Evitar usar abreviaciones  excepto las abreviaturas comúnmente utilizadas Id, XML, FTP, Uri.

 

    // Correcto
UserGroup userGroup;
Assignment employeeAssignment;


// Evitar
UserGroup usrGrp;
Assignment empAssignment;


    // Excepciones
    CustomerId customerId;
    XmlDocument xmlDocument;
FtpHelper ftpHelper;
UriPart uriPart;

¿Por qué?: Es consistente con .NET Framework de la Microsoft y  previene abreviaciones inconsistentes.

 

1.2.4.   Guion bajo (_)

No se debe usar la el guion bajo (_) excepto como prefijo en las variables privadas.

 

// Correcto
public DateTime ClientAppointment;
public TimeSpan TimeLeft;

// Evitar
public DateTime client_Appointment;
public TimeSpan time_Left;

// Excepción
private DateTime _registrationDate;
¿Por qué?: Es consistente con .NET Framework de la Microsoft y hace que el código sea más natural para leer. También evita el estrés por subrayado (incapacidad para ver el subrayado).

.

1.2.5.   Enums

No indicar con el sufijo o prefijo “Enum”

// Correcto

public enum Color

{

Red,

Green,

Blue,

Yellow,

Magenta,

Cyan

}

// Incorrecto

public enum PosicionesEnum

{

None = 0,

Top = 1,

Right = 2,

Bottom = 4,

Left = 8

}

¿Por qué?: Es consistente con .NET Framework de Microsoft y consistente con la regla de no usar un identificador de tipo.

Cache nivel 2 de entity framework

¿Que es Cache de nivel 2 en entity framework?

Como todos sabemos entity framework, a partir de ahora ef, construye y ejecute instrucciones SQL a una base de datos transformando el resultado a un objeto que luego sera controlado dentro de un contexto. Para poder cachear estos objetos debido a que estan controlados y asociados a un determinado contexto si los cacheamos directamente luego cuando los recuperemos de la cache donde el contexto es otro nuevo no podremos añadirlo al nuevo contexto de una forma sencilla.

Para solucionar este problema, en lugar de cachear los objetos se cachean los resultados antes de ser transformados en objeto esto es lo que se llama una cache de nivel 2.

Cache level 2 EF

¿Que implementaciones existentes hay?

Tenemos varias soluciones ya implementadas, como por ejemplo Ncache y EntityFramework.Cache, que se basan en los mismo. Nosotros trabajamos con EntityFramework.Cache, disponible desde los paquetes Nuget. Es una implementación sencilla y básica.

 

Continue reading

Como precompilar las vistas en Entity Framework

Dentro de los procesos internos del propio Entity Framework (a partir de ahora EF) hay uno que hay que destacar que es el de la compilación/generación de las vistas en tiempo de ejecución. Estas vistas son una serie de metadatos que genera el EF para poder generar las sentencias SQL del modelo de datos. Este proceso es el más costos de todos, por este motivo la primera vez que se ejecuta una sentencia el EF tarda más que en la segunda vez. ¿Como podemos solucionar esto? pues depende de la versión del EF.

En las versiones EF inferiores a la 6 se precompilaban en el momento de compilar el proyecto. Para más información http://msdn.microsoft.com/es-es/library/vstudio/bb896240%28v=vs.100%29.aspx

En la versión inicial de EF, la 6.0.0, se han reportado bugs en el proceso de generación de las vistas haciendolo aún más lento, por esta razon se recomienda actualizar a la última versión (6.1.1).

Para la versiones superiores o igual a la 6, la manera de generar las vistas ha cambiado por lo tanto ya no nos sirve la precompilación que se hacia en la versión 5. Ahora no es necesario generar los metadatos del edmx, ejecutar el edmgen, etc. Tenemos la posibilidad de modificar la cache de la generación de las vistas (siendo esta la nueva manera).

Interactive Pregenerated Views for Entity Framework 6

Para facilitarnos un poco la tarea nos tenemos que descargar el paquete nuget “Interactive Pregenerated Views for Entity Framework 6
Continue reading

Configurar proyecto en Visual Studio 2012 para realizar transformaciones de los archivos .config

Nuestro proyecto tiene como necesidad tener varios archivos de configuración (.config). Debido a esta necesidad y al tener varios entornos (dev, test y prod) necesitamos que dependiendo del entorno estos archivos tengan una configuración especifica por entorno.

Para conseguir que en estos archivos se realice la transformación dependiendo del entorno necesitamos realizar una serie de pasos que indico a continuación.

  1. Modificar las propiedades de todos los archivos de configuración excepto el principal
    1. Build Action : None
    2. Copy to output Directory : Do not Copy
  2. Descargar de la solución el proyecto.
  3. Editar el proyecto (boton derecho -> editar …)
  4. Añadir las lineas correspondientes para forzar la transformación.
  5. Modificar proyecto de azure.

Continue reading