Hola Carlos,
Creo que nos vamos de topic de la lista pero pego una version. Deberiamos
seguirla en otra lista.
Esto lo escribi en 10 minutos usando TDD, la recursividad se resuelve en el
modelo. Que esta sea una solucion adecuada para vos o no depende de un
monton de cosas que no conozco.
Por supuesto, cuando esto se persiste en la base de datos, solo la usas para
almacenar los objetos, el costo se calcula en el modelo.
[TestFixture]public class Formulas{
[Test]
public void ComponenteVacio()
{
var pc = new Componente();
Assert.AreEqual(0, pc.Costo);
}
[Test]
public void PcConPantalla()
{
var pc = new Componente();
var pantalla = new Componente();
pc.Componentes.Add(pantalla);
Assert.AreEqual(1, pc.Componentes.Count);
}
[Test]
public void PcConPantallaConPrecio()
{
var pc = new Componente();
var pantalla = new Componente(800);
pc.Componentes.Add(pantalla);
Assert.AreEqual(800, pc.Costo);
}
[Test]
public void PcConPantallaConPrecioYCostoBase()
{
var pc = new Componente(100);
var pantalla = new Componente(800);
pc.Componentes.Add(pantalla);
Assert.AreEqual(900, pc.Costo);
}
[Test]
public void PcConPantallaYTecladoConPrecioYCostoBase()
{
var pc = new Componente(100);
var pantalla = new Componente(800);
pc.Componentes.Add(pantalla);
var teclado = new Componente(50);
// Agrego 5 teclas
teclado.Componentes.Add(new Componente(2));
teclado.Componentes.Add(new Componente(2));
teclado.Componentes.Add(new Componente(2));
teclado.Componentes.Add(new Componente(2));
teclado.Componentes.Add(new Componente(2));
pc.Componentes.Add(teclado);
Assert.AreEqual(960, pc.Costo);
}
}
public class Componente{
private decimal _costo;
IList<Componente> _componentes = new List<Componente>();
public Componente() : this(0)
{
}
public Componente(decimal costo)
{
_costo = costo;
}
public decimal Costo
{
get
{
decimal costoTotal = _costo;
foreach (var componente in _componentes)
costoTotal += componente.Costo;
return costoTotal;
}
}
public IList<Componente> Componentes
{
get { return _componentes; }
}
}
Este modelo deberia modificarse para agregar multiplicidad en los
componentes, por ejemplo, en lugar de agregar 5 o 101 componentes
tecla, podria introducirse el concepto de asociacion en donde
coloquemos la multiplicidad.
Pido disculpas a los DBAs por las llaves {}, ya se que les duelen los ojos :-)
----------------------------------
Carlos Peix
2009/10/9 Carlos A. Schroeter <[email protected]>
> Hola Carlos, gracias
>
> Tenés algún ejemplo como para que pueda guiarme?
>
>
>
> Carlos A. Schroeter
>