Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (8) « Первая ... 3 4 [5] 6 7 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Мой DI контейнер
twin  
[x] Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


Ох ща много напишу. Накипело.

Начнем снизу вверх. Насчет Остапа. Я конечно не крутой спец в ООП. К тому же уверен, что правильного ООП вообще не существует. Однако это не значит, что не существует не правильного. Твое ООП совершенно неправильное. Потому что ты посредством оверинжениринга завуалировал практически статический подход к реализации. Вот почему:

1. Вся твоя концепция строится на синглтонах. И хотя они не явны, но сейчас выяснилось, что основа твоего фреймворка - этот самый контейнер. А он не разрешает делать копию объекта. Фактически это синглтон и есть. Ты пользуешься объектами только по одному. Чем это отличается от статики?

То, что там у тебя фабрики-шмабрики, это всё фигня. Ты просто посредством оверинжениринга пытаешься решить проблему, которую сам себе создал: СИНГЛТОН. И сколько бы ты не сочинял всяких ухищрений, главный принцип ООП ты нарушил. Ты уничтожил саму возможность создавать объекты. А всё, что по одному, спокойно решается статикой. Я покажу.

2. Ты заведомо и сознательно убил возможность пользоваться конструкторами. А чем в первую очередь отличается объект от статического класса? Магией. Я, как любитель статики, тебе авторитетно скажу. Именно её мне больше всего нехватает. Особенно конструкторов.
А убив конструкторы, ты угробил кучу возмжностей. Самую главную - constructor dependency.

Кроме того, ты глобально использовал антипаттерн. Инъекции обязательных зависимостей через свойства. Это делает систему хрупкой, я уже показал, что будет при клонировании. И статьи показывал, где это описано. Фаулер в своей книге вообще не рассматривает такую возможность, так как это антипаттерн и есть. Ты нарушил принцип инкапсуляции. Кроме того, SOLID (второй принцип - Open/closed principle). Твои объекты повально открыты для изменения.

Я тут на твоей стороне, мне тоже нравятся публичные свойства. Но я могу себе это позволить, я плевал на законы ООП. А ты - нет, не можешь. Особенно если пытаешься кого то учить этой методологии.

3. Вся твоя CMS - это френкин-дизайн. Ты увлекся зависимостями и напихал их везде и всюду. От того она стала непролазной дебрей, собранной из тысячи сильно связанных кусочков. В логике которой без бутылки не разобраться. От того у тебя и 150 классов для генерации любого нello world. Это совершенно неоправданный оверинжениринг, ты явный архитектурный астронавт. Всё, что можно решить двумя строчками, у тебя выливается в несколько классов. Как в примерах с фабрикой, медиатором и клонированием. А это плохая практика. И ты этому учишь людей.

Ладно, хватит пока. И этого достаточно.

Дальше.
Цитата (chee @ 12.04.2016 - 13:38)
Возможно да, а возможно и нет. Все субъективно.
Нет. Это не субъективно. Вот смотри. Ron недавно заявил:
Цитата (Ron @ 11.04.2016 - 23:03)
Зачем мне смотреть в чужой код? Описания преимуществ и хорошей доки по использованию более чем достаточно. =)

Вот он поверит твоей декларации, и применит в проекте. А ему потом, когда уже поздно будет, понадобится копия объекта, как мне. И всё. Ты его подставил, получается. Кроме того, чтобы не юзать конструктор, нужно идти по твоему пути. А он порочен. Так что не сбивай людей с толку. Этот контейнер простой - спору нет. Но он не мощный. Он нЕмощный. smile.gif А таким поделкам в паблике делать нечего.

Ну а дальше я покажу, как твой принцип реализуется на статике. Чтобы не быть голословным. Почти готово, минут пять, не больше.

Вообще, если у тебя нет копий объектов, можно при определенных усилиях, всю твою CMS на статику переписать. Потому что вся прелесть объектов - в возможности их многократно использовать. Тогда не нужно будет так мудрить, решая проблемы, которых с нормальным дизайном не существует вовсе.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
[x] Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


Ну вот как то так примерно. С твоими любимыми метаданными. :)

<?php


// Функция вместо файла
// Тут твои метаданные

function mainConfig()
{
return [ 'one' => ['Wrapper' => ['config' => 'Dependency_one'] ],
'two' => ['Wrapper' => ['config' => 'Dependency_two'] ]
];

}

// Это понятно
class Config
{
public static function getConfig($path)
{
return $path();
}
}


// Ну и вот такой же контейнер на статике (суть)
class Container
{
public static function get($classname)
{
$container = Config::getConfig('mainConfig');
$config = $container[$classname];
$class = key($config);
$dependency = array_shift($config);

foreach($dependency as $property => $value)
{
$class::$$property = $value;
}

return $class;
}
}


// Зависимости
class Dependency_one
{
public static $mode = 'test-1';
}

class Dependency_two
{
public static $mode = 'test-2';
}

// Реципиент
class Wrapper
{
public static $config;

public static function run()
{
$class = self::$config;
echo $class::$mode;
}
}



$class = Container::get('one');
$class::run(); // test-1

// Нагло подменяем зависимость

$class = Container::get('two');
$class::run(); // test-2


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


Такая же чушь, как у тебя. Ничего в контексте не понятно. Какие классы используются, что там им нужно.... Лезть в конфигу и в реализацию только. От того bestxp и говорил, что лучше в коде это прописывать. Все явно видно.

И главное - для чего? Неужели только ради юнитов?


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
[x] Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


А чтобы совсем не голословно, чтобы не подумали, что я на пустом месте критикую, вот мой DIC. Он в сто раз более ООПэшный, чем твой. Но я его в паблик не тяну, ибо он нафиг никому не нужен. Даже мне :D
<?php

/**
*
* NOTE: Requires PHP version 5.5 or later
*
@author irbis-team.com
*
@copyright © 2015
*
@license http://www.wtfpl.net/
*/
class DiC
{
protected $serviceStorage = [];
protected $serviceFrozen = [];
protected $serviceSynthetic = [];
protected static $objectStorage = [];

/**
*
*
@param string $ServiceId
*
@param callable $callable
*
*
@return void
*/

public function set($serviceId, $callable)
{
$serviceId = $this->validateService($serviceId);
$callable = $this->validateCallable($callable);

if (isset($this->serviceStorage[$serviceId])) {
throw new \OverflowException($serviceId . ' is already');
}

$this->serviceStorage[$serviceId] = $callable;
}

/**
*
*
@param string $serviceId
*
@param callable $callable
*
*
@return void
*/

public function setGlobal($serviceId, $callable)
{
$this->set($serviceId, $callable);
$this->serviceFrozen[strtolower($serviceId)] = true;
}

/**
*
*
@param string $serviceId
*
*
@return object
*/

public function get($serviceId)
{
$serviceId = $this->validateService($serviceId);

if (isset($this->serviceFrozen[$serviceId])) {

if (!isset(self::$objectStorage[$serviceId])) {
self::$objectStorage[$serviceId] = $this->serviceStorage[$serviceId]->__invoke();
}

return self::$objectStorage[$serviceId];

} elseif (isset($this->serviceStorage[$serviceId])) {
return $this->serviceStorage[$serviceId]->__invoke();
}

throw new \OutOfBoundsException('service '. $serviceId .' not found');
}

/**
*
*
@param string $ServiceId
*
*
@return void
*/

public function checkService($serviceId)
{
$serviceId = $this->validateService($serviceId);
return isset($this->serviceStorage[$serviceId]);
}

/**
*
*
@param string $ServiceId
*
*
@return object|bool
*/

public function getNew($serviceId)
{
$serviceId = $this->validateService($serviceId);

if (isset($this->serviceStorage[$serviceId])) {
return $this->serviceStorage[$serviceId]->__invoke();
}

return false;
}

/**
*
*
@param string $ServiceId
*
*
@return void
*/

public function serviceSynthetic($serviceId)
{
$serviceId = $this->validateService($serviceId);
$this->serviceSynthetic[$serviceId] = true;
}

/**
*
*
@param string $serviceId
*
*
@return string
*/

protected function validateService($serviceId)
{
if (empty($serviceId) || !is_string($serviceId)) {
throw new \InvalidArgumentException('invalid property');
}

return strtolower($serviceId);
}

/**
*
*
@param string $dependenceId
*
@param string $serviceId
*
@param string $newService
*
@param array $property
*
*
@return object
*/

public function injection($dependenceId, $serviceId, $newService = null, $property = [])
{
$serviceId = $this->validateService($serviceId);

if (empty($newService)) {
$newService = $serviceId;
} else {
$newService = $this->validateService($newService);
}

if (isset($this->serviceSynthetic[$newService])) {
throw new \LogicException($newService .' is synthetic');
}

$dependenceId = $this->validateService($dependenceId);

if (!empty($property) && !is_array($property)) {
throw new \InvalidArgumentException('invalid property');
}

$objService = $this->get($serviceId);

if (false === $objService) {
throw new \OutOfBoundsException('service '. $serviceId .' not found');
}

$objDependence = $this->get($dependenceId);

if (false === $objDependence) {
throw new \OutOfBoundsException('dependence '. $dependenceId .' not found');
}

$class = get_class($objService);

$newCallable = function() use ($class, $objDependence, $property) {
$obj = new $class($objDependence);

foreach ($property as $key => $value) {
$obj->$key = $value;
}

return $obj;
};

unset($objService);
unset($objDependence);

$this->serviceStorage[$newService] = $newCallable;
$this->serviceSynthetic[$newService] = true;
}

/**
*
*
@param callable $callable
*
*
@return callable
*/

protected function validateCallable($callable)
{
if (!is_callable($callable)) {
throw new \InvalidArgumentException($callable .' must be a function of anonymity is conferred');
}

return $callable;
}
}


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
[x] Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


И специально для Ron'а примерчики :D
    $container = new DiC;

// Просто в контейнер
$container->set('Class',
function() {
return new Example1;
}
);


// В глобальное (по принципу Singletone)
$container->setGlobal('SinglClass',
function() {
return new Example1;
}
);

// Так можно достать
echo '-- Расшареный объект --<br>';
$obj = $container->get('Class');
$obj->run();

sleep(1);
echo '<br>';

$obj = $container->get('Class');
$obj->run();

echo '<br> -- Синглтон -- <br>';


// Так можно достать cинглтон
$obj = $container->get('SinglClass');
$obj->run();

sleep(1);
echo '<br>';

$obj = $container->get('SinglClass');
$obj->run();
echo '<br>';


// Динамические инъекции

// Создаем первый сервис

$container->set('service',
function() {
return new Example2;
}
);
// Затем второй
$container->set('dependence',
function() {
return new Example3;
}
);

// Запихиваем второй в первый, как зависимость через конструктор
$container->injection('dependence', 'service');

echo '<br>-- service --<br>';
// Вуаля.
$obj = $container->get('service');
$obj->run();


// Собираем третий сервис, запихав второй в первый
$container->injection('dependence', 'service', 'newService');

echo '<br> -- newService --<br>';
// От так.
$obj = $container->get('newService');
$obj->run();

// Дополнительно устанавливаем значение свойства (можно несколько)
$container->injection('dependence', 'service', 'moreService', ['var' => 'Hello, World!']);

echo '<br> -- moreService --<br>';
// И вот так еще.
$obj = $container->get('moreService');
$obj->run();


////////////////////////////////////
// Классы для примера

class Example1
{
protected $time;

public function __construct()
{
$this->time = microtime(true);
}

public function run()
{
echo $this->time;
}
}



class Example2
{
public $var = 'test';
protected $dep;

public function __construct($dep = null)
{
if (is_object($dep)) {
$this->dep = $dep;
}
}


public function run()
{
$this->dep->display($this->var);
}
}


class Example3
{
public function display($var)
{
echo $var;
}
}

//////////////////////////////////////


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


И кому запускать лень - результаты:
Цитата
-- Расшареный объект --
1460477880.2796
1460477881.2797
-- Синглтон --
1460477881.2797
1460477881.2797

-- service --
test
-- newService --
test
-- moreService --
Hello, World!


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




Цитата (twin @ 12.04.2016 - 18:29)
Ты пользуешься объектами только по одному.

Фабрики и клонирование, синглтоновость решается клонированием сущностей, мне указали, что клонирование не очень гуд, так что тут я буду смотреть как решить в рамках концепции это задачу.

Цитата (twin @ 12.04.2016 - 18:29)
главный принцип ООП ты нарушил. Ты уничтожил саму возможность создавать объекты.

Инкапсуляция, Полиморфизм, Наследование и Абстракция. Не придумывай новых принципов.

Цитата (twin @ 12.04.2016 - 18:29)
А убив конструкторы, ты угробил кучу возмжностей. Самую главную - constructor dependency.

Не отрицаю, сознательное решение, я вижу от него только плюсы.

Цитата (twin @ 12.04.2016 - 18:29)
Кроме того, ты глобально использовал антипаттерн. Инъекции обязательных зависимостей через свойства.

Нету мнения что это антипаттерн, обсуждение уже было. Только в твоей голове это антипаттерн.

Цитата (twin @ 12.04.2016 - 18:29)

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

В любой системе есть shared объекты в них всегда будет та проблема, что ты сказал. Да ее избежать можно, сделав сеттеры, но от даунов это не спасёт.

Цитата (twin @ 12.04.2016 - 18:29)
И статьи показывал, где это описано. Фаулер в своей книге вообще не рассматривает такую возможность, так как это антипаттерн и есть. Ты нарушил принцип инкапсуляции. Кроме того, SOLID (второй принцип - Open/closed principle). Твои объекты повально открыты для изменения

Не описал - анитипаттерн, круто чё. Публичное свойство этот тот же сеттер, но с большими допущениями. Я не отрицаю, что использование такого подхода - спорное, но оно явно не является антипаттерном.

Цитата (twin @ 12.04.2016 - 18:29)
Вся твоя CMS - это френкин-дизайн. Ты увлекся зависимостями и напихал их везде и всюду. От того она стала непролазной дебрей, собранной из тысячи сильно связанных кусочков. В логике которой без бутылки не разобраться. От того у тебя и 150 классов для генерации любого нello world. Это совершенно неоправданный оверинжениринг, ты явный архитектурный астронавт. Всё, что можно решить двумя строчками, у тебя выливается в несколько классов. Как в примерах с фабрикой, медиатором и клонированием. А это плохая практика. И ты этому учишь людей.

Я не понимаю, в чём ты меня пытаешься обвинить. Я уже сказал, что такое количество файлов это нормально для любой ООП системы. Фабрики, медиаторы и прочее, не заменить на что-то другое, так как использования внедрение зависимостей не избавляет от использование этих паттернов.

По факту все твои обвинения лишь в том, что у меня не поддерживаются не shared зависимости, а даю на откуп программисту.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




Помоему, что у тебя тут написано, является полной дичью, ты же хотел повторить поведение моего контейнера, а получилась какуля. Хотя может я что-то не понял.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


Цитата (chee @ 12.04.2016 - 16:14)
Я не понимаю, в чём ты меня пытаешься обвинить.

Обвинить??? Побойся Бога. Я, который постоянно декларирует вольное написание кода, обвинить? Просто ты часто говоришь, что твоё кунг-фу канонично. И даже пытаешься учить людей. А каноничного ООП не бывает. Оно всё спорно. Вот сам заметил:
Цитата (chee @ 12.04.2016 - 16:14)
Я не отрицаю, что использование такого подхода - спорное, но оно явно не является антипаттерном.

Я не ООПэшник, мне плевать. Но есть мнения, что это антипаттерн и есть. Я приводил его:
Цитата
Скотт Мейерс (гуру С++) самым важным принципом проектирования считает следующий: ваш класс или модуль должно быть легко использовать правильно и сложно использовать неправильно. Классом же с десятком параметром правильно пользоваться весьма сложно; точнее достаточно просто пользоваться в вашем давно отконфигурированном приложении с использованием DI контейнеров, но создать и «угодить» ему с нуля – дело совсем не простое.

Именно поэтому использование сервис локатора или внедрение обязательных зависимостей через свойства являются антипаттернами. В этом случае невероятно просто использовать класс неправильно и сложно использовать правильно.

Синглтон тоже многими предан анафеме, а у тебя это принцип. Если тебя устраивает - хорошо. Достойно уважения. Но заявлять, что это канонично...

Больше скажу, я встречал мнения, что и фабрика - антипаттерн. Вобщем сколько ООПэшников, столько и мнений.

Да и фиг с ним, с ООП. Тут про контейнер твой речь. Ну и что ты скажешь по поводу моей статичной карикатуры? smile.gif Сильно принцип отличается?

Про конструкторы отдельный разговор.
Цитата (chee @ 12.04.2016 - 16:14)
Не отрицаю, сознательное решение, я вижу от него только плюсы.
Обоснуй, если не сложно. Очень любопытно.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


Цитата (chee @ 12.04.2016 - 16:21)
Помоему, что у тебя тут написано, является полной дичью, ты же хотел повторить поведение моего контейнера, а получилась какуля.

Факт. Я и не спорю:
Цитата (twin @ 12.04.2016 - 14:45)
Такая же чушь, как у тебя.
Но принцип тот же. Метаданные есть? Есть. Конструкторов нет? Нет. Второй объект создать нельзя, так же как у тебя. А зависимости подменить можно? Можно. В чем отличие?
Только не нужно про фабрики и медиаторы всякие. Я основной принцип показал. Если сильно захотеть, то и все остальное повторить можно. Потому что один объект без конструктора почти ничем не отличается от статического класса.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


Цитата (chee @ 12.04.2016 - 16:14)
Инкапсуляция, Полиморфизм, Наследование и Абстракция. Не придумывай новых принципов.

Это производные принципы. Основной принцип - Объектная Ориентация (тьфу, ты, Господи). А у тебя по факту половина возможностей объектов похерена. О каких канонах ты все время говоришь? И чему людей учишь? Однобоко это всё получается.
Цитата (chee @ 12.04.2016 - 16:14)
По факту все твои обвинения лишь в том, что у меня не поддерживаются не shared зависимости, а даю на откуп программисту.

Не только shared. Про конструкторы не менее важно.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 6 дней
Карма: 70




Может свой DI тоже выложить? Вон сколько советов прилетело =)


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней




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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2110
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 6 дней
Карма: 70




twin
Тот с рефлексией) я тогда разбирался что к чему.
А сейчас другой, и несколько месяцев используется в двух проектах, уже и забыл что его можно допилить, потестить =)

Как ты так быстро пруфы находишь laugh.gif


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




Цитата (twin @ 12.04.2016 - 20:45)
О каких канонах ты все время говоришь?

Чё?


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (8) « Первая ... 3 4 [5] 6 7 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса