mzz - CMF

zerkms

TDD infected
Команда форума
mzz- CMF

MZZ.cms:
- Выполнен в стиле ООП
- Применение паттернов ActiveRecord и TableModule для работы с данными из внешних источников (БД)
- Встроенный ЧПУ
- Оригинальная система шаблонов с использованием Smarty
- Использование PEAR (HTML_QuickForm) для построения форм
- 40-50% кода протестировано simpletest'ом (исходники тестов в комплекте)
Для работы необходимо PHP >= 5.1.1, PDO (MySQL 4/5). Smarty + PEAR + HTML_QuickForm в комплекте.
Это только development версия и местами в коде присутствуют "грязные" места.

Сайт: http://mzz.ru
SVN: svn://svn.subversion.ru/usr/local/svn/mzz
Архив (~450кб): http://www.mzz.ru/mzz-0.0.1dev.zip
Приветствуется здоровая и адекватная критика
 

zerkms

TDD infected
Команда форума
admin
хм... пока ничего из "модулей" толком не написано, так что о скорости говорить рано... есть убогая новостная лента

Generation time: 0.02305 sec. Queries to DB: 1 (0.00002 sec.), prepared: 1
 

crocodile2u

http://vbolshov.org.ru
А зачем "в комплекте" идут Smarty + PEAR + HTML_QuickForm? Думается, что люди, которые захотят установить и покритиковать, уже используют эти технологии (иначе как критиковать?)...
 

zerkms

TDD infected
Команда форума
crocodile2u
это так принципиально? :Р имхо проще положить самому всё что и куда надо, чем писать ридми - что откуда качать, куда ложить итд....
уже используют эти технологии
кстати весьма спорно
 

crocodile2u

http://vbolshov.org.ru
Ну, мне, например, не нужен дубликат PEAR, который у меня уже установлен.

Кроме того - если понадобится сделать апдейт пакета, скажем, квикформ - мне, то есть, придется обновлять две копии пакета? То же самое насчет Смарти.
 

zerkms

TDD infected
Команда форума
crocodile2u
флейм, это 0.0.1-версия, просто решили показать, послушать что скажете...
так что "траблы" с пеаром и смарти как бы вторичны
 

neko

tеam neko
Автор оригинала: zerkms
crocodile2u
флейм, это 0.0.1-версия, просто решили показать, послушать что скажете...
так что "траблы" с пеаром и смарти как бы вторичны
это надо понимать так. что если кто-то автора хочет похвалить -- то полный вперед.
ну а если кому-то что-то не нравится, то это флейм и вторичные "траблы" микронной версии
 

syfisher

TDD infected!!
К сожалению не могу уделить слишком много времени и разобраться полностью что к чему. Поэтому выдам набор мыслей - а там сам смотри - по делу или нет.

Скажу сразу - меня порадовали тесты. Странно, правда, что они лежат в папке www, а не отдельно. Я уж поначалу подумал, что в архиве тесты не включены.

В последнее время у меня начало скаладываться весьма негативное отношение к сильно раздутому setUp() методу. Я предпочитаю выделять методы, например _insertTestingRecords() и вызывать их там, где нужно. То есть я стремлюсь делать каждый тестовый метод в TestCase-е как бы полностью независимым, показывающим полный прецедент использования класса. Правда здесь трудно найти правильный баланс - многое зависит от опыта.

Например, есть тест newsTableModuleTest. Я бы предпочел не делать такой setUp, подходящий для всех тестов сразу:

PHP:
    public function setUp()
    {
        $this->db = DB::factory();
        $this->cleardb();

        $this->newsTM = new newsTableModule();

        $stmt = $this->db->prepare('INSERT INTO `news` (`id`, `title`, `text`) VALUES (?, ?, ?)');

        $stmt->bindParam(1, $id, PDO::PARAM_INT);
        $stmt->bindParam(2, $title, PDO::PARAM_STR);
        $stmt->bindParam(3, $text, PDO::PARAM_STR);
        $id = '1'; $title = 'test_title_1'; $text = 'test_text_1';
        $stmt->execute();
        $id = '2'; $title = 'test_title_2'; $text = 'test_text_2';
        $stmt->execute();
    }
Я думаю, что у меня получилось бы:
PHP:
    function setUp()
    {
        $this->db = DB::factory();
        $this->cleardb();
    }

    function testGetNews()
    {
        $this->_insertNewsRecord($id1 = 1, $title1 = 'some_title1', $text1 = 'some_text1');
        $this->_insertNewsRecord($id2 = 2, $title2 = 'some_title2', $text2 = 'some_text2');

        $newsTM = new newsTableModule();
        $newsAR1 = $newsTM->searchById($id1);
        $this->assertEqual($newsAR1->get('id'), $id1);
        $this->assertEqual($newsAR1->get('title'), $title1);

        $newsAR2 = $newsTM->searchById($id2);
        $this->assertEqual($newsAR2->get('id'), $id2);
        $this->assertEqual($newsAR2->get('title'), $title2);

    }

    function testGetNewsNotExist()
    {
        $newsTM = new newsTableModule();
        $newsAR = $newsTM->searchById($id = 0);
        $this->assertNull($newsAR->get('id'));
    }
и т.д. Многое зависит от предпочтений. Но я лично очень привык использовать тесты в качестве документации, поэтому стараюсь описывать весь прецедент именно в тестовом местоде. Это позволяет сразу понять все, что происходит, иметь под рукой все инициализациооные данные, например, title1, text1 и т.д. А setUp() и tearDown() предпочитаю использовать для таких вещей, от которых могут пострадать другие тесты, например, очистка таблицы, как в случае с newsTableModuleTest.

Далее. Я также предпочитаю иметь все данные, от работы которых зависит тест в самом тесте. Поясняю на примере. sectionMapperTest зависит от файла /www/tests/config/map.xml, так? Нельзя ли было создавать этот файл прямо в самом тесте. Это повысило бы понятность теста:

PHP:
    public function TestSectionMapper()
    {
      $xml = <<<EOD
<?xml version='1.0' standalone='yes'?>
<mapps>
  <test>
    <action name="bar">test.bar</action>
    <action name="foo">test.foo</action>
  </test>
</mapps>
EOD;
      $xml_file_alias = 'configs/map.xml';
      $file_path = TESTS_DIR. $xml_file_alias;
      file_put_contents($file_path, $xml);

      $mapper = new sectionMapper(fileLoader::resolve($xml_file_alias));
      $this->assertEqual($mapper->getTemplateName("test", "foo"), "act.test.foo.tpl");
      $this->assertEqual($mapper->getTemplateName("test", "bar"), "act.test.bar.tpl");

      unlink($file_path);
    }

    public function TestSectionMapperFalse()
    {
        $mapper = new sectionMapper('');
        $this->assertFalse($this->mapper->getTemplateName(null, null));
        $this->assertFalse($this->mapper->getTemplateName('test', '__not_exists__'));
    }
Насчет фреймворка ничего умного сказать не могу :). Так и не понял, где используются команды и View-классы. Вроди не в фильрах, да и не в core классе, кажется. Есть вопрос, почему только один fileLoader? почему не сделать classLoader, configLoader и т.д., а резолверы передавать в качестве стратегии? В остальном - наполнило чуток ранний Mojavi.

В целом неплохо, повышай тестовое покрытие. Посмотрим, что будет в 0.0.2 ;)
 

zerkms

TDD infected
Команда форума
Для дальнейшей разработки хотим пригласить ещё одного программиста, требования:
- знание ООП, Паттернов Проектирования
- применение TDD
- умение работать с SVN (TortoiseSVN)
 

CW

Новичок
>ps: программист для дальнейшей разработки еще требуется
Платите?

А почему такие высокие требования? У многих хостеров стоит еще php 4 :)
 

CW

Новичок
агава, валуехост - пхп 4.3.4

>опенсорс
Жаль. Наверно пора задуматься о premium edition ;)

-~{}~ 09.05.06 17:33:

>а на народе нету даже пхп, значит нужно делать на хтмле? :Р
Кстати для таких условий есть и свои Desktop CMS ^)
 

itprog

Cruftsman
Вышла mzz 0.0.3, скачать можно с http://www.mzz.ru

Хотелось бы услышать мнение по поводу кэширования (system/cache, примеры system/modules/news/)

-~{}~ 18.12.06 18:20:

Тем временем mzz за полгода выросла до версии 0.0.6

Среди нововведений можно отметить появление нового интерфейса, подобие backoffice, улучшенный JIP, ACL, применение Ajax для администрирования сайта, упрощенная структура директорий с шаблонами, нынче модный scaffolding и многие другие изменения.

Начато написание документации для разработчиков, с примером создания собственного модуля-аддона.
 

zarus

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

tf

крылья рулят
itprog, ну и где на сайте о разработчиках написано?
 

tf

крылья рулят
itprog
мне просто интересно чей код смотрю и чего эти люди достигли
бывает такое
не часто удается посмотреть на то кто как пишет в клубе ;)
 
Сверху