Тренинг GLPK, часть 1: Модель планирования производстваGleb Zakhodiakin
Первая часть тренинга по решению задач оптимизации в пакете GLPK. В презентации рассматриваются основные компоненты оптимизационной модели и их реализация на языке MathProg на примере задачи планирования производства. Рассматриваются автоматически формируемые отчеты по решению.
Третья часть тренинга по решению задач оптимизации в пакете GLPK. На примере решения транспортной задачи рассматриваются операции с множествами, доступные в MathProg
Тренинг GLPK, часть 1: Модель планирования производстваGleb Zakhodiakin
Первая часть тренинга по решению задач оптимизации в пакете GLPK. В презентации рассматриваются основные компоненты оптимизационной модели и их реализация на языке MathProg на примере задачи планирования производства. Рассматриваются автоматически формируемые отчеты по решению.
Третья часть тренинга по решению задач оптимизации в пакете GLPK. На примере решения транспортной задачи рассматриваются операции с множествами, доступные в MathProg
Entrevista amb la psicopedagoga del centreirissantargila
Aquesta entrevista li vaig passar a la psicopedagoga per a conèixer més dades sobre la Berta i sobre el seu cas. M'ha estat de profit i li'n dono les gràcies!
Scala-библиотека Slick прекрасно зарекомендовала себя как развитый и удобный инструмент работы с базами данных. Поддерживаются и простейшие текстовые SQL-запросы, и строго типизированные join’ы нескольких таблиц. Для построения запросов Slick предоставляет DSL, код на котором выглядит как обработка коллекций. Причем простые подзапросы могут использоваться для конструирования более сложных.
Slick имеет весьма любопытную внутреннюю архитектуру, которая делает возможным не только продвинутое использование, но и расширение библиотеки несколькими способами, о которых и пойдет речь в докладе.
(see also video: https://youtu.be/9n1zzwOGado)
Entrevista amb la psicopedagoga del centreirissantargila
Aquesta entrevista li vaig passar a la psicopedagoga per a conèixer més dades sobre la Berta i sobre el seu cas. M'ha estat de profit i li'n dono les gràcies!
Scala-библиотека Slick прекрасно зарекомендовала себя как развитый и удобный инструмент работы с базами данных. Поддерживаются и простейшие текстовые SQL-запросы, и строго типизированные join’ы нескольких таблиц. Для построения запросов Slick предоставляет DSL, код на котором выглядит как обработка коллекций. Причем простые подзапросы могут использоваться для конструирования более сложных.
Slick имеет весьма любопытную внутреннюю архитектуру, которая делает возможным не только продвинутое использование, но и расширение библиотеки несколькими способами, о которых и пойдет речь в докладе.
(see also video: https://youtu.be/9n1zzwOGado)
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETGoSharp
Наша команда в DevExpress недавно выпустила Preview версию нового продукта, RTF web-редактора – ASPxRichEdit.
Продукт требует высокой отзывчивости на действия пользователя и максимальной производительности. Поэтому клиент получился «толстым» в отличие от «тонких клиентов» большинства бизнес-приложений.
В составе продукта два полнофункциональных компонента - клиентский и серверный текстовые процессоры. Оба компонента работают независимо друг от друга. Клиентская часть создавалась как оптимизированная версия серверного компонента, переписанного с .NET на TypeScript.
Клиентская часть не уступает в сложности серверной. Кроме того, возникают дополнительные проблемы синхронизации состояний моделей на клиенте и сервере и глубокого тестирования клиент-серверного взаимодействия.
В этом докладе вы узнаете, как мы разрабатывали этот продукт, какие проблемы встретили и какие методики тестирования использовали.
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
Флеш-накопители используются в самых разных устройствах, от мобильных телефонов до компьютеров и серверов. Для каждой модели накопителя нужна прошивка с определённым набором параметров, которые могут отличаться в зависимости от ситуации. В докладе будет описан универсальный фреймфорк на С++, который предоставляет разработчикам симуляторов простой, прозрачный и быстрый доступ к любому параметру. Тестировщикам же он позволяет управлять конфигурациями при помощи стандартных инструментов редактирования и слияния.
Курс "Промышленное программирование на Java". Набор лекций 3. "Реляционные базы данных".
Модель предметной области. Подключение к РСУБД из Java.
Spring JDBC.
МФТИ, 2014 год. Лектор - Лаврентьев Федор Сергеевич
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
Презентация к докладу «Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection» с конференции .NEXT SPb 2015 (Санкт-Петербург, 5 июня 2015)
http://spb2015.dotnext.ru/#cvetkih_talk
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеAlexander Byndyu
В докладе рассматривается использование популярных фреймворков в разработке ASP.NET MVC приложения, как сделать его наиболее гибким. Будет затронута тема минимизации дублирования и повторное использование кода, применение методов метапрограммирования отображений; уменьшение логики в контроллерах; применение принципов SOLID и GRASP для разработки доменной модели приложения.
По материалам конференции .NET разработчиков http://www.dotnetconf.ru/Materialy/Asp_net_mvc_kak_postroit_gibkoe_web_prilozenie
Similar to паттерны проектирования источников данных (20)
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
паттерны проектирования источников данных
1. www.keremet.com
Паттерны проектирования
источников данных
Источник: работы Мартина Фаулера
докладчик
Тренкеншу Виталий
2. www.keremet.com
• Table Data Gateway
• Row Data Gateway
• Active Record
• Data Mapper
3. www.keremet.com
Table Data Gateway
Шлюз таблицы данных
Содержит в себе все команды SQL,
необходимые для извлечения, вставки,
обновления и удаления данных из таблицы
4. www.keremet.com
Table Data Gateway
Методы Шлюза таблицы данных используются
другими компонентами для взаимодействия с БД
5. www.keremet.com
Table Data Gateway
Обычно
Для каждой таблицы БД создается
собственный шлюз таблицы данных
Шлюз не имеет состояний, всего лишь
передает данные в таблицу и из неѐ
6. www.keremet.com
Table Data Gateway
Хорошо сочетается
с типовым решением Модуль таблицы
(Table Module)
с паттерном Сценарий транзакции
(Transaction Script)
Типовые решения для представления бизнес-логики
7. www.keremet.com
Table Data Gateway
Примеры
ProfileDataManager.cs
Хранимые процедуры
8. www.keremet.com
Row Data Gateway
Шлюз записи данных
Каждой строке таблицы базы данных
соответствует свой
экземпляр шлюза записи данных
9. www.keremet.com
Row Data Gateway
Шлюз выступает в роли
интерфейса к строке
данных
прекрасно подходит для
применения в
сценариях транзакции
(Transaction Script)
Типовое решение для представления бизнес-логики
10. www.keremet.com
Row Data Gateway
Пример
create table people (
ID int primary key,
lastname varchar,
firstname varchar,
number_of_dependents int)
11. class PersonGateway...
private String lastName;
private String firstName;
private int numberOfDependents;
public String getLastName() { return lastName; }
public void setLastName(String lastName)
{ this.lastName = lastName; }
public String getFirstName() { return firstName; }
public void setFirstName(String firstName)
{ this.firstName = firstName; }
public int getNumberOfDependents()
{ return numberOfDependents; }
public void setNumberOfDependents(int numberOfDependents)
{ this.numberOfDependents = numberOfDependents; }
12. class PersonGateway...
private static final String updateStatementString = "UPDATE
people " + " set lastname = ?, firstname =
?, number_of_dependents = ? " + " where id = ?";
public void update() {
PreparedStatement updateStatement = null;
try
{
updateStatement = DB.prepare(updateStatementString);
updateStatement.setString(1, lastName);
updateStatement.setString(2, firstName);
updateStatement.setInt(3, numberOfDependents);
updateStatement.setInt(4, getID().intValue());
updateStatement.execute();
} catch (Exception e) { throw new ApplicationException(e);
}
finally {DB.cleanUp(updateStatement); }
}
13. private static final String insertStatementString =
"INSERT INTO people VALUES (?, ?, ?, ?)";
public Long insert() {
PreparedStatement insertStatement = null;
try {
insertStatement = DB.prepare(insertStatementString);
setID(findNextDatabaseId());
insertStatement.setInt(1, getID().intValue());
insertStatement.setString(2, lastName);
insertStatement.setString(3, firstName);
insertStatement.setInt(4, numberOfDependents);
insertStatement.execute();
Registry.addPerson(this);
return getID();
} catch (SQLException e) {
throw new ApplicationException(e);
} finally {DB.cleanUp(insertStatement);
}
}
14. class PersonFinder...
private final static String findStatementString =
"SELECT id, lastname, firstname, number_of_dependents " +
" from people " +
" WHERE id = ?";
public PersonGateway find(Long id) {
PersonGateway result = (PersonGateway) Registry.getPerson(id);
if (result != null) return result;
PreparedStatement findStatement = null;
ResultSet rs = null;
try {
findStatement = DB.prepare(findStatementString);
findStatement.setLong(1, id.longValue());
rs = findStatement.executeQuery();
rs.next();
result = PersonGateway.load(rs);
return result;
} catch (SQLException e) {
throw new ApplicationException(e);
} finally {DB.cleanUp(findStatement, rs);
}
}
public PersonGateway find(long id) {
return find(new Long(id));
}
15. В сценарии транзакции
PersonFinder finder = new PersonFinder();
Iterator people = finder.findResponsibles().iterator();
StringBuffer result = new StringBuffer();
while (people.hasNext()) {
PersonGateway each = (PersonGateway) people.next();
result.append(each.getLastName());
result.append(" ");
result.append(each.getFirstName());
result.append(" ");
result.append(String.valueOf(each.getNumberOfDependents()));
result.append(" ");
}
return result.toString();
16. www.keremet.com
Active Record
Активная запись
Объект, выполняющий роль оболочки
для строки таблицы.
Он инкапсулирует доступ к базе данных и
добавляет к данным логику домена.
17. www.keremet.com
Active Record
Структура Активной записи должна в
точности соответствовать записи в
таблице БД:
каждое поле должно соответствовать
одному столбцу таблицы
18. www.keremet.com
Active Record
Обычно
Активная запись включает в себя методы:
• создание экземпляра активной записи на основе строки, полученной в
результате выполнения SQL-запроса;
• создание и обновление записи в таблице из значений активной записи;
• статические методы поиска, выполняющие стандартные SQL-запросы и
возвращающие активные записи;
• извлечение и установка значений полей (get- и set-методы);
• реализация некоторых фрагментов бизнес-логики.
20. www.keremet.com
Data Mapper
Преобразователь данных
Слой преобразователей (Mapper),
который осуществляет передачу данных
между объектами и базой данных,
сохраняя последние независимыми друг от
друга и от самого преобразователя
21. www.keremet.com
Data Mapper
Проблема
Как Вы можете уменьшить взаимосвязь между
классами вашего приложения и базой данных?
Например, как вы можете уменьшить
переписывание кода, если одно или несколько
полей в таблице сменили название?
22. www.keremet.com
Data Mapper
Решение
В большинстве случаев преобразователь
данных применяется для того, чтобы
схема базы данных и объектная модель
могли изменяться независимо друг от
друга.
23. www.keremet.com
Data Mapper
Изменение модели предметной области не требует
изменения структуры базы данных и наоборот.
Что крайне важно при наличии сложных
отображений, особенно при использовании уже
существующих баз данных
24. www.keremet.com
Data Mapper
Применение
Если бизнес-логика довольно проста, ее,
скорее всего, можно реализовать и без
применения модели предметной
области или преобразователя данных.
25. www.keremet.com
Data Mapper
Применение
В свою очередь, реализация более сложной
логики невозможна без использования
модели предметной области и, как
следствие этого, преобразователя данных.
26. www.keremet.com
Data Mapper
Преимущество
Основным преимуществом
преобразователя данных является
возможность работы с моделью
предметной области без учета структуры
базы данных как в процессе
проектирования, так и во время сборки и
тестирования проекта.
28. www.keremet.com
Data Mapper
Отличия от Active Record
Кратко говоря, объекты в шаблоне Data
Mapper никак не связаны со схемой БД, в то
время как Active Record на этой связи
построена.
Вся работа с БД осуществляется через
дополнительный слой.
29. www.keremet.com
Спасибо за внимание
Вопросы?
докладчик
Тренкеншу Виталий