[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ООП. Философия авторизации
Страницы: 1, 2, 3, 4, 5, 6
tceburashka.com
И в итоге у Вас все-равно связанная бизнес-логика с определенными компонентами.
Если все упростить и представить себе, что Вы не программист, а производитель автомобиля. То получается следующее. У Вас есть выбор или все детали вашего продукта-автомобиля Вы будете сами производить, либо различные части заказывать у сторонних.
В том и другом случае Ваша бизнес логика все-равно на чем-то завязывается и слабо-связанность превращается в зависимости. Для конечного клиента эта зависимость или от Вас или от сторонних производителей.

_____________
Парсинг - автоматизация ручной работы. http://tceburashka.com
casper - gg
Цитата (Arh @ 23.04.2016 - 22:06)
Анонимные функции штука хорошая, правда не часто встречаются в повседневной жизни =)

придумал ситуацию, когда анонимная функция явно выглядит как на своем месте (как на меня). Есть допустим корзина товаров и у каждого товара своя система скидок. Но, допустим, если у пользователя день рождения или юбилей даты регистрации или еще чего, то делаем для него акцию и продаем по максимально возможной скидке. Обработку которой и загружаем в нужный класс из вне, вот типа того:
все здесь

class Card
{
public $item=array();

public function __construct($move)
{
$this->method = $move; // вот здесь конфигурация внедряется в объект
}

public function destributor($data)
{
$this->{$this->method[$data['move']]}($data); // вот здесь вместо if...else что-то похожее на фабрику касательно названий методов
}

public function put($data) // метод добавления товара в колрзину
{
$this->item[$data['item']]['name'] = $data['item'];
$this->item[$data['item']]['count'] = $data['count'];
$this->item[$data['item']]['price'] = $data['price'];
}
public function add($data) // метод увеличения товара в колрзине
{
$this->item[$data['item']]['count'] = $this->item[$data['item']]['count'] + $data['count'];
}
public function ded($data) // метод уменьшения товара в колрзине
{
$this->item[$data['item']]['count'] = $this->item[$data['item']]['count'] - $data['count'];
}
public function del()
{
unset($this->item);
}
public function run() // вывод результата
{
return !empty($this->item) ? $this->item : ' корзина итак пуста, что там удалять еще, если денег нет то их нет! ';
}
}


class Discount
{
public $total;

public function __construct($discount, $item, $function)
{

foreach( $discount as $key=>$val ) // перебор массива скидок, после чего цены некторых товары будут перещитаны
{
$function = empty($function) ? $this->convert($val['discount'], $val['edge']) : $function; // выбираем анонимную функцию (внешнюю или внутренюю)
$item[$val['item']]['price'] = $function($item[$val['item']]['price'], $item[$val['item']]['count']); // пересчитываем цену
$this->total += $item[$val['item']]['price'] * $item[$val['item']]['count']; // считаем общую сумму
}

$this->item = $item;
}

public function convert($discount, $edge) // метод внутренней анонимной функции
{
return function ($price, $count) use ($discount, $edge)
{
return ( $price*$count > $edge ) ? $price = $price - ( $price*($discount/100) ) : $price ;
};
}

public function run()
{
return !empty($this->item) ? $this->item : ' корзина итак пуста, что там удалять еще, если денег нет то их нет! ';
}
}


//-- функциональная часть--------------------------

//-- Системная настройка

$move = array( 1=>'put', 2=>'add', 3=>'ded', 4=>'del' );
$today = 'today';
$birthday = 'yestoday';
$edge = 300;
$discount1 = 25;
//-- Исключительные ситуации скидок
if( $today == $birthday )
{ // внешняя анонимная функция
$function = function ($price, $count) use ($discount1, $edge) {
return ( $price*$count > $edge ) ? $price = $price - ( $price*($discount1/100) ) : $price ;
};
}
else
$function = '';

//-- Описание условий скидки в разрезе каждого найменования товара в обычном порядке
$discount[1] = array( 'item'=>'Кепка', 'discount'=>15, 'edge'=>2399 );
$discount[2] = array( 'item'=>'Носки', 'discount'=>10, 'edge'=>1599 );

//-- Эмуляция действий с корзиной ($data вместо кукиc)
$data[1] = array( 'move'=>1, 'item'=>'Носки', 'count'=>4, 'price'=>800 );
$data[2] = array( 'move'=>2, 'item'=>'Носки', 'count'=>1, 'price'=>800 );
$data[3] = array( 'move'=>1, 'item'=>'Кепка', 'count'=>2, 'price'=>1200 );
$data[4] = array( 'move'=>3, 'item'=>'Носки', 'count'=>2, 'price'=>800 );
$data[5] = array( 'move'=>3, 'item'=>'Кепка', 'count'=>1, 'price'=>1200 );

$obj = new card($move);

foreach( $data as $val )
$obj-> destributor($val);

// смотрим без применения скидок
var_dump($obj->run());
$disc = new Discount($discount, $obj->run(), $function);
// смотрим с применением скидок
var_dump( $disc->run() );
// Общая сумма
var_dump( $disc->total );


протестировал, все работает, такие особенности получились у скрипта - в обеих случаях перерасчет цены происходит только для товаров которые прописаны в таблице скидок, общая сумма считается только для товаров из той же таблицы.

Кто использует анонимные функции, - может кто подскажет, действительно ли к месту она здесь?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.