Как стать автором
Обновить

Комментарии 53

Как всегда сразу радую глаз схемы. :)
Очень похоже на подход который использован в сервисе структур (сервис управления базой данных через типы и объекты): hivext.ru/index.php/Структуры

А ниже пример на Javascript, хотя можно на любом языке работать с сервисом.
hivext.ru/index.php/Javascript.Объекты
Как-то это все слишком сложно получается. До недавнего времени тоже изобретал свой велосипед. Понял, что даже если и допишу, слишко много потом допиливать при нестандартных задачах. На днях решил остановиться на Yii с его реализацией ActiveRecord. Также присматривался к реализации в Limbo, но мне структура кода не очень приглянулась.
Прошу прощения, опечатка, в Limb.
раз уж смотрели лимб — может посмотрите и у нас? :-) (ссылка в профиле)
C удовольствием, но ссылку так и не нашел в профиле.
Бегло ознакомился, в целом неплохо, только имхо можно упростить описание связей many to many. Ну и имхо зря у коллекицй добавление через [] блокируется. Мелочь, а приятно.
пока не до arrayAccess особо — разгар переезда на новый орм %)
В чем такие схемы ресуются?
НЛО прилетело и опубликовало эту надпись здесь
ответе на мой ответ… ))

А если серьезно то автор говорит что рисует все руками во флеше

p.s.
смотри комментарий ниже
Вовка уже сто раз отвечал на этот вопрос: в обычном векторном редакторе.
Если я не ошибаюсь, он использует флеш.
тоже интерсно узанть, статью еще не читал. но схемы радуют глаз
Вы новички? )) в каждой статье спрашивают, потом ещё и на сайте… — руками во флеше
Хотелось бы тогда попросить в будущем написать статьи по рисованию красивых диаграмм. Наверняка ведь есть какие-то хитрости, ибо столько нарисовать в единообразной форме и так аккуратно не так-то просто голыми руками.
А у тебя наверное есть уже какаято подборта объектов, цветов во флеше? поделишся файликом .flа?
тут народ проявляет больший интерес к диаграмма чем к архитектуре системы :).
Чем-то напоминает ситуацию когда небольшой драгоценный камень вставляют в толстые и тяжелые изделия из драг метала. Получается из-за массы и блеска оправы камня то и невидно…
Предлагаю вам отложить разработку CMS и начать разрабатывать флеш-диаграмы :))
Совсем не радуют. Нихрена не понятно, даже разбираться не стал. Такое впечатление, что человек при составлении схем пользовался недавней статьёй про презентации «Как заставить слушателей почувствовать себя идиотами». Кто ясно мыслит, тот ясно излагает.
В первой части есть объяснение диаграммы
Всегда думал что диаграммы служат для наглядного пояснения текста, тут оказывается наоборот, пояснять нужно сами диаграммы. Доводилось видеть схемы много проще этих для куда более сложных систем.
вы когда первый раз увидели uml диаграммы, они вам сразу были понятны и все поясняли??? Мне нужно было найти вариант отображения сущностей одновременно со спецификой класса и объекта и мною было сделано пояснение выбранного варианта в первой части статьи…
Зря минисуете его :) Уже вторая диаграма из разряда — убейте меня тапком.

P.S. Может стоит посмотреть в сторону генераторов диаграмм классов в VS или Eclipse?
Когда начальство настояло на использовании Друпала для создания новостной ленты — я офигел несколько опешил от используемого количества таблиц (это для новостей-то). Чувствуется, здесь будет такая же болезнь, помноженная на бесконечные привязки всего ко всему. Под мало-мальски значимой нагрузкой ваше решение упадет.
еще раз убеждаюсь что об одном и том же люди думают в одно и тоже время но в разных точках Земли.
мы также используем ORM в нашем сервисе структур данных, но используя для этого Hibenate. Наша реализация запрограммирована на Java и немного сложнее на стороне сервера при создании своих типов, но зато более гибка в последующем при работе с объектами конкретного типа(-ов). Мапинг обьектов осуществляется на основе динамически сгенерированых классов с последующей их загрузкой в runtime. Классы генерируются соответственно на основе данных предоставленых юзером о типе объекта. Для запроса, поиска, удаления объектов используются JSON или SQL подобный синтаксис, который на сервере трансформируется в Hibenate Criteria. Также реализована Lazy («ленивая», по требованию) загрузка свойств объектов.
С учетом того что мы разрабатываем на разных ЯП, рад что кто-то реализовывает чем-то схожую с нами архитектуру работы с объектами.

P.s.: диаграммки чудо! в чем это они сгенерированы?
Hibenate — это всё же немного другого класса инструмент. Там есть кэш первого уровня, кэш второго уровня, различные виды Lazy-инициализации, различные способы задания маппинга, различные способы отображения иерархий объектов в модель, свой язык запросов…

Сравнивать Hibernate с тем, что описано в статье, это то же самое что сравнивать современный многоцелевой истребитель с самолетами первого десятилетия после братьев Райт — да, вторые тоже летают, но им еще предстоит долгий путь развития до того уровня, когда они будут столь же эффективны, как и первые.
ну почему же, всегда можно сравнивать что с чем-то просто, главное определить критерии сравнения. В данном случае я хотел подчеркнуть схожесть применения [b]динамического[/b] мапинга объектов в таблицы БД.
Никто и не спорит что реализация такого мапинга у Hibernate на несколько порядков выше. А если учесть что это дело совместно используется со Spring (Transactional, DAO, прочее) + Invocation + Reflection — тогда становится очевидным возможный уровень реализации…
Гибкость — это, конечно, хорошо. Мне подобная идея приходила в свое время. Но неприятны два момента:
1 — производительность в работе с БД. у меня возникают большие сомнения, хотя я и не знаток в этой области.
2 — красота и изящество реализации этого на ПХП. выглядит это, простите, не очень. слишком многабукаф.
всё верно)
А я из принципа не буду спрашивать о редакторе диаграммок — читал предыдущую статью ;)

1. Названия методов (setA, setP и т.д.) ни о чем не говорят, как-то некрасиво.
2. Если уж Вы в методе Create проверяете на наличие уже созданного объекта, может переименовать его в Instance?

А вообще как-то все сложновато выглядит, если для базовых типов данных надо создавать классы…
Да, и еще — если Вы передаете в Create() какие-то числа, заранее привязанные к определенным типам объектов, наверное лучше их объявить как константы (типа BOO_ID, BOO_STRING и т.д.), так читается легче.
Топикстартер сильно идеализирует универсальность и KISS'ом тут даже не пахнет.
A — Attribute
P — Property
L — Link
set/get
setAttr()
setProp()
setLink()
всего на три символа длиннее, а насколько читабельнее! Так ведь можно и вместо set/get писать s/g
смысл орм — скрывать слой хранения данных от программного кода.
конкретной спецификацией A/P/L вы этот принцип нарушаете.
Почему же ничего не говорит, я сразу бросил статью читать и начал любоваться диаграмами, они в статье самое ценное. Опыт подсказывает, что для нормальной реализации ORM нужен нехилый опыт, а стиль указывает на его отсутствие.
Похоже на интерпретатор Ruby, реализуемый на PHP
НЛО прилетело и опубликовало эту надпись здесь
Я пошел совершенно обратным путём, которым сейчас пользуюсь.
У меня создаваемая и используемая структура полностью зависит от структуры в SQL БД.
То есть класс генерится тоже от БД, но от полей, заданных в SQL:
class Path extends CDBItem{
  function lenght(){
    return sqrt($this->width*$this->width+$this->height*$this->height);
  }
}
  
class DBPath extends CDataBase{
  protected $objectname="Path";
  
  function get_byStation($id){
    return $this->get_bySelect()->where("stationID=? ORDER BY point",$id);
  }
}

$StationBusDB=new DBPath($sql->table('station_bus'));

//Простое отображение БД
$SearchDB=new CDataBase($sql->table('search'));


За материал спасибо, всеравно интерестно почитать.
Ваш вариант, кстати проще и технологичнее чем у автора :)

Нет смысла создавать механизм для записи конфигурации моделей в БД, если тебе все равно где-то придется эту конфигурацию задавать. Лучше это сделать 1 раз и в одном месте. Т.е. нужен только механизм чтения.
Ждем третью часть ,-)
О боже!..
$class = Object::Create();
$class->setP('class', Object::Create(2)); // определение класса для объекта (создание объекта класса #2) — создается класс
$class->setP('extend', Object::Create(53)); // наследует простой материал
$class->setA('sys_name', 'news'); //системное имя класса
$class->setA('final',0); // можно наследовать
$name = Object::Create(null, 4); // создание объекта класса #4 (создание строки)
$name->setA('value','Новость');
$class->setP('name', $name); // свойство названия класса
Вы правда думаете, что такой код гибче и проще в поддержке?
а его не нада писать)) это в статье приведен пример РУЧНОГО создания классов и объектов, на самом деле будет создан вебинтерфейс и контроллер, который всем этим будет сам заниматься.

И тут нет ничего сложного: связь на класс, на наследуемый класс, название класса… и связь на объект-строку Новость… все понятно) все осмысленно
Это кошмар!
Отлично! спасибо за статью и проделанную работу.
Я просто мечтаю, что бы появились семантические базы данных (или обьектно ориентированные), но только в промышленном и общедоступном виде…
схемы в приятной пастельной палитре, спасибо! я сохранил и сделал стильные обои для рабстола.
а текст не осилил…
Как многие заметили — схемы получились классные. Может вам создать продукт который будет такие вот схемы делать?
да вот думаю тоже)))
Не стану оригиналом, если скажу что вся эта конструкция будет безбожно тормозной. Видел несколько лет назад реализацию CMS в таком духе от одной из студий. Там всё было попроще. Общая таблица с id, parent_id, class_id. Таблица с описанием полей: name, ru_name, свойства какие-то ещё. И непосредственно таблицы под каждый класс. Соответственно сначала по id из главной таблицы дёргался класс. Потом если надо описание полей. Если не надо — сразу информация из таблицы класса.

К чему я всё это? На очень средненьких проектах на обычном хостинге эта штука начинала лагать и тормозить, хотя и держалась. Когда все запросы проходят через одну таблицу — это не есть хорошо. Сейчас конечно и машины посильнее и хостинг подешевле. Но у вас структура избыточно раздута. Это будет CMS ориентированная на разработчика, а не на пользователя. Наверное здорово, что можно будет за 15 минут собрать хомячка, но на проекты покрупнее этого монстра врят ли кто решится поставить. А для CMS это верная смерть.

С другой стороны, если всё это пишется для собственного развития, то задумка хорошая.
Согласен, это так-то все видят — за гибкость производительностью платить)).

В данной ситуации — это все равно что поиск лучшего хода в шахматной игре полным перебором, но ведь сама цель сделать компьютер победителем в шахматах у человека не отвергается, а предлагаются и реализуются оптимизированные алгоритмы не требующие полного перебора. На подобии можно пойти и в достижении гибкости cms — новые подходы кэширования, оптимизация загрузки из БД созданием каких-то расчетных таблиц, ну придумать есть что))
Не стоит привязывать думаю к языку модель данных! Модель данных гораздо сложнее и управлять всеми преимуществами из языка есть не очень хорошая задача которую в основоном не получится реализовать. Лучше как тут уже предлагали читать то что уже есть и строить модель отталкиваясь этой служебной информацией. А эту струтктуру можно и нормализовать в другом виде также в БД :-)
К какому языку? языку программирования? Если про язык программрования, то тут как раз модель данных независима от языка программирования
Да сам данные согласен но реализация немного сложноватая, мне так кажется, так как думаю что ты пытаешься сделать некий образ языка с наследованием и вскими фишечками. Вот если ты возмешь PostgreSQL то там свзяи (FOreign Keys) тоже хранятся в служебной информации можно ими пользоватся. Я к тому что нужно свести к минимум изобретения еще какой-то прослойки это приведет к дополнительным ошибкам.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории