2020/02/16(日)に行われた「Object-Oriented Conference」のまとめです。
ハッシュタグは#ooc_2020です🐦
イベントページはこちら↓
私の背景
私はiOSアプリエンジニアであり、その目線で本記事を書いています。
会場
会場はお茶の水女子大学です。
大学で行われる勉強会に参加したのは、昨年のiOSDC以来でした。
写真はないですが、アットホームな雰囲気で学生の頃に戻ったような感じでした笑
セッション
私が聴講したセッションのみ紹介します。
オブジェクト指向のその前に — 凝集度と結合度
- 時間:16:00–16:20
- 場所:共1–301
- 発表者:そな太さん(@sonatard)
凝集度の観点から関数分割を考えるお話でした。
凝集度とは、モジュール内のソースコードが特定の機能を提供すべく如何に協調しているかを表す度合いのことのようです。
Wikiの説明だけだと難しいですが、要は高いほど機能が絞られていて望ましいということです。
そな太さんが十分と考える凝集は以下の4種類です。(凝集度の低順)
- 偶発的凝集(最悪、凝集度が低い)
関連性のない処理が1つの関数内に実装されている
→どのような関数も偶発的凝集は避けるべき - 論理的凝集
論理的に似ている処理が1つの関数内に実装されている
引数のフラグで処理を分岐させている
→できる限り避けるべき
論理的凝集された関数の内部を機能的凝集で関数化し、それを呼び出すのみにする - 時間的凝集
特定の時間に実行される処理が1つの関数内に実装されている
→基本的には避けるべきだが、Viewのライフサイクルやmain関数では避けられない
その場合、処理をベタ書きするのでなく、機能的凝集された関数を呼び出すのみにする - 機能的凝集(最良、凝集度が高い)
単一の処理が1つの関数内に実装されている
→理想的、基本的にはこちらを目指すべき
結合度についてはほとんど言及されなかったので、キーワードで後ほど調べてみます。(結合度の高順)
- 内容結合(最悪、結合度が高い)
- 共通結合
- 外部結合
- 制御結合
- スタンプ結合
- データ結合
- メッセージ結合(最良、結合度が低い)
自分がなんとなく考えていたことが言語化されていて、非常に勉強となる発表でした。
自分でも凝集度についてまとめたいと思ったため、iOSアプリを例にしてQiitaに記事を書きました。よかったら読んでみてください。
参考資料をTwitterで教えていただきました。本当に感謝です。
ドメイン駆動設計を支えるアーキテクチャテスト
- 時間:16:30–16:50
- 場所:共1–301
- 発表者:かわなみゆうさん(@kawanamiyuu)
アーキテクチャテストのお話でした。
「アーキテクチャとは依存関係のガイドライン」「どのアーキテクチャも依存関係を適切に設計したいだけ」など、自分では考えなかった観点(依存関係)からアーキテクチャの必要性を説いていて面白かったです。
(ちなみに私は「テストしやすくするため」という観点を一番に考えています)
「ArchUnit」というJavaでアーキテクチャの単体テストを実現するフレームワークを紹介されていました。
テストコードの例を見る限り、importによる依存関係をテストするのでSwiftでは実現しにくいと感じました。試したかったので残念です。
「アーキテクチャをテストする」という発想はなかったので、気づきの多い発表でした。
かわなみさんはArchUnitについてQiitaにも投稿されています。
デザインにオブジェクト指向を適用する
- 時間:17:00–17:20
- 場所:共1–304
- 発表者:ロクネムさん(@_rockname)
OOUIのお話でした。
「OOUI」とは「Object Oriented User Interface」の略であり、画面上のコンポーネントとアプリのデータをオブジェクト指向によって対応付ける手法のようです。
アクション(動詞、例:コメントする)を先に選択し、その後にオブジェクト(名詞、例:対象の写真)を選択するUIを「タスクベースのUI」といい、人間のメンタルモデルに反するため望ましくないようです。
アクションを先に選択すると「モード」が生まれ、タスクが完了するまで他のモードに切り替えられなくなります。(このようなUIを「モーダル」という)
オブジェクトを先に選択するUIを「オブジェクトベースのUI」といい、モードが生まれないため望ましいようです。(「モーダレス」という)
できる限りユーザーが主導権を持つモーダレスが望ましいとのことです。
ただし、CRUD操作でCだけはモーダルで表現せざるをえなさそうです。
TwitterでもCに対していろいろな意見がありました。
「ギャレットの5段階モデル」を初めて知ったのですが、OOUIは3層目の「構造」までを支えるとのことです。
UI/UXを「名詞→動詞の順で考える」という概念を知らなかったので、自分の中で世界が広がりました。
エンジニアがUI/UXを最初から考える機会は少ないですが、意識していきたいです。
おわりに
私が聴講したセッションは3つとも初めて学ぶ概念であり、非常に勉強となりました。
Swiftだとアーキテクチャテストは取り入れづらそうですが、凝集度とOOUIについては取り入れられるので、積極的に意識していきたいです。