/ / Programación orientada a objetos, cómo operar con datos - .net, oop

Programación orientada a objetos, cómo operar con datos - .net, oop

Estoy creando una aplicación .net usando nhibernate para mapear datos a entidades. Todavía soy un novato en programación orientada a objetos y ahora tengo esta pregunta:

Tengo entidades como Cliente, Pedido, Producto.Puedo recuperar objetos nhibernate de los datos de la base de datos y enumerar a los clientes, etc. ¿Pero qué sucede si deseo enumerar a los clientes con sus totales de pedidos? Estos no son datos para entidad cliente, ni entidad de orden. ¿Cómo obtener y listar esos datos combinados? ¿Deberían tener su propio objeto de transferencia de datos o hay una mejor manera de hacerlo?

Respuestas

0 para la respuesta № 1

Tener una entidad adicional, CustomerList, que lo hará sostener el Customer objeto.

los CustomerList contará con un método para ordenar la lista de acuerdo con los totales de orden, que se realizará accediendo a los totales de orden de cada miembro del miembro y comparándolos.

En PHP, haría algo como eso (Eso es solo un ejemplo, en código real puede haber otras cosas que deberás tener en cuenta).

<?php

/**
* Describe a single customer object
*/
class Customer {

/** @var Order[] List of orders */
private $orders = array();

/**
* Add an order to the order list.
*
* @param Order $order
*/
public function addOrder(Order $order) {
if (!in_array($order, $this->orders, true)) {
$this->orders[] = $order;
}
}

/**
* Get an order by numeric index.
*
* @param int $index
*
* @return Order
*/
public function getOrder($index) {
return $this->orders[$index];
}

/**
* Get total number of orders for customer.
*
* @return int
*/
public function getOrdersTotal() {
return count($this->orders);
}
}

/**
* Describe a single order.
* I didn"t include any information here because it"s not relevant.
*/
class Order {

}

/**
* Describe a list of customers.
*/
class CustomerList {

/** @var Customer[] List of customers */
private $customers;

/**
* Add a customer to the list
*
* @param Customer $customer
*/
public function addCustomer(Customer $customer) {
$this->customers[] = $customer;
}

/**
* The sorting function.
* Compare the orders total and return 1/0/-1 accordingly.
*
* @param Customer $a
* @param Customer $b
*
* @return int
*/
public function sort($a, $b) {
if ($a->getOrdersTotal() === $b->getOrdersTotal()) {
return 0;
}
return ($a->getOrdersTotal() > $b->getOrdersTotal()) ? 1 : -1;
}

/**
* Call the sorting function on the customer list
*/
public function sortCustomers() {
usort($this->customers, array($this, "sort"));
}

/**
* Return the full customer array.
*
* @return Customer[]
*/
public function getCustomers() {
return $this->customers;
}
}

//Instantiation
$cList = new CustomerList();

$customer1 = new Customer();
$customer2 = new Customer();
$customer3 = new Customer();

$order1 = new Order();
$order2 = new Order();
$order3 = new Order();
$order4 = new Order();
$order5 = new Order();
$order6 = new Order();

$customer1->addOrder($order1);
$customer1->addOrder($order2);

$customer2->addOrder($order3);

$customer3->addOrder($order4);
$customer3->addOrder($order5);
$customer3->addOrder($order6);

$cList->addCustomer($customer1);
$cList->addCustomer($customer2);
$cList->addCustomer($customer3);

//List customers before sorting
var_dump($cList->getCustomers());

$cList->sortCustomers();

//List customers after sorting
var_dump($cList->getCustomers());