Slide 1

Slide 1 text

JTILBXB 8JSF ίʔυੜ੒ʹΑΔ%*

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

%*

Slide 5

Slide 5 text

%FQFOEFODZ*OKFDUJPO

Slide 6

Slide 6 text

package json func NewDecoder(r io.Reader) *Decoder { return &Decoder{r: r} }

Slide 7

Slide 7 text

io.Reader json.Decoder

Slide 8

Slide 8 text

Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client

Slide 9

Slide 9 text

func main() { ctx := context.Background() client, err := datastore.NewClient(ctx, "my-project") if err != nil { log.Fatal(err) } defer client.Close() bookRepository := NewBookRepository(client) bookOwnershipRepository := NewBookOwnershipRepository(client) userRepository := NewUserRepository(client) notificationRepository := NewNotificationRepository(client) bookshelfService := NewBookshelfService(bookRepository, bookOwnershipRepository, inboxService := NewInboxService(userRepository, notificationRepository) server := NewAPIServer(bookshelfService, inboxService) server.Listen() }

Slide 10

Slide 10 text

Shopping Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository Admin Server Job A Job B PubSub Client Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client Recommend Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository Job C Job D Functions Client Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client Bookshelf Service BookRepository BookOwnership Repository ReadHistory Repository History Service UserRepository API Server Job A Job B Datastore Client

Slide 11

Slide 11 text

notificationRepository := NewNotificationRepository() bookshelfService := NewBookshelfService( bookRepository, bookOwnershipRepository, userRepository) inboxService := NewInboxService( userRepository, notificationRepository) bookRepository := NewBookRepository() bookOwnershipRepository := NewBookOwnershipRepository() userRepository := NewUserRepository() notificationRepository := NewNotificationRepository() bookshelfService := NewBookshelfService( bookRepository, bookOwnershipRepository, userRepository) inboxService := NewInboxService( userRepository, notificationRepository) bookRepository := NewBookRepository() bookOwnershipRepository := NewBookOwnershipRepository() userRepository := NewUserRepository() notificationRepository := NewNotificationRepository() bookshelfService := NewBookshelfService( bookRepository, bookOwnershipRepository, userRepository) inboxService := NewInboxService( userRepository, notificationRepository) bookRepository := NewBookRepository() bookOwnershipRepository := NewBookOwnershipRepository() userRepository := NewUserRepository() notificationRepository := NewNotificationRepository() bookshelfService := NewBookshelfService( bookRepository, bookOwnershipRepository, userRepository) inboxService := NewInboxService( userRepository, notificationRepository) bookRepository := NewBookRepository() bookOwnershipRepository := NewBookOwnershipRepository() userRepository := NewUserRepository() notificationRepository := NewNotificationRepository() bookshelfService := NewBookshelfService( bookRepository, bookOwnershipRepository, userRepository) inboxService := NewInboxService( userRepository, notificationRepository) bookRepository := NewBookRepository() bookOwnershipRepository := NewBookOwnershipRepository() userRepository := NewUserRepository() notificationRepository := NewNotificationRepository() bookshelfService := NewBookshelfService( bookRepository, bookOwnershipRepository, userRepository) inboxService := NewInboxService( userRepository, notificationRepository) bookRepository := NewBookRepository() bookOwnershipRepository := NewBookOwnershipRepository() userRepository := NewUserRepository() notificationRepository := NewNotificationRepository() bookshelfService := NewBookshelfService( bookRepository, bookOwnershipRepository, userRepository) inboxService := NewInboxService(

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

8JSF

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

%*ʹඞཁͳίʔυ

Slide 16

Slide 16 text

%*ʹඞཁͳίʔυ ຊ࣭ ࣗ໌

Slide 17

Slide 17 text

%*ʹඞཁͳίʔυ ͜͜Λࣗಈੜ੒ ຊ࣭ ࣗ໌

Slide 18

Slide 18 text

ຊ࣭ͱ͸

Slide 19

Slide 19 text

w ͲͷΑ͏ͳґଘ͕͋Δͷ͔ w Ͳ͏΍ͬͯґଘΛऔಘ͢Δͷ͔

Slide 20

Slide 20 text

w 1SPWJEFS w *OKFDUPS

Slide 21

Slide 21 text

1SPWJEFS

Slide 22

Slide 22 text

func NewBookRepository(client *datastore.Client) BookRepository { ... }

Slide 23

Slide 23 text

Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client 1SPWJEFS

Slide 24

Slide 24 text

Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client 1SPWJEFS

Slide 25

Slide 25 text

Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client 1SPWJEFS

Slide 26

Slide 26 text

Bookshelf Service BookRepository BookOwnership Repository Notification Repository Inbox Service UserRepository API Server Job A Job B Datastore Client 1SPWJEFS

Slide 27

Slide 27 text

*OKFDUPS

Slide 28

Slide 28 text

// +build wireinject ... func InitializeServer( ctx context.Context, projectID ProjectID) (server *Server, cleanup func(), err error) { wire.Build( ProvideDatastoreClient, NewBookRepository, NewBookOwnershipRepository, NewUserRepository, NewNotificationRepository, NewBookshelfService, NewInboxService, NewAPIServer) return }

Slide 29

Slide 29 text

$ wire ./...

Slide 30

Slide 30 text

//+build !wireinject ... func InitializeServer( ctx context.Context, projectID ProjectID) (*Server, func(), error) { client, cleanup, err := ProvideDatastoreClient(ctx, projectID) if err != nil { return nil, nil, err } bookRepository := NewBookRepository(client) bookOwnershipRepository := NewBookOwnershipRepository(client) userRepository := NewUserRepository(client) notificationRepository := NewNotificationRepository(client) bookshelfService := NewBookshelfService(bookRepository, bookOwnershipRepository, inboxService := NewInboxService(userRepository, notificationRepository) server := NewAPIServer(bookshelfService, inboxService) return server, func() { cleanup() }, nil }

Slide 31

Slide 31 text

//+build !wireinject ... func InitializeServer( ctx context.Context, projectID ProjectID) (*Server, func(), error) { client, cleanup, err := ProvideDatastoreClient(ctx, projectID) if err != nil { return nil, nil, err } bookRepository := NewBookRepository(client) bookOwnershipRepository := NewBookOwnershipRepository(client) userRepository := NewUserRepository(client) notificationRepository := NewNotificationRepository(client) bookshelfService := NewBookshelfService(bookRepository, bookOwnershipRepository, inboxService := NewInboxService(userRepository, notificationRepository) server := NewAPIServer(bookshelfService, inboxService) return server, func() { cleanup() }, nil } ैདྷखॻ͖͍ͯͨ͠ ίʔυ͕ࣗಈੜ੒͞Εͨ

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

࣮͸͜ΕΒ΋ࣗಈੜ੒Ͱ͖Δ w ύϥϝʔλʔͷड͚౉͠ w Τϥʔॲཧ w ΫϦʔϯΞοϓॲཧ

Slide 34

Slide 34 text

ָͳ͚ͩͰ͸ͳ͍

Slide 35

Slide 35 text

ίʔυੜ੒ʹΑΔґଘؔ܎ͷղܾͳͷͰ άϥϑͷܽଛΛίϯύΠϧ࣌ʹൃݟͰ͖Δ

Slide 36

Slide 36 text

·ͱΊ

Slide 37

Slide 37 text

w 8JSF͸%*ͷࣗ໌ͳίʔυΛࣗಈੜ੒͢Δπʔϧ w ґଘؔ܎͸ίϯύΠϧ࣌ʹղܾ͞ΕΔͷͰ҆શ

Slide 38

Slide 38 text

IUUQTHJUIVCDPNHPPHMFXJSF