Рубрика «orm» - 6

Вступление

После некоторого перерыва в разработке моего приложения под Android, в течении которого в моей голове формировались все новые и новые идеи, как сделать его красивее и удобнее, в конце января я вновь уселся за разработку. За время размышлений подход к созданию приложения немного трансформировался, и посему до объектной модели я добрался только тройку недель назад. И почти сразу столкнулся с необходимостью доработки UCAOrm. Кому интересно узнать не только об уже внедренных нововведениях, но и о том, что еще только в процессе разработки — Читать полностью »

О чем это

Доброго времени суток!

Я бы хотел рассказать о StubDb — библиотеке для быстрого прототипирования приложений и легкого юнит тестирования. Она позволяет заменять работу с реальной базой данных, на работу с данными хранимыми в памяти/файле. Это дает возможность сконцентрироваться на классах доменной модели, а не на особенностях хранения данных. StubDb использует принцип работы Entity Framework Code First, что делает удобным их совместное использование, но может использоваться отдельно.

Чтобы написать Data Persistence Layer, нужно затратить немало усилий. Работа с базой данных это — хлопотно: начиная от подключения и редактирования конфигов, и заканчивая написанием запросов. Раньше, пока ORM еще не были так популярны, много времени занимало написание однообразных SQL запросов. С развитием ORM, меньше времени тратится непосредственно на SQL, но вместо этого необходимо изучать особенности самих ORM фреймворков.

В теории все просто: программист работает с доменными объектами, изменения в них транслируются в базу данных легко и безболезненно. Но на практике особенности фреймворков часто вызывают недоумение и прострацию. Например, на данный момент на StackOverflow по ASP.NET MVC 77,852 вопросов, а по Entity Framework 33,276, меньше, но не значительно. А ведь в идеале EF должен просто незаметно делать свою работу.

Конечно, без БД не обойтись. Но когда приложение или новая фича находятся в начальной стадии проектирования и разработки, в БД нет необходимости. На этом этапе вполне достаточно: иметь доменную модель классов, хранить данные в этой модели вместе с взаимосвязями между отдельными классами (один к одному, многие ко многим), получать данные доменной модели, учитывая эти связи. StubDb реализует этот минимальный набор требований. Используя StubDb на начальном этапе разработки, можно избежать сложностей работы с БД и ORM, но при этом иметь возможность хранить данные в доменной модели и легко ее менять, не нарушая работоспособности приложения.
Читать полностью »

Введение

В процессе создания более ли мене сложного сайта приходится задумываться об организации доступа к БД(базе данных). Если сайт создается на базе существующего фреймворка или CMS, то там как правило имеются встроенные механизмы ORM (с англ. — Объектно-реляционное отображение, подробнее в вики). В данной статье я расскажу как можно прикрутить популярную и простую ORM систему ActiveRecord к собственному фреймворку.
Читать полностью »

Как связать Yii Framework и Doctrine 2 ORM?

Мне очень нравится Yii Framework. Он быстрый, удобный, гибкий. Мне нравится, как реализован в нём паттерн ActiveRecord. Но бывают случаи, когда бизнес-логика, а, если быть точным, доменная логика, очень сложная и постоянно растёт и модифицируется. В таких случаях удобнее пользоваться паттерном DataMapper.

В тоже время мне нравится Doctrine 2 ORM. Это пожалуй самая мощная ORM для PHP, имеющая широчайший функционал. Да, возможно, она «тяжеловата» и замедляет работу приложения. Но начиная разработку, прежде всего стоит думать об архитектуре приложения, так как «преждевременная оптимизация корень всех бед»

Таким образом, однажды мне пришла в голову мысль связать 2 этих интересных мне инструмента. Как это было сделано, описано ниже.
Читать полностью »

image

Предлагаю всем джангистам/алхимистам немного отвечься и почитать вольную интерпретацию вводного туториала и частично документации по Peewee – stand-alone ORM, обязательной к ознакомлению любому питонщику и, в особенности, фласкеру. Пишут о ней мало, а зря. С Peewee очень просто подружиться, особенно если вы уже знакомы с какой-нибудь ORM на ActiveRecord. Что более важно – с ней приятно дружить :) Ну, начнём.

Установка

С pip:

pip install peewee

Из репозитория:

git clone https://github.com/coleifer/peewee.git cd peewee python setup.py install

Тесты:

python setup.py test

Есть обвязка для flask:

pip install flask-peewee

Определение моделей или «попахивает джангой»

Весь нижеследующий код можно повторить один к одному в интерактивном интерпретаторе или отдельном скрипте.

from peewee import *

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()
    is_relative = BooleanField()

    class Meta:
        database = db  # модель будет использовать базу данных 'people.db'

Типов полей много, на все случаи жизни. Peewee берёт на себя преобразование питоновских объектов в значения, подходящие для базы данных, и наоборот.
Читать полностью »

Как я перетащил пакет Tastypie на Pony ORM и что из этого получилось.

Данная статья продолжает историю моей борьбы за производительность приложений на python и django.

Читать полностью »

imageЗдравствуйте, в этой статье я расскажу о серверной части и опишу процесс размещения приложения на облачном хостинге openshift.
Читать полностью »

Эти 2 шаблона проектирования описаны в книге Мартина Фаулера «Шаблоны корпоративных приложений» и представляют собой способы работы с сохранением данных в объектно-ориентированном программировании.

Пример шаблона Active Record

class Foo
{
    protected $db;
    public $id;
    public $bar;
     
    public function __construct(PDO $db)
    {
        $this->db = $db;
    }
 
    public function do_something()
    {
        $this->bar .= uniqid();
    }
 
    public function save()
    {
        if ($this->id) {
            $sql = "UPDATE foo SET bar = :bar WHERE id = :id";
            $statement = $this->db->prepare($sql);
            $statement->bindParam("bar", $this->bar);
            $statement->bindParam("id", $this->id);
            $statement->execute();
        }
        else {
            $sql = "INSERT INTO foo (bar) VALUES (:bar)";
            $statement = $this->db->prepare($sql);
            $statement->bindParam("bar", $this->bar);
            $statement->execute();
            $this->id = $this->db->lastInsertId();
        }
    }
}
 
//Insert
$foo = new Foo($db);
$foo->bar = 'baz';
$foo->save();

В этом упрощенном примере, дескриптор базы данных вводится в конструкторе Foo (Использование инъекции зависимостей здесь позволяет тестировать объект без использования реальной базы данных), и Foo использует его, чтобы сохранять свои данные. Do_something — просто метод-заглушка, заменяющий бизнес логику.Читать полностью »

Предыдущий пост посвященный производительности, описывал Pony ORM, показавший фантастические результаты по сравнению с Django ORM и SQLAlchemy.

Впечатленный столь неординарными результатами и озабоченный производительностью собственного проекта, я решил внедрить Pony ORM в свой проект. Что из этого получилось, см подкатом.

Читать полностью »

Это вторая статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.

Оглавление

Часть 1: Привет, Мир!
Часть 2: Шаблоны
Часть 3: Формы
Часть 4: База данных
Часть 5: Вход пользователей
Часть 6: Страница профиля и аватары
Часть 7: Unit-тестирование
Часть 8: Подписчики, контакты и друзья
Часть 9: Пагинация
Часть 10: Полнотекстовый поиск
Часть 11: Поддержка e-mail
Часть 12: Реконструкция
Часть 13: Дата и время
Часть 14: I18n and L10n
Часть 15: Ajax
Часть 16: Отладка, тестирование и профилирование
Часть 17: Развертывание на Linux (даже на Raspberry Pi!)
Часть 18: Развертывание на Heroku Cloud

Краткое повторение

В предыдущей части мы создали нашу форму входа в комплекте с представлением и валидацией.

В этой статье мы намереваемся создать нашу базу данных и поднять ее, чтобы мы могли записывать туда наших пользователей.

Чтобы следовать этой части, ваше приложение микроблога должно быть таким, каким мы оставили его в конце предыдущей. Пожалуйста, убедитесь, что прилолжение установлено и работает.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js