Pyramid + socket.io 人狼を作ってみた
-
Upload
junya-hayashi -
Category
Software
-
view
1.816 -
download
13
description
Transcript of Pyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみた
PyCon JP 2014 林 淳哉
Who am I ?• 林 淳哉(35歳)
• 1児のパパ
• Python 歴10年くらい?
• Pylons, Pyramid
https://github.com/ledmonster/werewolf
DDDを 意識してみた
UI
App
Domain
Infra
/api /socket.io
Pyrmid ViewNamespace
Backend
Flywheel
Repository
Game DomainUser
Domain
MessageHandler
Frontend
Repository
Handlebars
Web Page
Bacon.appView
Model
Router
jQuery
Bacon.js
UI
App
Domain
Infra
/api /socket.io
Pyrmid ViewNamespace
Backend
Flywheel
Repository
Game DomainUser
Domain
MessageHandler
Frontend
Repository
Handlebars
Web Page
Bacon.appView
Model
Router
jQuery
Bacon.js
Pyramid
socket.ioBacon.js
Flywheel
handlebars
Backend
Backend• AWS
• Python
• Pyramid
• gevent-socketio
• google-api-python-client
• DynamoDB
ルーティング
チャット
gevent-socketio へ委譲
ChatNamespace
• ディスパッチ • MessageHandler へ処理を委譲 • Client へメッセージを送信
Frontend
Frontend• 構成管理
• npm
• gulp
• bower
• bacon.js
• handlebars
• socket.io-client
送受信
bacon.appbacon.js ベースの社内FWを利用
• ルーティング
• View の描画
• Event 処理
• DOM: bacon.js
• socket.iohttps://github.com/xica/bacon.app
DDD
UI
App
Domain
Infra
/api /socket.io
Pyrmid ViewNamespace
Backend
Flywheel
Repository
Game DomainUser
Domain
MessageHandler
Frontend
Repository
Handlebars
Web Page
Bacon.appView
Model
Router
jQuery
Bacon.js
コンテキストマップ
!1. ユーザ、認証 2. 人狼 3. チャット
※ 妄想込みなので注意
ドメインモデル• Entity の識別子に UUID を利用
• Value Object には Enum 型を活用
• namedtuple も使えるかも?
リポジトリ• ドメインモデルからのアクセスは・・・?
• NG派: アプリ層のサービスで処理
• OK派: リポジトリの I/F は知っててOK
• Pyramid の Root Factory を使って、context として各ビューに引き渡した。
http://www.infoq.com/jp/news/2008/02/ddd-di-aop
ドメインイベント• DDD本には載ってない重要オブジェクト
• ドメイン層のイベントを他のレイヤーやコンテキストに通知する仕組み
• 例: ゲーム → EventBus → チャット
• Pyramid Event が活用できる?
• EventModel として永続化した※ 人狼では EventBus の実装が間に合わず
コアドメイン• コンテキストマップの中で、事業的に最も集中すべきドメイン
• もっと早く知りたかった・・
この1ヶ月、コアドメイン(人狼)以外の実装しかやってなかった・・・
まとめ• Pyramid で DRY な開発ができる
• SPA に bacon.js はオススメ
• Python でも DDD は役に立つ
• (Flywheel はまだちょっと微妙)
• iPhone アプリ版を作りたい
https://github.com/ledmonster/werewolf