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

Пользователь

Отправить сообщение
брутфорс — это полный перебор, чтобы его осуществить понадобилось бы в разы больше времени. Этот алгоритм ищет решение для конкретного уровня за конечное время.
Есть еще вот такое решение github.com/igrigorik/em-websocket.
А авторизация все же нужна, иначе к вам любой может подцепиться и сделать любого пользователя online.
проверять наличие одного или группы элементов на странице;
взаимодействовать с элементами страницы (кликнуть на элемент, навести курсор на элемент, заполнить текстовое поле, заполнить и отправить форму, выбрать значения в select, проверить состояние checkbox и radio, переключиться на iframe, и т.д.);
переход по ссылке, сделать скриншот открытой страницы

Это все умеет capybara, причем с очень приятным синтаксисом. Попробуйте rspec + capybara + webkit. Быстрее, понятнее и, это де факто стандарт. Ну и webkit headless, в отличие от selenium.

проводить тестирование как в одном, так и нескольких браузерах (выполняется параллельно);

Для параллельного выполнения тестов так же существуют гемы, но с ними нужно аккуратно, есть много подводных камней.

очистка кэша, открытие ссылки в новом окне

Очень необычная вещь, честно говоря, никогда не приходилось такое делать :)
Лучше дорогое обслуживание, чем нервы и потерянные деньги, когда очередной «Банк24.ру» закроют.
в namespace вы задаете routes, делате Auth и подменяете заголовки?
Вы серьезно? В мире есть только Twitter, Facebook и ВКонтакте? Вы говорите о super high load проектах, даже не так — SUPER HIGH LOAD. Весь остальной интернет живет на готовых фреймворках (я про web приложения, а не про сайты визитки). Что-то на php(zend-symfony-yii), ruby on rails, django, всякая джавятина для enterprise. И это немаленькие проекты (как вам github на rails?).
Дело вовсе не в моде (может на Go как раз и мода), а в том, что эти инструменты работают и дают большие преимущества в скорости разработки и в наличии сотен маленьких решений для ежедневных проблем (речь как минимум про rails и ruby gems).
чтобы напоминал еще и паскаль :) язык для всех
Я бы не сказал, что этот метод хорош, и, думаю, многие согласятся.
  • Обычно валидацию отделяют от модели
  • Метод не должен быть таким большим


По поводу пункта б) — я имею в виду, что вы вызываете post.LoadById(id) у инстанса, обычно это делают у класса, статически, например, Post.find(id). (если это AR)
в) — Все зависит от паттерна для реализации моделей, если это AR, то она должна сама иметь инстанс какого-то адаптера базы или где вы там храните данные. В вашем случае каждая модель имеет свое соединение к базе. А это дублирование. А дублирование — это плохо. Напрашивается наследование или что там есть в Go.

Получается, все ваши аргументы сводятся к тому, что проект небольшой, а зачем тогда эта производительность и прочие плюшки Go, если небольшой проект можно накидать за пару команд на чем угодно и я уверен, что это будет быстрее и надежнее (ввиду того что по стандартам сделано или даже кодогенерацией).
Может быть большие проекты это тоже не go-way тогда? :) Глядя на ваш код,

  1. Нет стандартов
    Хоть язык и не накладывает ограничений на структуру проекта, данное приложение я решил организовать по модели MVC

    Значит каждый будет организовывать код как хочет.
  2. Пакет main это какой-то god-object. Он и сторонние пакеты подключает и route, и headers меняет, и auth делает.
  3. Все ошибки в одном файле, нет translations.
  4. С моделями совсем все плохо.
    а) создаются соединения с базой прямо из методов,
    session := utils.NewDbSession()
    defer session.Close()
    c := session.Col(«posts»)

    б) не знаю есть ли статические методы в Go, но делать так:
    post := models.NewPost()
    err := post.LoadById(id)

    В других языках не принято, да и не очень логично.
    в) Валидации нет, не знаю где она у вас будет, но предчувствую плохое.


Так что даже не знаю как можно написать что-то большое таким образом. Все-таки full-stack фрэймворки существуют не просто так :)
А есть что-нибудь а-ля go on rails? :) а то ваш пример ни для чего, что больше хелло ворлд, не подойдет, уж слишком low-level.
А есть ключик -S,
Конфиг,
set :branch, fetch(:branch, 'master')

Вызов,
cap -S branch=master production deploy
4) можно было пока вообще не думать о юзере, а добавить его в дальнейшем потому, что магический ноль смущает.
7)
//class BlogPost
const PUBLISHED = 1;
const NOT_PUBLISHED = 0;

...

$posts = $objectManager
        ->getRepository('\MyBlog\Entity\BlogPost')
        ->findBy(array('state' => BlogPost::PUBLISHED), array('created' => 'DESC'));


Вообще, тут неплохо было бы вынести это в класс-репозиторий для BlogPost, чтобы было вроде:
$posts = $objectManager
        ->getRepository('\MyBlog\Entity\BlogPost')
        ->findPublished();
1) Зачем в каждом экшене делать
 $objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
?
В зенд же есть хуки перед вызовом экшена?

2) Почему в мире php не принято следовать REST? Ведь очень некрасиво выглядят эти постоянные проверки на то, что запрос POST?

3)
$blogpost->setCreated(time());

Разве это нельзя сделать в хуках доктрины prePersist?

4)
$blogpost->setUserId(0);

что это за магия?

5)
$id = (int) $this->params()->fromRoute('id', 0);
    if (!$id) {
        $this->flashMessenger()->addErrorMessage('Blogpost id doesn\'t set');
        return $this->redirect()->toRoute('blog');
    }

    $objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');

    $post = $objectManager
        ->getRepository('\MyBlog\Entity\BlogPost')
        ->findOneBy(array('id' => $id));

    if (!$post) {
        $this->flashMessenger()->addErrorMessage(sprintf('Blogpost with id %s doesn\'t exists', $id));
        return $this->redirect()->toRoute('blog');
    }


можно переписать как
    $objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');

    $post = $objectManager
        ->getRepository('\MyBlog\Entity\BlogPost')
        ->findOneBy(array('id' => $id));

    if (!$post) {
        $this->flashMessenger()->addErrorMessage(sprintf('Blogpost with id %s doesn\'t exists', $id));
        return $this->redirect()->toRoute('blog');
    }


Проверка на существование id не имеет особого смысла, обычно это просто 404 страница. Юзер не должен руками править урл.

6) EntityManager не кидает эксепшн, просто возвращает null. docs.doctrine-project.org/en/2.0.x/reference/working-with-objects.html#querying, если не найдена запись.

7)
$posts = $objectManager
        ->getRepository('\MyBlog\Entity\BlogPost')
        ->findBy(array('state' => 1), array('created' => 'DESC'));

Что за магическая 1?
При использовании joins, вместо того, чтобы руками прописывать distinct в запросе, можно вызвать uniq:
User.joins(:posts).uniq
Skitch — тоже удобная скриншотилка интегрируется с evernote и имеет довольно приятный интерфейс.
Скорее всего, раз задача описана грамотно и создана с участием заказчика, то не может такого быть, чтобы заказчик сказал — «Этого не должно быть в продакшене и точка!». Заказчик может найти баг, но переделывать целиком он вряд ли заставит. А код ревью и проверка другим разработчиком должны уменьшить риск. Ну и иногда можно сделать revert. Так что думаю, что это осознанно принятый риск для ускорения процесса разработки.
Она всегда тут для переводов:
image
Я думаю, что имеется в виду именно CI + ревью кода + ручное тестирование одного из разработчиков (или нескольких). Разработчик делает git fetch + git checkout <нужная ветка> и проверяет изменения, сделанные в пулл реквесте на баги. Ну а для простых веток достаточно ревью кода, по тестам видно покроют они или нет функционал из пулл реквеста, а CI скажет прошли ли сами тесты.
pivotal.github.io/jasmine/
Есть вот такая продвинутая библиотека для тестирования js.
Опередили)
Проблема есть, то что в рельсах называется attr_acсessible, в yii — rules. Идея в том, чтобы вынести эти rules из модели. Модель не должна знать о сценариях ее использования и белом списке. Тогда populate пригодится. Он отсеит то, что мы запретим, в контроллере. При использовании strong_parameters нам просто запрещают присваивать что-либо иное, кроме отфильтрованных данных. Модель становится чище, а безопасность не теряется.

Информация

В рейтинге
Не участвует
Откуда
Красноярск, Красноярский край, Россия
Зарегистрирован
Активность