Object Oriented Conference 2020 参加してきたメモ
2/16 に行われた Object Oriented Conference に参加してきた。
OOC は名前の通り、「オブジェクト指向」についてのカンファレンス。 セッションは大小 34 あり、設計やアーキテクチャの話が多かったし、DDD も結構テーマに上げられてた。 CfP 倍率は 3 倍程度で結構応募があったらしい。
全体的には、キーノートでも言われていたが、多様性により OO といっても立場や考えが色々異なる視点からの話が聞けた。
以下聞いてきたセッションの話。
キーノート Object Oriented Diversity
OOC keynote: Object Oriented Diversity - Speaker Deck
OO が様々な意味を持つようになってしまい、 同じ OO の話をしていても行き違いが発生しやすくなってしまった。 ということで OO について話すときには「コンテキスト」を意識しましょうという話だった。
実際 OOP にしてもメッセージパッシングのことを OO と言っていたり、抽象データ型を使うことを OO と言ったりもするので、文脈を共有するのは大事そう。
DDD はオブジェクト指向言語でどのようにメンテナンス可能なコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDD の話。
- モデリングが重要
- {ドメインエキスパートからの知識 → モデルに反映 → 運用からのフィードバック}の改善ループが重要
- モデルの継続的な改善のためにも高い拡張性が必要
- 軽量 DDD でベストプラクティスを取り入れるのでも効果はある。そこからモデリングに進むと良い
DDD を導入する際にはお手本となるコードを作ってから、それを参考にして残りをつくる、というやり方がおすすめ
モデリング手法
- 決まった方法はない
- よく使われるのは
- RDRA2.0
- ユースケース駆動分析設計
ユースケース駆動のポイントとしては:
- ユースケース図
- ユースケースの具体化・言語化
- ドメインモデル図作成の範囲を狭める
- ドメインモデル図
- メソッド不要・属性も代表的なものだけ
- 業務の「ルール・制約」=ドメイン知識を引き出しで記述する - 集約の範囲を明記すると良い
紹介されていた DomainLanguage.com https://domainlanguage.com/ はよくまとまっているし参考にしたい
数理的システム設計
ソフトウェアシステム設計における アレグザンダー理論の活用 数理的システム設計手法の提案 #agileto2019 - Speaker Deck
アーキテクチャ設計の話だが、ちょっとついていけなかった。
自分もアレキザンダーの本とかやっぱりちょっとは目を通してみるべきかも。
アジャイル時代のモデリング 平鍋健児
アジャイルでのモデリングの話。手法というよりもどうモデリングを続けていくかのプラクティスの話か。
紹介されていたアイディアとしては、モデルを作成した際に出来る図・資料を保存するもの = KEEPS とすぐ破棄するもの = TEMPS に分けると良いとのこと。
KEEPS にするものは価値を生み出すもの:
TEMPS にするものはほとんど価値を産まないもの: - カジュアルモデリングの成果物 - クラス図、シーケンスダイアグラムなど
他に Impact Mapping というモデリング手法や C4 Model というものが紹介されていた。
「モジュールとしてのマイクロサービス」と「分割単位としてのドメイン」について考える
「モジュールとしてのマイクロサービス」と 「分割単位としてのドメイン」について考える - Speaker Deck
システムをどのように分割するかの話。
- 複雑なものは分けて考える
- 重要な設計要素は、モジュール性とビジネスの関心事
- 人間のコミュニケーションを阻害しないようにシステムとチームを構成する
- 分散システムの難易度などの落とし穴に注意
- モノリスが常に不利益を生むわけではない
- モジュラモノリスという内部的に分割を行うパターンも採用例がある
- MSA していてもフロントエンドがモノリス化してしまうことが多々ある
- フロントエンドもモジュラモノリスにするとよい
オブジェクト思考プログラミングの過去・現在・未来
OOP とはなにか?に対しては「データの抽象化」がそれに当たるという主張。 データ抽象により、語彙(ユビキタス言語か)、自己文書化、関心事の分離などできる。
後半は OOP の歴史の話。
黎明期から始まり、型を軽視や怪しげな例え話などによる混乱があったが、現在はその混乱が収束しつつある。
型がない言語で OOP できっこない、という話があったが、個人的にはちょっと反対したい。