Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. FrontEnd:DDD June 21, 2017 Takefumi Yoshii Design Division DeNA Co., Ltd. Frontend de KANPAI! #01
Slide 2
Slide 2 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. FrontEnd:DDD ! 吉井健⽂ @Takepepe ! 広告制作会社 -> DeNA ! WebDesigner -> FrontendEngineer ! Flash -> jQuery -> React ! ⼆児のパパ 2 ⾃⼰紹介
Slide 3
Slide 3 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. FrontEnd:DDD ! サービス事業開発(ヘルスケア) ! Rails / React / Redux / CSS ! ServersideEngineer:〜10⼈ ! FrontendEngineer:〜3⼈ ! Designer:〜2⼈ 3 担当事業について 本⽇の内容は⼤規模で⻑期運⽤を前提としたプロダクトをスコープとしています。 実践しているものもあれば、プロトタイプレベル程度で留めているもあります。
Slide 4
Slide 4 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. FrontEnd:DDD 4 ドメイン駆動設計(DDD) アプリケーションを継続的に改良していくため、 ユビキタス⾔語(チームの共通⾔語)を通じて、反復的に ドメインモデル(ビジネスロジックの核⼼)をグロースさせていく。 【参考⽂献】エリック・エヴァンスのドメイン駆動設計(通称DDD本) 複雑なアプリケーション開発のためのアーキテクチャ。 アプリケーション開発の核⼼はドメインモデリングにあるとされ、 分析モデルと実装モデルが同期している必要性が説かれている。
Slide 5
Slide 5 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. FrontEnd:DDD 5 ドメイン駆動設計(DDD) 本⽇のコンテキストは「フロントエンド実装の活動領域」 「jQueryの⼿続き的な実装で乗り切ったレガシーな部分と、 React / Angular / Vue.js などを導⼊した部分が混在している」 という「フロントドメインあるある」を例に、克服すべき課題を挙げ、 DDDの概念を適⽤することで、どう解決するのかを考察する。
Slide 6
Slide 6 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. 6
Slide 7
Slide 7 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. 7
Slide 8
Slide 8 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. 8 SPA の外で⾶び交う Event … Store に隠蔽された State …
Slide 9
Slide 9 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. 9 Real と Virtual で重なり合うモーダル … observe 漏れのウィジェット …
Slide 10
Slide 10 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. 10 求められる指揮者「ドメインモデル」は フレームワークの外界にある!
Slide 11
Slide 11 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. 11 DDD:JS
Slide 12
Slide 12 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:JS 先のあるある事例の様な場合、SPA・⾮SPAのルーティング配下問わず、 フレームワークと異なるレイヤーでの状態管理が必須に。 また、SPA配下では状態管理が統合できている構造が必要になる。 SPA外に発⾏するイベント・SPA外から受け付けるイベント これもまた統合できている構造が必要になる。 DDD本の第4章「レイヤードアーキテクチャ」で⽰されている 責務の分離図を⾒てみる。 12 課題の概要
Slide 13
Slide 13 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:JS 13 DDD本 第4章 レイヤードアーキテクチャ
Slide 14
Slide 14 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:JS 14 DDD : React Redux ⼀例
Slide 15
Slide 15 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:JS 15 DDD : jQuery Widget ⼀例
Slide 16
Slide 16 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:JS ドメインモデルとインフラストラクチャを据えることで、 バラバラだった機能を統合することができる。 ! ユーザー情報などは「ドメインモデル」 ! グローバルUIは「ドメインモデル」 ! SPAのみで利⽤する様な jsonAPI等 は「アプリケーションモデル」 管理対象のコンテキストに適切な場所に、ビジネスロジックを据える。 ドメインモデル・アプリケーションモデルにビジネスロジックを 集中させることでフレームワーク依存度が下がり、再利⽤性が⾼まる。 16 ドメイン・アプリケーションの境界線
Slide 17
Slide 17 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:JS モデルの実装は Immutable.js が良い。 分散されがちな細かい表⽰ロジックやラベルの合成が集中できる。 Reduxでは副作⽤を委譲することができ、ドメインモデルの統合も容易。 インフラストラクチャに位置するサービスは、EventEmitterを継承。 サービス化を進めることで、redux-* が不要になることに気づく。 サービスが複雑になってきたら rx に頼りそう。 17 ReactRedux:モデリング – 状態管理 -
Slide 18
Slide 18 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. FrontEnd:DDD ! FluxとDDDの統合⽅法 - かとじゅんの技術⽇誌 @かとじゅん ! 複雑なJavaScriptアプリケーションを考えながら作る話 @azu_re ! React使い必⾒! Immutable.jsでReactはもっと良くなる 18 参考⽂献 考察・資料作成にあたり参考にさせていただきました。 感謝いたします!
Slide 19
Slide 19 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. 19 DDD:CSS
Slide 20
Slide 20 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:CSS ! イベントが存在しない分、JSよりは分り易い依存関係 ! CSS のモデルは UIコンポーネント ! Bootstrap はモデルとして機能していると⾔える ! 利⽤者はプレゼンテーショナルな定義と微調整のみで良い ! モデルを抽象化、エンティティとして利⽤ ! UI/UX の拡張に伴い、モデルをマイグレートさせる ! UI/UX がグロースすることで、モデルが豊かになっていくことが理想 20 CSS設計:ドメインモデル
Slide 21
Slide 21 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:CSS ! CSS設計に応じて、4つの層のどこに属している定義なのか意識 ! プレフィクスで分離されているCSS設計なら認識しやすい ! ドメイン・アプリケーションのコンテキストを分離 ! FLOCSSでいう Components と Projects の分離 担当事業で採⽤しているCSS設計図にDDDの4つの層を当ててみる。 21 CSS設計:モデリング
Slide 22
Slide 22 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:CSS 22 担当事業のCSS設計 - 2つの ITCSS × AtomicDesign × BEM -
Slide 23
Slide 23 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:CSS 23 担当事業のCSS設計 - ドメイン・アプリケーションの境界と依存関係 -
Slide 24
Slide 24 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:CSS 24 担当事業のCSS設計 – マイグレートの⽅向 -
Slide 25
Slide 25 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:CSS ! ⼿続き的な定義は⼀旦プレゼンターに委ねる ! エンティティが表⾯化した時、モデル・ドメインにマイグレート ! BOXモデルが関⼼の分離を侵⾷しない様に注意 ! アプリケーションプレゼンターなら css modules もアリ ! それでも、責務の識別 と e2eテストツール の都合からBEMに落ち着く 【その他設計上の規約】 ! 詳細度とコンテキストの解決は最初から整備しておく ! ⾼階コンポーネントModifier から受ける作⽤を必要に応じて開けておく ! 状態でコンポーネントを管理するのではなく、コンポーネントが状態を管理 ! マルチクラスModifierを採⽤、カプセル化 ! ⽤法容量を守った⾶び道具 25 CSS設計:モデルのマイグレート
Slide 26
Slide 26 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. 26 【総括】 ビジネス要件に⾒合った 設計を選択しよう
Slide 27
Slide 27 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. 27 【総括】 過剰な分離は本末転倒 移⾏期を⾒逃さない様に
Slide 28
Slide 28 text
Copyright © DeNA Co.,Ltd. All Rights Reserved. 28 ご清聴ありがとうございました