![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 | ||
Старожил
Регистрация: 09.09.2008
Сообщений: 2,624
|
![]() Цитата:
Например как нам велит SQL92 выбирать первые 10 строк из ответа? Цитата:
Стрелок-охотник
|
||
![]() |
![]() |
![]() |
#12 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#13 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
Если никто не против буду спрашивать некоторые моменты в этой теме.
На данный момент я пришел к выводу, что давать доступ к членам классов модулей не нужно: 1. Отсутствие возможности организовать разделение прав по действиям. 2. Концентрирование вызова действий связанных с конкретными методами модулей в одном месте, тут же можно организовать и валидацию передаваемых аргументов. Например так сейчас выглядит описание действий по созданию таблиц: PHP код:
Здесь первый параметры это имя действия, второй метод, с которым оно связывается, третий идентичен обязательным параметрам функции. При этом допускается несколько разных вариаций этих параметров для одного и того же действия. Задача стоит следующая. Т.к. не только модули могут вызывать эти действия, но и пользователи посредством форм или адресной строки браузера, то нужно проверять входные данные на валидность перед вызовом того или иного действия. На текущий момент мне никто не запрещает сделать следующее: Код:
Набрасал небольшой прототип класса: PHP код:
PHP код:
Код:
Смысл в этом классе примерно такой же как в filter_var_array. __Продолжение ниже__ |
![]() |
![]() |
![]() |
#14 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
Само сабой проверка данных должна производиться не всегда. Т.к. это может сильно сказаться на производительности. Предлагается ввести влаг safe для функции которая вызывает действие, если этот флаг включен, то валидация проходит как есть, если выключен, то будет осуществлена только проверка на наличие необходимых аргументов.
Следующая из 3-х первостепенных на данный момент задач, стоит класс описания форм. В идеале форма должна построиться исходя из действия с которым она связывается. Например форма изменения информации о пользователе, есть объединение 2 действия, которые привязаны к 2-м разным таблицам. prefix_users и prefix_profiles. Выглядеть это должно примерно так: makeForm(['editUser','editUserProfile']); или в строке браузера: Код:
Сейчас описании формы выглядит ужасно в плане гибкости: PHP код:
Код:
1. Smarty (v2) --всеми силами стремиться выправить руки тем, кто пишет javascript в шаблонах 2. Twig 3. Handlebars 4. Simple JavaScript Templating --xD 5. Histone 6. XSLT В этом направлении хочется сделать следующую штуку. Исходя из того, что ограничивать в выборе шаблонизатора нельзя, а также из соображений оптимизации, т.е. вынос рендеринга некоторых шаблонов за пределы сервера следует, что нужно писать общий интерфейс для модулей View. Например если шаблонизатор не поддерживает исполнение на стороне клиента, то он рендерится на сервере и возвращается готовый html, если запрашиваемый шаблон сверстан отдельно для клиента возвращаются только данные и если JS не кэшаровал шаблон, то и он. Т.е. 3 ситуации: 1. Один шаблон и для клиента и для сервера 2. 2 варианта шаблона, для сервера и для клиента -- этот вариант был опробован очень давно, не хотелось бы повторения 3. только для сервера Где это можно применить. Например рендеринг ajax форм. На стороне клиента грузится шаблон, а дальше приходят только данные, отсюда сильная разгрузка сервера. Динамичное обновление содержания страницы, комментариев или чата. Например если реализован logn poll(или бесконечный фрейм и т.д.) то серверу будет достаточно присылать js функцию с параметрами, например текстом нового комментария или сообщения. В качестве шаблонизатора который будет работать как на стороне сервера, так и на стороне клиента был выбран Histone. Его возможности сильно ограничены, например нет наследования шаблонов, но его реализация очень проста и прозрачна. Понравилось что перегоняет шаблон в abstract syntax tree(AST), которую позже удобно использовать в качестве кэша. Последний раз редактировалось Kostia; 29.12.2013 в 21:12. |
![]() |
![]() |
![]() |
#15 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
Запишу некоторые мысли, и если возможно хотел бы услышать мнение форумчан по этому поводу.
В плане определения идеала я придерживаюсь следующего: Цитата:
Задача все та же, валидация, описание форм и их представление. Одна из самых сложных форм, которую мне когда либо приходилось делать выглядит так: http://neepic.net/image/direct?imgSr...79f8825c42.png Есть мнение, что мне получится реализовать способ описания, которым не умоляя общности можно было просто описать простые формы, а также описывать и такие формы, как на картинке. Начну с малого, а расти вроде есть куда. Есть некоторое действие, которое добавляет в базу описание таблицы, упрощенно: Код:
Код:
Задав типы и их длины, можно ввести отображения этих типов, в разные элементы формы, опишем функцию отображающую строковые типы в тип text(n)(s): Код:
Код:
Код:
Далее во View определим отображения для списка и текста. Это в общем то просто шаблоны и в результате должны получить вот такую форму: http://neepic.net/image/direct?imgSr...d109423142.png Теперь самое главное. Отображение должно быть биективным, а также должно существовать обратное отображение. Пример простых отображений: Код:
Код:
Что получаем в конечном итоге: Код:
Код:
Далее возможно усложнение структуры описания, например объединение нескольких типов в один метатип(контейнер), для группировок при отображении. Введение различных штук для описания динамических форм, содержание которых будет менять по мере введения новых данных и т.д. Последний раз редактировалось Kostia; 31.12.2013 в 18:50. |
|
![]() |
![]() |
![]() |
#16 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
Мне все также требуется помощь!
![]() Времени было совсем мало, но то что задумывалось в предыдущем частично реализовано, точнее создан прототип, который будет развивать и изменяться далее. Пример: PHP код:
is_numeric и required выполняют проверку только в одном направлении (from), в случае с to, вход отображается сам в себя всегда. Типы у преобразований я также не указываю, они вычисляются сами, но можно их задать вручную: PHP код:
PHP код:
Типы делятся 2 подтипа, те что умеют "отображаться", и те что нет. На самом деле никаких шаблонов или html нет, просто у одних типов можно получить описание для дальнейшего его отображения в форме или таблице(html) с данными, а другие нет. Например для такого действия: PHP код:
PHP код:
Также планирую создать что-то типа фабрики параметров (приглянулся prototype pattern) для уменьшения повтора кода, рассматриваю даже способ описания параметров с помощью строки со всякими суффиксами и префиксами, типа "textv_req", "intt_num_req" и т.п. Любое действие можно вызвать напрямую, без преобразований и проверки типов с помощью $act->direct_call($args), такое возможно только внутри модулей для повышения производительности. Также будут реализованы классы(интерфейсы) типов, числовые, строковые и т.д. PHP код:
В идеале хочется довести все до мышкотыканья в процессе описания будущего сайта и всех его сущностей и при этом удобного ) Модель сущностей требует отдельного разговора. Последний раз редактировалось Kostia; 18.01.2014 в 00:51. |
![]() |
![]() |
![]() |
#17 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
Сущности.
Если мыслить сверху вниз, то получится, что сначала мы думаем о том, какая сущность нам нужна(товар, новость, комментарий, страница ...), а потом описываем ее с помощью таблиц и связей между ними, бизнес логики и способах представления. Наследование сущностей, одна из сильных сторон, которую собираюсь реализовать в движке. Например в большом интернет магазине могут быт товары из разных категорий, да и вообще может быть несколько прилавков(магазинов на одном скрипте), товары которых могут пересекаться, а могут и нет. Например у магазина компьютерных компонентов, могут существовать товары разных категорий: материнские платы, процессоры, видеокарты, жесткие диски и т.д. Все они являются товарами и обязаны иметь цену и например вес, все базовые параметры добавляем в базовую(абстрактную) сущность "товар" и все остальные товары наследуем от нее. Далее можно описать логику покупки товаров, не вдаваясь в подробности о том, что это за товар. Также реализуем общую для всех логику сравнения товаров относящихся к одной и той же категории. А если пойти еще дальше, то можно реализовать и функцию сбора компьютера из имеющихся комплектующих, например пользователь задает ограничения виде цены, процессора, объема памяти, а все остальное система подбирает автоматически. Смешивание сущностей. Иногда возникает вопрос, как же реализовать комментарии сразу и к новостям и к товарам, статям и т.д. При этом если разрабатывать новый проект и взять за основу старый, чтобы можно быстро поотключать некоторые штуки не лазя в сам движок или наоборот включить. Наследование сущностей это просто связывание таблиц по внешнему ключу. В виду того что движок сам конфигурирует базу данных, то можно легко определить этот функционал. Получается что существуют новости и комментарии как 2 отдельные сущности, потом подмешиваем комментарии к новостям(операция не коммутативна). Можно реализовать общую логику для смешивания (хоть комментов самих с собой, комментирование комментариев ![]() Примерно так это себе представляю. Посмотрю что получится, будет неудобно, придется искать другие идеи и решения ) |
![]() |
![]() |
![]() |
#18 | ||
Участник клуба
Регистрация: 08.03.2008
Сообщений: 1,537
|
![]() Цитата:
Мне кажется, вы многое чего перемудрили. Получится сложный код который трудно будет модифицировать и перетягивать из проекта в проект. Хотя многое зависит от самой структуры системы. Можно код на посмотреть? Я тоже писал свою cms, но я не заморачивался на столь сложную систему, тк. всего все равно не предусмотришь и нужно будет допиливать код. Просто взял за основу зенд, его mvc структуру, написал сайт, админку под нужды конкретного проекта. Потом в следующих проектах выкидывал ненужные модули и дописывал недостающие. Хотя сейчас бы я взял один из микрофреймворков за основу. Зенд тяжеловат. С базой данных совсем не заморачивался, написал простенький класс, который принимает sql запросы и выдает результат. Есть же куча готовых ORM, зачем придумывать велосипед, тратить на это время и силы. Хотя вот как по мне, PDO + нативные sql запросы это самое то. Любая ORM это минус к быстродействию. Мне кажется, вы какого-то монстра городите. Цитата:
PHP код:
PHP код:
Последний раз редактировалось Gorychev; 18.01.2014 в 10:33. |
||
![]() |
![]() |
![]() |
#19 | |||||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]() Цитата:
Например человек на складе, который занимается сбором заказа и упаковкой, должен видеть только заказы и не иметь возможности править что либо еще. А контент-менеджер только определенные страницы и модули. Также если прикинуть, что админка, это такие же страницы, как и остальные, но с ограниченными правами доступа, то вся возня с правами доступа станет обычной рутиной и тыканьем мышки. Поэтому я и отказался от нативных запросов и убрал спрятал эту возможность куда подальше. Цитата:
Цитата:
Цитата:
PHP код:
Цитата:
Я много заимствуют от Линукса при построении системы. Например разделение по правам, это адаптация того что есть в линуксе). Также собираюсь реализовать систему пакетов, подобную dpkg, ведь не все состоит из модулей, есть и просто всякие штуки, типа js библиотек, php библиотек, и т.д. Например одним шаблонизатором могут управлять разные модули ) А под модулем понимается не новости или комментарии, а штуки очень специализированные. Например модуль управления сессиями, управление пользователями и правами, доступ к базе данных и т.д. Хотя можно и новости со статьями городить в виде модулей. |
|||||
![]() |
![]() |
![]() |
#20 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Что сейчас актуально, движки, CMF и так далее. | dertsb | WordPress и другие CMS | 1 | 12.12.2013 07:25 |
«Сайт под ключ» на cmf Drupal | manachud | Фриланс | 0 | 14.09.2011 21:00 |
Буду делать Аркаду 2D, ищу помощников | CyberOrcX | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 46 | 17.06.2009 09:48 |
Набираем помощников. Игра SanCIty | microran | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 1 | 11.09.2007 19:42 |
Набираем помощников. Игра SanCIty | microran | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 0 | 31.08.2007 17:45 |