Я. В. Ильин (аспирант) СОЗДАНИЕ КЛАССОВ СЛОЯ ДАННЫХ

advertisement
Я. В. Ильин (аспирант)
СОЗДАНИЕ КЛАССОВ СЛОЯ ДАННЫХ ДЛЯ WEB-СЕРВИСА С
ПОМОЩЬЮ ИНСТРУМЕНТАРИЯ GALINA.FRAMEWORK
г. Пенза, Пензенский государственный университет
При проектировании и разработке программных систем правильная
организация данных является наиболее сложной и важной задачей. В
настоящей работе будет продемонстрирован простой и эффективный способ
проектирования и создания классов программного слоя данных для Webсервиса, создаваемого на языке Java. В работе будут продемонстрированы
возможности языка программирования GloScript как средство описания
моделей
данных
с
помощью
инструментария
Galina.Framework.
Galina.Framework – это программная система, позволяющая создавать кроссплатформенные
программные
продукты
быстро
и
эффективно.
Инструментарий в настоящий момент разрабатывается автором статьи.
Сформулируем
задачу.
Необходимо
создать
модель
данных,
обеспечивающую регистрацию и аутентификацию пользователей в Webсервисе без управления сессиями. Управление сессиями возложить на
системы Google Accounts или Facebook Connect. Разработку серверной части
вести на языке Java, классы слоя данных разрабатывать с помощью
технологии JDO. Web-сервис должен работать в инфраструктуре Google App
Engine. Более подробную информацию об используемых технологиях можно
найти на официальном сайте Google App Engine.
Для решения данной задачи в максимально сжатые сроки целесообразно
использовать инструменты Galina.Framework. Для описания модели данных в
Galina.Framework используется язык программирования GloScript. GloScript –
это C-подобный язык, разработанный в 2010 году автором статьи.
Конструкции языка позволяют интуитивно понятно описать структуры
данных различной сложности. Программа на языке GloScript (Листинг 1)
демонстрирует решение поставленной выше задачи.
project Glosculptor People
author Yakov Ilin
namespace com.glosculptor.people.dataobjects
Make DataModel(Gae, Java, Jdo)
{
User
{
string login (mandatory),
int type,
string pwd,
string firstName,
string lastName,
date date (now),
date lastLoginDate,
double rate,
double carma,
long avatarId,
long countryId
}
FacebookAccounts
{
long fbId (mandatory),
long userId (mandatory)
}
Emails
{
string email (mandatory),
bool verified,
long userId (mandatory)
}
}
Листинг 1. Решение задачи на языке GloScript.
Первые три строки программы задают название проекта, автора проекта и
область имен с помощью директив project, author и namespace. Далее команда
Make говорит интерпретатору о необходимости сгенерировать классы для
модели данных, описанной ниже. Функция DataModel устанавливает
платформу, язык и технологии для генерации классов. В данном случае
платформой является Gae (Google App Engine), язык – Java, технология –
JDO. Чтобы сгенерировать классы данной модели для iOS (операционной
системы iPhone и iPad) можно использовать следующую конструкцию:
Make DataModel(iOS, ObjectiveC, SQLite)
{
// описание модели
// ...
}
Листинг 2. Команда GloScript для генерации классов под iOS.
Тело функции DataModel содержит описание структур данных. Листинг 1
задает три таблицы User, FacebookAccounts и Emails. Каждая таблица задана
полями, каждое поле имеет свой тип. В данной программе используются
типы bool (логический), long (целый длинный), double (с плавающей точкой),
string (строка), int (целый) и date (дата и время). В скобках после поля
указываются атрибуты. В программe (Листинг 1) использованы атрибуты
mandatory и now. Mandatory означает, что поле является обязательным и
используется при создании объекта описываемого типа, иными словани поле
инициализируется в конструкторе. Атрибут now применим только к полям
типа date. Использование атрибута означает, что в конструкторе данного типа
поле будет инициализировано датой и временем создания объекта текущего
типа.
Программа на языке GloScript имеет расширение .gs. В каталоге bin
инструментария Galina.Framework есть интерпретатор языка GloScript –
исполняемый файл gs. Утилита очень проста в использовании. Первым
параметром gs принимает имя файла программы, вторым параметром – путь
к каталогу для генерации исходных текстов. После вызова программы на
исполнение
интерпретатор
сгенерирует
три
файла
Users.java,
FacebookAccounts.java и Emails.java. Рассмотрим класс Emails.java (Листинг
3).
/**
*
Glosculptor People
*
* @author Yakov Ilin on 10/15/2010 12:01:46 AM.
* Copyright (c) 2009 - 2010 Glosculptor, ISDS. All rights reserved.
*/
package com.glosculptor.people.dataobjects;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Emails {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
public Long getId() {
return id;
}
public Emails(String email, long userId) {
this.email = email;
this.userId = userId;
}
@Persistent
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Persistent
private Boolean verified;
public Boolean getVerified() {
return verified;
}
public void setVerified(Boolean verified) {
this.verified = verified;
}
@Persistent
private long userId;
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
}
Листинг 3. Файл Emails.java.
Интерпретатор GloScript сгенерировал классы, описывающие модель
данных проекта. Класс Emails (Листинг 3) описывает элемент таблицы
Emails. Класс реализован на языке Java с использованием технологии JDO.
Поля, помеченные как mandatory, инициализируются в конструкторе,
у
каждого поля есть методы аксессор и мутатор для чтения и записи поля
соответственно. Для каждого класса сгенерировано поле id, являющееся по
умолчанию первичным ключем с авто-инкрементом. Сгенерированные
классы можно без изменений использовать для доступа к данным в
инфраструктуре Google App Engine.
Таким образом, поставленная задача выполнена. Экспериментальным
путем
доказано,
что
за
счет
автоматической
генерации
классов
быстродействие разработки слоя данных увеличивается в 3-10 раз в
зависимости от объема модели.
Download