Hola a todos
Expongo esta duda por una simple razón tengo alrededor de 3 años y medio trabajando como desarrollador.net me muevo por medio de consultorias asi que me han asignado a diferentes clientes algunos grandes otros pequeños, pero en todos los proyectos en los que he trabajado realmente nunca he usado la poo increiblemente en todos los proyectos se trabaja asi,
haces un store procedure para sql y toda la logica la metes hay que si sumas que si restas multiplicas buscas, todo lo hacemos en sql, y al c# solo lo usamos para llamar a ese store y para la presentacion ya sea asp.net windows form mvc etc, pero nunca programamos logica de negocio en c# esa parte nos la brincamos, y peor con los proyectos web, ya que toda la validacion la haces con javascript en el cliente, executas un metodo con ajax ese metodo hace la conexion y te retorna la lista la lista la pasas json y la imprimes en control, quiero decir a c# solo lo usamos para que haga la conexion a los datos, todos las empresas en las que he estado trabajan asi y muchas han sido grandes empresas, entonces a mi me da el interes de querer crear algo yo en c# y tratar de seguir buenas practicas y usar el c# para la logica,
asi que empece dije que programo que programo??? me pregunte dije algo simple un punto de venta, ahora me doy cuenta que de simple no tiene nada jejejjee,
entonces me pregunte que hace una caja de ventas que hace una caja registradora
1.- crea una preventa que son la lista de preductos y precios
2.- aplica los impuestos
3.- aplica los descuentos y promociones
4.- cobra la venta y te regresa el cambio
5.- registra la venta
6.- modifica ventas
7.- cancela ventas
8.- crea el corte de toda la actividad del dia
9.- presenta el informe del corte
10.- imprime tickets
ya con esas funciones son suficientes jejejeje
pero lo mas importante en esta caja de ventas que quiero crear es que debe ser generica como las clasicas cajas registradoras, no importa si vendo hamburguesas, carros, dulces etc esta caja debe poder hacer todas esas funciones sin verse afectada por la logica del negocio y debe funcionar para cualquier negocio, pss en la torre empece
tengo un componente llama tipos base donde tengo estas clases
public class LlavePrimaria { private int id; public int Id { get { return this.id; } set { this.id = value; } } }
public class Registro : LlavePrimaria { private string descripcion; public string Descripcion { get { return this.descripcion; } set { this.descripcion = value; } } }
es que como en todas las clases que uso siempre tengo una propiedad id y una descripcion pss como que ya no queria hacerlas.
y tengo estas otras clases ya dentro del proyecto de caja
public class Producto : Registro { }
pss el producto es lo que se va a vender pensé sin importar que producto sea lo recibo así y puedo lograrlo
public class ProductoCodigo : Producto { private string codigo; public string Codigo { get { return this.codigo; } set { this.codigo = value; } } }
despues pense si mi producto que voy a vender es un producto fabricado tiene un codigo hay que agregar esa propiedad
public class ProductoCodigo : Producto { private string codigo; public string Codigo { get { return this.codigo; } set { this.codigo = value; } } }
entonces dije voy a crear una clase que tenga el precio y el producto
public class Precio : LlavePrimaria { private decimal valor; private Producto producto; }
olvide pegar los metodos publicos pero si me entienden jejeje
esa clase tiene el valor y el producto
mi caja debe aplicar los impuesto y dije cada precio puede tener diferentes impuestos por ejemplo en mexico al los medicamentos no llevan impuestos, pero el alimento para mascotas si lleva impuestos pobres animalitos verdad jejeje
los carros llevan dos impuestos las bebidas alcoholicas llevan mas impuestos entonces dije ya la estoy regando la logica de impuestos puede cambiar dependiendo de la secretaria de hacienda y de los productos pero es totalmente una logica externa a mi caja de ventas, si quiero que sea generica no debe entrar en esos detalles y con los descuentos y promociones pasa lo mismo dependiendo el tipo de negocio y su estrategia de ventas son sus promociones y son un mundo de logicas de negocio que mi caja no debe saber por que es generica pero debe hacer el trabajo, entiendo el concepto esa implementacion de logica no va en la caja
mi caja solo debe saber
el precio = valor - impuesto + descuento
y una promocion lo cambia todo imaginencen que es una tienda de conveniencia y dice en la compra de cereal te regalo una leche. pss hay que onda verdad mi caja debe poder cobrar y aplicar la promocion pero no implementarla la logica por que dejaria de ser generica
entre las promociones y los impuestos me di cuenta que estaba mal
como logro separar esa implementacion tanto de impuesto y de promociones a la casa pero que la caja lo haga bien??