Форум → Программирование → PHP для идиотов → PHP и ООП → Свой pastebin
Свой pastebin
Страницы: ← Предыдущая страница • Следующая страница →
-
-
8 июня 2010 г. 9:58, спустя 2 минуты 15 секунд
чуток поспал. сейчас сижу накофеиненный. веки спичками расклинилιιlllιlllι унц-унц -
8 июня 2010 г. 13:05, спустя 3 часа 6 минут 54 секунды
ну мне кажется надо решить, что должна знать о парсере(ах) твоя модель
Вот насчет бэкенда хранилища ты сразу решил, что она ничего кроме интрефрейса на должны знать.
А парсер ты берешь из статического обращения - это означает, что твоя модель знаешь о классе парсеров и
даже если ты определил интерфейс парсера, всё равно обращение к статике ты всё вывалил наружу.
Это моё лично ИМХО, то есть я за Push approach именно.
А вообще и так пойдёт ) -
8 июня 2010 г. 13:36, спустя 30 минут 29 секунд
А парсер ты берешь из статического обращения - это означает, что твоя модель знаешь о классе парсеров и
даже если ты определил интерфейс парсера, всё равно обращение к статике ты всё вывалил наружу.
чушь. я знаю только класс-локатор. помоему ты слишком зациклен на одном способе разруливания зависимости.
я бы придушил того, кто писал русскую страничку wiki про Dependency injection. какбы и не ложь, но иные способы проскакивают без подробностей и ссылок. лучше всего расписано на agiledev, ссылку я приводил выше.
open your mind!ιιlllιlllι унц-унц -
-
8 июня 2010 г. 13:55, спустя 24 минуты 27 секунд
Как-то ты рано сдаешся. Обосновывай своё ХО.
Я знаю слабое место в моей реализации - интерфейс в локаторе никак не проверяется :) А наверное надо и сделать это нетрудно.Спустя 295 сек.Я передаю в пастебин не готовый объект, а текстовый id парсера потому что мне хочется сохранить его в базе. Я вижу в существующих пастебинах, что инфа о языке сохраняется.
Я передаю в пастебин готовый бекэнд, потому что мне незачем сохранять в базе инфу о базе.ιιlllιlllι унц-унц -
8 июня 2010 г. 14:08, спустя 12 минут 57 секунд
artoodetoo, та я не сдаюсь, просто я же тебя не сильно знаю, начнёшь еще психовать ;) а я не хочу ссориться ))
Я считаю, что если у тебя есть модель, то она просто должна быть не зависимой от внешней среды. Статика убивает эту независимость. А если ты проинжектишь контрейнер парсеров, дав знать модели об интерфейсе объекта (при инжекте тип и проверишь), то тут всё что мне не нравиться ляжет в свои пазы, как ложиться сейчас бекенд сохранения. -
8 июня 2010 г. 14:13, спустя 5 минут 27 секунд
хорошая у меня ава, правда?
я соглашусь что надо передавать готовый парсер через конструктор, если ты мне объяснишь:
1. как я смогу сохранить в базе ссылку на тип распарсенного текста
2. как ты видишь создание объекта парсера без локатора. вот из формы поступили текстовые поля тип текста и сам текст, что дальше…ιιlllιlllι унц-унц -
-
-
8 июня 2010 г. 15:06, спустя 27 минут 59 секунд
короче по шурику писал, може где то что то нет, но думаю понятно будет что я хотел:<?php
class PastrbinModel {
private $_backend;
private $_parsers;
public function __construct(Backend $backend, Parsers $parsers)
{
private $this->_backend = $backend;
private $this->_parsers = $parsers;
}
public function parse($parserId, $text, $userId)
{
$result = $this->_backend->load($userId, $parserId, $text);
if (!$result) {
$parser = $this->_parsers->find($parserId);
if (!$parser) {
return false;
}
$result = $parser->parse($text);
$this->_backend->save($userId, $parserId, $text, $result);
}
return $result;
}
public function getParsersIds()
{
return $this->_parsers->getIds();
}
}
class Parsers {
private static $_instances = array();
private static $_allowedIds = array(
'html',
'php'
)
public function find($parserId)
{
if (!in_array(self::$_allowedIds)) {
return false;
}
if (!isset(self::$_instances[$parserId])) {
$className = 'Parser' . $parserId;
self::$_instances[$parserId] = new $className();
}
return self::$_instances[$parserId];
}
public function getIds()
{
return self::$_allowedIds();
}
}
class Backend {
public function save($userId, $parserId, $text, $html)
{
//как нить сохраняешь
//что трудно сохранить чтоли $parserId в виде стобца в таблице
//или просто файл с именем 'data_' . $parserId . '_' . $userId . '_' . md5($text);
//да масса вариатнов
}
public function load($userId, $parserId, $text)
{
}
}
//Пользователь отправил форму
//ты выделил $bb = 'js' $text = "alert('aaa');"
$pastebinBackend = Toolkit::getBackend('file')
$pastebinParsers = new Parsers();
$pastebin = new PastrbinModel($pastebinBackend, $pastebinParsers);
$html = $pastebin->parse($bb, $text, $user->id);
if ($html === false) {
$view->bbenabled = $pastebin->getParsersIds();
}
else {
$view->text = $html;
} -
8 июня 2010 г. 15:07, спустя 50 секунд
Урааа, Костян пишет имена методов и переменных с маленькой буквы! -
-
-
8 июня 2010 г. 19:07, спустя 1 час 32 минуты 11 секунд
Вцелом понятно. Лишние private в теле конструктора, in_array() с одним аргументом спишем на невнимательность.
По существу: тайпхинтинг в конструкторе надо делать через интерфейсы, а не конкретные классы. У тебя фактически связи не ослабли. Ты ссылаешся на конкретный класс Parsers в котором к тому же перечислены конкретные языки (т.е. косвенно указаны классы-парсеры). Очень жестко всё повязано. То есть цель не достигнута.ιιlllιlllι унц-унц
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!