Здравствуйте, anton_t, Вы писали:
_>Здравствуйте, ironwit, Вы писали:
I>>Здравствуйте, anton_t, Вы писали:
_>>>nnm.ru то ещё глюкалово.
I>>а это зависит от используемого языка?
_>А что зависит от приведённого списка?
список был просто как пример того что можно хоть чтото сделать, Вы же сразу указали на глюки — ИМХО глюки зависят не от языка а от рук.
Здравствуйте, ironwit, Вы писали:
_>>>>nnm.ru то ещё глюкалово.
I>>>а это зависит от используемого языка?
_>>А что зависит от приведённого списка?
I>список был просто как пример того что можно хоть чтото сделать, Вы же сразу указали на глюки — ИМХО глюки зависят не от языка а от рук.
И от языка тоже зависят. Например, неужели кто-то будет обрабатывать очень большие объёмы данных на Perl? Тот просто упадёт от утечек памяти. И никакими руками это не выправить. PHP обработает раз в сто больше данных и тоже упадёт.
Другой вариант: Perl не является обратно совместимым языком. Не факт, что скрипт для Perl 5.005 будет работать на более современных версиях так же. Не факт, что он вообще будет работать. Ошибки могут и отсюда проистекать.
Здравствуйте, Cyberax, Вы писали:
C>На PHP это писалось бы раз в 10 дольше из-за того, что сначала пришлось C>бы написать на нем что-то типа Struts, а потом только писать само C>приложение. DB mapping layer тоже пришлось бы писать самому...
CakePHP(http://cakephp.org)
Symfony(http://symfony-project.com)
jtraub wrote: > C>На PHP это писалось бы раз в 10 дольше из-за того, что сначала пришлось > C>бы написать на нем что-то типа Struts, а потом только писать само > C>приложение. DB mapping layer тоже пришлось бы писать самому... > CakePHP(http://cakephp.org) > Symfony(http://symfony-project.com)
Уже начали изобретать Hibernate? Что же, слегка недооценил PHP...
Здравствуйте, Cyberax, Вы писали:
C>Уже начали изобретать Hibernate? Что же, слегка недооценил PHP...
а что это такое? только в двух словах и не в инет, а то у меня его нет
ironwit wrote: > C>Уже начали изобретать *Hibernate*? Что же, слегка недооценил PHP... > а что это такое? только в двух словах и не в инет, а то у меня его нет
OR-mapper для Java. Причем ОЧЕНЬ мощный.
Позволяет отображать объектную модель на базу данных. Простой и красивый
пример сейчас лень искать, вот из документации:
Cat cat = new DomesticCat();
Cat kitten = new DomesticCat();
Set kittens = new HashSet();
kittens.add(kitten);
cat.setKittens(kittens);
session.persist(cat); //Здесь в базу будет добавлена кошечка и котенок
Здравствуйте, Cyberax, Вы писали:
C>ironwit wrote: >> C>Уже начали изобретать *Hibernate*? Что же, слегка недооценил PHP... >> а что это такое? только в двух словах и не в инет, а то у меня его нет C>OR-mapper для Java. Причем ОЧЕНЬ мощный.
спасибо. интересно. Даже очень. Интересно — есть ли аналог для Delphi
Здравствуйте, Cyberax, Вы писали:
C>Позволяет отображать объектную модель на базу данных. Простой и красивый C>пример сейчас лень искать, вот из документации: C>
C>Cat cat = new DomesticCat();
C>Cat kitten = new DomesticCat();
C>Set kittens = new HashSet();
C>kittens.add(kitten);
C>cat.setKittens(kittens);
C>session.persist(cat); //Здесь в базу будет добавлена кошечка и котенок
C>
/* initialize Propel, etc. */
// 1) Create an Author (row of 'author' table)include_once'bookstore/Author.php';
$author = new Author();
$author->setFirstName("Leo");
$author->setLastName("Tolstoy");
// note: we don't save this yet
// 2) Create a Publisher (row of 'publisher' table)include_once'bookstore/Publisher.php';
$pub = new Publisher();
$pub->setName("Viking Press");
// note: we don't save this yet
// 3) Create a Book (row of 'book' table)include_once'bookstore/Book.php';
$book = new Book();
$book->setTitle("War & Peace");
$book->setIsbn("0140444173");
$book->setPublisher($pub);
$book->setAuthor($author);
$book->save(); // saves all 3 objects!
В CakePHP реализован свой ORM-слой, но тем не менее, код выглядит не менее красиво
особенно со всякими $book->findByIsbn
C>Пока проекты на PHP напоминают проекты на Java где-то 2000-2001 года.
На PHP пишу уже три года. На java не писал ничего(строго говоря, я ее даже в глаза не видел-то ).
Потому судить не могу.
jtraub wrote: > C>Сравните объем: > C>http://propel.phpdb.org/trac/wiki/Users/Documentation/UserGuide > C>и http://www.hibernate.org/hib_docs/v3/reference/en/html/ > Объём докуметации не такое уж хорошее свидетельство того, что PHP сильно > отстал от Java.
Ну сравните по возможностям mapping'а, хотя бы по количеству типов
отображения.
> C>Пока проекты на PHP напоминают проекты на Java где-то 2000-2001 года. > На PHP пишу уже три года. На java не писал ничего(строго говоря, я ее > даже в глаза не видел-то ). Потому судить не могу.
Я на Java пишу с конца 90-х годов и сам видел всю последовательность
развития. Так вот, сейчас PHP в точности проходит всю эту
последовательность.
Через пару лет в PHP мы увидим контейнеры, управляющие транзакциями,
компонентные web-фреймоворки и т.п.
Здравствуйте, ironwit, Вы писали:
I>спасибо. интересно. Даже очень. Интересно — есть ли аналог для Delphi
В рамках Дельфи сделать такое проблематично, говорят
Возможности кодогенерации и RTTI оставляют желать лучшего. Потому можно не рассчитывать увидеть многих фишек.
Но отдельного внимания заслуживает InstantObjects (http://www.instantobjects.org/).
Конечно, там будет не так все круто как в Java/PHP, но тем не менее — удобно!
C>Через пару лет в PHP мы увидим контейнеры, управляющие транзакциями, C>компонентные web-фреймоворки и т.п.
Что же.. Расскажите, чего ждать в PHP в ближайшей перспективе еще.
jtraub wrote: > C>Через пару лет в PHP мы увидим контейнеры, управляющие транзакциями, > C>компонентные web-фреймоворки и т.п. > Что же.. Расскажите, чего ждать в PHP в ближайшей перспективе еще.
Байт-компиляция, возможно, более строгая система типов и JIT. Особенно
актуальным станет после того, как фреймоворки подрастут в размерах.
Появятся фреймворки с декларативным управлением компонентами (аля
Spring), возможно что-то типа EJB.
Здравствуйте, Cyberax, Вы писали:
C>jtraub wrote: >> C>Через пару лет в PHP мы увидим контейнеры, управляющие транзакциями, >> C>компонентные web-фреймоворки и т.п. >> Что же.. Расскажите, чего ждать в PHP в ближайшей перспективе еще. C>Байт-компиляция, возможно, более строгая система типов и JIT. Особенно C>актуальным станет после того, как фреймоворки подрастут в размерах.
Ну еще с 4-ой версиии скрипты при запросе комплируются в байт-код.
Насчет JIT compilation не скажу точно, надо подглядеть Zend-овский сайт.
C>Появятся фреймворки с декларативным управлением компонентами (аля C>Spring), возможно что-то типа EJB.
А можно чуточку подробней?
jtraub wrote: > C>Байт-компиляция, возможно, более строгая система типов и JIT. Особенно > C>актуальным станет после того, как фреймоворки подрастут в размерах. > Ну еще с 4-ой версиии скрипты при запросе комплируются в байт-код.
В том-то и дело, что только при запросе.
> Насчет JIT compilation не скажу точно, надо подглядеть Zend-овский сайт.
Она есть, но пока только за деньги.
> C>Появятся фреймворки с декларативным управлением компонентами (аля > C>Spring), возможно что-то типа EJB. > А можно чуточку подробней?
Spring позволяет декларативно задавать окружение для прикладного кода.
В качестве простого примера на псевдокоде:
//Наш код, делающий что-тоvoid doSomething()
{
//взять соединение с DB. CONNECTION_STRING нам самим надо
//прочитать из конфига.
DatabaseConnection conn=getConnection(CONNECTION_STRING);
try
{
//что-то сделать
conn.executeSql(...);
...
}finally
{
//Обязательно закрыть соединение.
conn.close();
}
}
Если мы забудем finally, то получим утечку соединения. Поэтому применяют
шаблон "Инверсия Управления" (IoC — Inversion of Control):
//Этот код находится в глубине контейнера, хорошо отлажен и проверен
//кучей людейvoid database_wrapper(Runnable task)
{
//Чтением конфига занимается контейнер
DatabaseConnection conn=getConnection(readConfig("db_string"));
//В реальности имя берется из конфига
getThreadContext().addResource("DataBase",conn);
try
{
task.run();
} finally
{
conn.close();
}
}
//Наш кодclass MyTask
{
void run()
{
//Берем соединение из контекста
DatabaseConnection conn=getResource("DataBase");
conn.executeSql(...);
...
}
}
//А вот так мы выполняем наш код
database_wrapper(new MyTask);
То есть контейнер обеспечивает "обертку" для прикладного кода,
освобождая его от необходимости следить за DB, конфигурацией,
транзакциями и т.п.
Здравствуйте, Cyberax, Вы писали:
C>Не могут. Для PHP/Perl есть попытки сделать MVC-систему, но они пока C>далеко не ушли (в основном из-за стиля программирования "а вот ща мы C>здесь SQL воткнем и все ОК").