Top Banner
68

Grailsでドメイン駆動設計を実践する時の勘所

Apr 16, 2017

Download

Software

Takuma Watabiki
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Grailsでドメイン駆動設計を実践する時の勘所
Page 2: Grailsでドメイン駆動設計を実践する時の勘所
Page 3: Grailsでドメイン駆動設計を実践する時の勘所
Page 4: Grailsでドメイン駆動設計を実践する時の勘所
Page 5: Grailsでドメイン駆動設計を実践する時の勘所
Page 8: Grailsでドメイン駆動設計を実践する時の勘所
Page 9: Grailsでドメイン駆動設計を実践する時の勘所

$ grails create-app helloworld

$ cd helloworld

$ grails create-domain-class hello

$ vi ./grails-app/domain/helloworld/Hello.groovy

Page 10: Grailsでドメイン駆動設計を実践する時の勘所

package helloworld

class Hello { String message

static constraints = { } }

Page 11: Grailsでドメイン駆動設計を実践する時の勘所

$ grails create-controller hello

$ vi ./grails-app/controllers/helloworld/HelloController.groovy

Page 12: Grailsでドメイン駆動設計を実践する時の勘所

package helloworld

class HelloController { static scaffold = Hello }

Page 13: Grailsでドメイン駆動設計を実践する時の勘所

$ grails run-app

Page 14: Grailsでドメイン駆動設計を実践する時の勘所
Page 15: Grailsでドメイン駆動設計を実践する時の勘所
Page 16: Grailsでドメイン駆動設計を実践する時の勘所
Page 18: Grailsでドメイン駆動設計を実践する時の勘所
Page 19: Grailsでドメイン駆動設計を実践する時の勘所
Page 20: Grailsでドメイン駆動設計を実践する時の勘所
Page 21: Grailsでドメイン駆動設計を実践する時の勘所
Page 22: Grailsでドメイン駆動設計を実践する時の勘所
Page 23: Grailsでドメイン駆動設計を実践する時の勘所
Page 24: Grailsでドメイン駆動設計を実践する時の勘所
Page 25: Grailsでドメイン駆動設計を実践する時の勘所
Page 26: Grailsでドメイン駆動設計を実践する時の勘所
Page 27: Grailsでドメイン駆動設計を実践する時の勘所
Page 28: Grailsでドメイン駆動設計を実践する時の勘所
Page 29: Grailsでドメイン駆動設計を実践する時の勘所
Page 30: Grailsでドメイン駆動設計を実践する時の勘所
Page 31: Grailsでドメイン駆動設計を実践する時の勘所
Page 32: Grailsでドメイン駆動設計を実践する時の勘所
Page 33: Grailsでドメイン駆動設計を実践する時の勘所
Page 34: Grailsでドメイン駆動設計を実践する時の勘所
Page 35: Grailsでドメイン駆動設計を実践する時の勘所
Page 36: Grailsでドメイン駆動設計を実践する時の勘所
Page 37: Grailsでドメイン駆動設計を実践する時の勘所
Page 38: Grailsでドメイン駆動設計を実践する時の勘所
Page 39: Grailsでドメイン駆動設計を実践する時の勘所
Page 40: Grailsでドメイン駆動設計を実践する時の勘所
Page 41: Grailsでドメイン駆動設計を実践する時の勘所

grails { exploded = true plugins { compile project(':core-domain-plugin') compile project(':sub-domain-plugin') }}

includeFlat 'core-domain-plugin'includeFlat 'sub-domain-plugin'

Page 42: Grailsでドメイン駆動設計を実践する時の勘所
Page 43: Grailsでドメイン駆動設計を実践する時の勘所
Page 44: Grailsでドメイン駆動設計を実践する時の勘所
Page 45: Grailsでドメイン駆動設計を実践する時の勘所
Page 46: Grailsでドメイン駆動設計を実践する時の勘所
Page 47: Grailsでドメイン駆動設計を実践する時の勘所
Page 48: Grailsでドメイン駆動設計を実践する時の勘所
Page 49: Grailsでドメイン駆動設計を実践する時の勘所
Page 50: Grailsでドメイン駆動設計を実践する時の勘所

class IsbnUserType implements UserType { @Override int[] sqlTypes() { return [StringType.INSTANCE.sqlType()] } @Override Class returnedClass() { return Isbn.class }

}

Page 51: Grailsでドメイン駆動設計を実践する時の勘所

package com.example.domain

class Isbn { private String isbnCode}

Page 52: Grailsでドメイン駆動設計を実践する時の勘所

class Book { String title Isbn isbn BigDecimal standardUnitPrice static mapping = { isbn type: IsbnUserType } String toString() { title } }

Page 53: Grailsでドメイン駆動設計を実践する時の勘所
Page 54: Grailsでドメイン駆動設計を実践する時の勘所

dependencies { compile "org.springframework.boot:spring-boot-starter-logging" compile "org.springframework.boot:spring-boot-autoconfigure" compile "org.grails:grails-core" compile "org.springframework.boot:spring-boot-starter-actuator" compile "org.springframework.boot:spring-boot-starter-tomcat" compile "org.mybatis.spring.boot:mybatis-spring-boot-starter:1.1.1"

: }

Page 55: Grailsでドメイン駆動設計を実践する時の勘所

package com.example.domain

class Isbn { private String isbnCode}

Page 56: Grailsでドメイン駆動設計を実践する時の勘所

package com.example.domainimport grails.validation.Validateableclass Book implements Validateable { Long id String title Isbn isbn BigDecimal standardUnitPrice Long version static constraints = { } }

Page 57: Grailsでドメイン駆動設計を実践する時の勘所

package com.example.infrastructureimport com.example.domain.Bookimport org.apache.ibatis.annotations.Mapperimport org.apache.ibatis.annotations.Param@Mapperinterface BookMapper { void register(@Param("book") Book book) List<Book> list()}

Page 58: Grailsでドメイン駆動設計を実践する時の勘所

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.example.infrastructure.BookMapper"> <resultMap id="product" type="com.example.domain.Book"> <id property="id" column="id"/> <result property=“isbn.isbnCode" column="isbn_code"/> <result property="title" column=“title"/> <result property="standardUnitPrice" column=“standard_unit_price”/> <result property="version" column="version"/> </resultMap> :</mapper>

Page 59: Grailsでドメイン駆動設計を実践する時の勘所
Page 60: Grailsでドメイン駆動設計を実践する時の勘所
Page 61: Grailsでドメイン駆動設計を実践する時の勘所
Page 62: Grailsでドメイン駆動設計を実践する時の勘所

package com.exampleclass BookRepositoryService { List<Book> list() { Book.findAll() } :}

Page 63: Grailsでドメイン駆動設計を実践する時の勘所

package com.example.domaininterface BookRepository { List<Book> list() Book get(Long id)

}

Page 64: Grailsでドメイン駆動設計を実践する時の勘所

package com.example.infrastructureimport com.example.domain.Bookimport com.example.domain.BookRepositoryimport org.springframework.stereotype.Repository@Repositoryclass BookDatasource implements BookRepository { @Override List<Book> list() { Book.findAll() } :}

Page 65: Grailsでドメイン駆動設計を実践する時の勘所
Page 66: Grailsでドメイン駆動設計を実践する時の勘所
Page 67: Grailsでドメイン駆動設計を実践する時の勘所
Page 68: Grailsでドメイン駆動設計を実践する時の勘所