Disclaimer: This is a personal web page. Contents written here do not represent the position of my employer.
Thursday, July 12, 2007
Quejándote mejoras el mundo
Creo que todos estamos de acuerdo en que sentados en nuestro sofá no vamos a mejorar nada en absoluto las cosas que nos preocupan.
Por eso voy a dedicar esta mini-entrada a este tipo de gente que lo da todo por quejarse y quejarse y no parar de quejarse:
Estos han sido los mejores ejemplos que he encontrado.
Actualización 17-FEB-2008: Después de leer esto sobre la ley d'Hondt ("Lo que vale tu voto"), me gustaría quejarme también tal como hace el autor del artículo.
Actualización 02-MAR-2008: Sustituida la actualización del 20-FEB-2008 de esta entrada por una nueva entrada: La falacia del voto útil.
Por eso voy a dedicar esta mini-entrada a este tipo de gente que lo da todo por quejarse y quejarse y no parar de quejarse:
- Michael Moore: sistema sanitario americano.
- Becarios ICEX: precariedad laboral.
- Fuckowski: ¿España va bien? Juventud en España, fuga de cerebros...
- Ingenieros de primera: ¿desaparición de la ingenierías en informática?
Estos han sido los mejores ejemplos que he encontrado.
Actualización 17-FEB-2008: Después de leer esto sobre la ley d'Hondt ("Lo que vale tu voto"), me gustaría quejarme también tal como hace el autor del artículo.
Actualización 02-MAR-2008: Sustituida la actualización del 20-FEB-2008 de esta entrada por una nueva entrada: La falacia del voto útil.
Labels: General, Miscelanea, Politica
Monday, July 02, 2007
Preventing NHibernate prostitution with NUnit
He decidido que más pronto o más tarde migraré el blog al idioma inglés. Pero poco a poco, jejeje, así que de momento sólo los títulos de las entradas.
Hoy vamos a hablar de un test unitario que me he montado, que sirve para que los poco experimentados programadores no utilicen NHibernate mal. ¿Y cómo podrían usarlo mal? Pues saltándose a la torera las facilidades que presta NHibernate con respecto a la conversión del modelo relacional en modelo de objetos, lo que a la larga conlleva código inmantenible y estéticamente una mezcla de código que genera un grado espaghetti 8 sobre 10.
¿Y cómo pueden saltárselo a la torera? Metiendo propiedades ID en el código (reflejando las foreign keys) cuando deberían ser referencias a otros objetos de NHibernate. Es decir:
En lugar de usar la propiedad para el grupo como un objeto:
Y pensaréis, ¿cómo puedo detectar la cagada del primer código? Pues si pudiera diseñar un algoritmo para ello seguramente habría inventado ya la IA, así que lo único que puedo hacer es un algoritmo que "huela" algo sospechoso.
Y esta vez voy a usar MonoPasteBin porque sino el coloreado de código en el blog es muy feo :)
Hoy vamos a hablar de un test unitario que me he montado, que sirve para que los poco experimentados programadores no utilicen NHibernate mal. ¿Y cómo podrían usarlo mal? Pues saltándose a la torera las facilidades que presta NHibernate con respecto a la conversión del modelo relacional en modelo de objetos, lo que a la larga conlleva código inmantenible y estéticamente una mezcla de código que genera un grado espaghetti 8 sobre 10.
¿Y cómo pueden saltárselo a la torera? Metiendo propiedades ID en el código (reflejando las foreign keys) cuando deberían ser referencias a otros objetos de NHibernate. Es decir:
[Serializable]
public class IrmAgent : IrmObject
{
private int iId;
private int? iIdGroup;
private string sContactPerson;
///
/// Default constructor.
///
public IrmAgent()
{
this.Id = 0;
}
public override int Id
{
get { return this.iId; }
set { this.iId = value; }
}
public virtual int? IdGroup
{
get { return this.iIdGroup; }
set { this.iIdGroup = value; }
}
public virtual string ContactPerson
{
get { return this.sContactPerson; }
set { this.sContactPerson = value; }
}
}
En lugar de usar la propiedad para el grupo como un objeto:
[Serializable]
public class IrmAgent : IrmObject
{
private int iId;
private IrmGroup oGroup;
private string sContactPerson;
///
/// Default constructor.
///
public IrmAgent()
{
this.Id = 0;
}
public override int Id
{
get { return this.iId; }
set { this.iId = value; }
}
public virtual IrmGroup Group
{
get { return this.oGroup; }
set { this.oGroup = value; }
}
public virtual string ContactPerson
{
get { return this.sContactPerson; }
set { this.sContactPerson = value; }
}
}
Y pensaréis, ¿cómo puedo detectar la cagada del primer código? Pues si pudiera diseñar un algoritmo para ello seguramente habría inventado ya la IA, así que lo único que puedo hacer es un algoritmo que "huela" algo sospechoso.
Y esta vez voy a usar MonoPasteBin porque sino el coloreado de código en el blog es muy feo :)
Labels: CSharp, General, Mono, Programacion