/ / Programowanie zorientowane obiektowo, jak pracować z danymi - .net, oop

Programowanie obiektowe, obsługa danych - .net, oop

Buduję aplikację .net przy użyciu nhibernate do mapowania danych na encje. Nadal jestem początkującym programistą obiektowo zorientowanym i teraz mam to pytanie:

Mam podmioty takie jak Klient, Zamówienie, Produktitp. Mogę pobierać obiekty przez nhibernate z danych z bazy danych i listy klientów itp. Ale co jeśli chcę wyświetlić listę klientów z jej sumami zamówień? Nie są to dane dla jednostki klienta ani jednostki zamówienia. Jak pobrać i wyświetlić takie połączone dane? Czy powinni mieć własny obiekt do przesyłania danych, czy też jest tutaj lepszy sposób, aby to zrobić?

Odpowiedzi:

0 dla odpowiedzi № 1

Mieć dodatkowy podmiot, CustomerList, które będą trzymać temu Customer obiekt.

The CustomerList będzie mieć metodę, aby posortować listę według sumy zamówienia, które będzie się odbywać poprzez dostęp do każdego członka "Podsumowanie zamówienia s i porównywanie ich.

W PHP, chciałbym zrobić coś tak (to tylko przykład, w rzeczywistym kodu może być inne rzeczy możesz 'll potrzeba uwzględnienia).

<?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());