Реклама

Настроить
 
 
artyfarty

Groovy on Grails  

25 Февраль @ 15:36
Я уже недавно писал про Java-безумие.

Окончательно устав трахаться с крутыми тырпрайз-технологиями, мы приняли важное решение: начали всё заново на Груви он Грейлс: основанной на всё тех же технологиях среде, однако позволяющей не писать всё по стопицот раз.

Очень круто. Я написал работающий простенький инет-магаз за пару вечеров.

Что есть:
Абсолютно автоматическая ORM
Создаются домейн классы, в которых просто обозначаются поля и связи.
Например:

class ShopUser {

static constraints = {
orders()
}

static hasMany = [orders:ShopOrder]
static optionals = ['name', 'lname', 'adr', 'orders']

String login

String name
String lname
String adr

String toString() {
login
}
}

Всё! Для домейн класса автоматом генерятся не только геттеры и сеттеры, но и статические методы findBy*, например findByLoginAndId(), а так же методы для работы с коллекциями типа addToOrders()

Модель MVC. Домейн классы, контроллеры, визуализация. Вот один из контроллеров:

class HomepageController {

def index = {
redirect(action:'list')
}

def list = {
def authenticationService
def data = [
positions: Book.list(max:20)
]
}

def show = {
[ bookInstance: Book.get(params.id) ]
}
}

А вот соответствующий list view:
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <meta name="layout" content="bookshop" />
        <title>Книжный магазин</title>
    </head>
    <body>
     <h1>В продаже:</h1>
     <div class="mainlist">
        <g:each in="${positions}" var="book">
            <div class="list-item">
             <div class="rightpane">
                <p class="price">${book.price} руб.</p>
                <g:link class="btn" controller="personal" action="addtocart" params="[back:'list']" id="${book.id}">Купить!</g:link>
             </div>
             <h4>${book.name}</h4>
             <h5>${book.author}</h5>
             <p class="meta">Вес: ${book.weight} кг.</p>
             <div class="clear"></div>
            </div>
        </g:each>
     </div>
    </body>
</html>

* This source code was highlighted with Source Code Highlighter.


С тем же успехом можно было обратится к модели прямо из view: <g:each in="${Book.list(max:20)}" var="book">

При этом <meta name="layout" content="bookshop" /> объединяет эту страничку с реальным макетом. Можно создавать собственные таги, например <ifEmptyCart>

Плагины. Добавляют в проект готовые контроллеры, домейн классы, вьюсы, теги и прочее. Плагин авторизации, плагин корзины например.

Не без недостатков: молодая, сырая вещь. Очень слабое коммьюнити. Ужасная интеграция с нетбинсами. Сложности отладки: сыпет в консоль два экрана стек трейса исключений, и разбирайся как хочешь.

А главный недостаток в том, что она основана на этой ебучей яве.

Вывод. Мило, наверное будем делать из нашего проекта курсовик на нём же. Хочу ознакомиться с более популярным рубинарейлс. Возможно, он ещё круче.
 
 
Местоположение: в комповнике
( Read 16 comments )
Post a comment in response:
Как:
(комментарий будет скрыт)
Help(комментарий будет скрыт)
Identity URL: 
Имя пользователя:
Пароль:
У вас нет аккаунта? Создайте его сейчас.
Тема:
HTML нельзя использовать в теме сообщения
   Help
Сообщение:

 
Внимание! Этот пользователь включил сохранение адресов IP тех, кто оставляет комментарии к его журналу. Help
 

Реклама

Настроить