Submit Search
Upload
プログラミング言語とシステムデザイン
•
0 likes
•
326 views
Tsutomu Yano
Follow
Tech BASE Okinawa 2021での発表で使ったスライドです。
Read less
Read more
Software
Report
Share
Report
Share
1 of 52
Download now
Download to read offline
Recommended
Clojureの世界と実際のWeb開発
Clojureの世界と実際のWeb開発
Tsutomu Yano
Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋
Satoshi KOBAYASHI
Parser combinatorってなんなのさ
Parser combinatorってなんなのさ
cct-inc
バイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryen
Eyes, JAPAN
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
Yuki Tamura
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
日本語テストメソッドについて
日本語テストメソッドについて
kumake
例外設計における大罪
例外設計における大罪
Takuto Wada
Recommended
Clojureの世界と実際のWeb開発
Clojureの世界と実際のWeb開発
Tsutomu Yano
Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋
Satoshi KOBAYASHI
Parser combinatorってなんなのさ
Parser combinatorってなんなのさ
cct-inc
バイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryen
Eyes, JAPAN
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
Yuki Tamura
Rust で RTOS を考える
Rust で RTOS を考える
ryuz88
日本語テストメソッドについて
日本語テストメソッドについて
kumake
例外設計における大罪
例外設計における大罪
Takuto Wada
目grep入門 +解説
目grep入門 +解説
murachue
Moving computation to the data (1)
Moving computation to the data (1)
Kazunori Sato
実践!Django + GraphQL 実装
実践!Django + GraphQL 実装
ssuseraf19bf
静的型付け言語Python
静的型付け言語Python
kiki utagawa
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
ゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetup
gree_tech
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
aha_oretama
serviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おう
よしだ あつし
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Etsuji Nakai
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
Fantastic DSL in Python
Fantastic DSL in Python
kwatch
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Yutaka Kachi
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
Pull Request & TDD 入門
Pull Request & TDD 入門
ESM SEC
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
Mixed Precision Training
Mixed Precision Training
Masao Taketani
Marp Tutorial
Marp Tutorial
Rui Watanabe
#nds34 LT
#nds34 LT
Kazumune Katagiri
磯野ー!Dartやろうぜー!
磯野ー!Dartやろうぜー!
uka yare
More Related Content
What's hot
目grep入門 +解説
目grep入門 +解説
murachue
Moving computation to the data (1)
Moving computation to the data (1)
Kazunori Sato
実践!Django + GraphQL 実装
実践!Django + GraphQL 実装
ssuseraf19bf
静的型付け言語Python
静的型付け言語Python
kiki utagawa
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
ゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetup
gree_tech
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
aha_oretama
serviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おう
よしだ あつし
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Etsuji Nakai
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
Fantastic DSL in Python
Fantastic DSL in Python
kwatch
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Yutaka Kachi
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
Pull Request & TDD 入門
Pull Request & TDD 入門
ESM SEC
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
Mixed Precision Training
Mixed Precision Training
Masao Taketani
Marp Tutorial
Marp Tutorial
Rui Watanabe
What's hot
(20)
目grep入門 +解説
目grep入門 +解説
Moving computation to the data (1)
Moving computation to the data (1)
実践!Django + GraphQL 実装
実践!Django + GraphQL 実装
静的型付け言語Python
静的型付け言語Python
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
ゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetup
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
serviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おう
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Fantastic DSL in Python
Fantastic DSL in Python
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Pull Request & TDD 入門
Pull Request & TDD 入門
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Mixed Precision Training
Mixed Precision Training
Marp Tutorial
Marp Tutorial
Similar to プログラミング言語とシステムデザイン
#nds34 LT
#nds34 LT
Kazumune Katagiri
磯野ー!Dartやろうぜー!
磯野ー!Dartやろうぜー!
uka yare
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
haljik Seiji
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
増田 亨
プロ用CMSフレームワークテーマ「echo」のご紹介
プロ用CMSフレームワークテーマ「echo」のご紹介
Seiko Kuchida
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Koichiro Matsuoka
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
Koichi ITO
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
訳が欲しい奴ぁ俺んとこ来い!
訳が欲しい奴ぁ俺んとこ来い!
Ryuji Tamagawa
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
Ryutaro YOSHIBA
Windows Azure 最新 Update 2013/12/09
Windows Azure 最新 Update 2013/12/09
Ryusaburo Tanaka
2011 10-satalabo-naaon
2011 10-satalabo-naaon
Naoki Okino
KyotoLT_Online_27.pdf
KyotoLT_Online_27.pdf
hiroya akita
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
ソフトウェア開発の現場風景
ソフトウェア開発の現場風景
Koichi ITO
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
Koichiro Matsuoka
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Koichiro Matsuoka
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
Koichiro Matsuoka
Windows Azure 最新 Update 2014/01/28
Windows Azure 最新 Update 2014/01/28
Ryusaburo Tanaka
特にタイトルはない
特にタイトルはない
Aya Komuro
Similar to プログラミング言語とシステムデザイン
(20)
#nds34 LT
#nds34 LT
磯野ー!Dartやろうぜー!
磯野ー!Dartやろうぜー!
ドメイン駆動設計を実践するプログラマーの悩み
ドメイン駆動設計を実践するプログラマーの悩み
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
プロ用CMSフレームワークテーマ「echo」のご紹介
プロ用CMSフレームワークテーマ「echo」のご紹介
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
訳が欲しい奴ぁ俺んとこ来い!
訳が欲しい奴ぁ俺んとこ来い!
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
Windows Azure 最新 Update 2013/12/09
Windows Azure 最新 Update 2013/12/09
2011 10-satalabo-naaon
2011 10-satalabo-naaon
KyotoLT_Online_27.pdf
KyotoLT_Online_27.pdf
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
ソフトウェア開発の現場風景
ソフトウェア開発の現場風景
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
Windows Azure 最新 Update 2014/01/28
Windows Azure 最新 Update 2014/01/28
特にタイトルはない
特にタイトルはない
プログラミング言語とシステムデザイン
1.
2021/12/18 株式会社ユーザベース 矢野勉 プログラミング言語とシステムデザイン Clojure,
J a v a , デザインパターン, DDD, Cle a n Architecture
2.
提供 株式会社ユーザベース
3.
誰? • 名前: 矢野勉 •
@t_yano • https://boxofpapers.hatenablog.com/ • 株式会社ユーザベース・技術部門のフェローをやってます (フェローというのはユーザベースの正式な役職名で、別に名誉職ではないです。仕 事してます) • プログラミング言語Clojureのコントリビュータ コンパイラにパッチ送ったりしてます(なかなかマージされない…)
4.
モデリング議論楽しいですよね けっこう白熱しますよね これはこういうクラスに分割しよう これはドメインかな、ドメインサービスかな
5.
なんのためのクラス分け? 夢中になると、なんのために クラス分けしようとしてるの か、思考が止まってしまう
6.
デザパタ地獄 なんでもかんでも、なんらかのデザインパターンを適用しようとする麻疹 AbstractFactoryパターンがあるからnewは禁止ですか? シンプルな委譲で済むことに、ChainOfResponsibilityパターン必要ですか?
7.
なんでも過剰になっていく XML-RPC →もっと機能増やすぜ →
SOAP XML最高 → EJB2 REST最高!→ RESTful+HATEOAS
8.
設計にはトレードオフがつきもの やりたいことに対して複雑さが高過ぎては意味がない トレードオフ
9.
パターンは言語によっては消滅してしまう デザインパターンはトレードオフで選択するもの Visitorオブジェクトを定義することで、階層状のノードを潜りながら、ノード に対する操作を実行していくデザインパターン Visitorパターン
10.
• Visitorはクロージャ関数として書けるし、ノードを潜る操作は再帰処理として書けま す。 クロージャ関数があって、再帰処理をサポートしている言語で、 このパターン必要ですか?
11.
デザインパターンには、適用条件があって、その条 件がなくなってしまったら、パターンごと必要なく なる
12.
条件が変わったら消えてしまうものがある。 でも条件が変わっても消えないものもある。
13.
設計理論 その消えないものの一つが で それを適用したものが アーキテクチャ なんじゃないかと思います
14.
DDDとCleanArchitecture
15.
Clojureというプログラミング言語を肴に、 DDDやCleanArchitectureがどう見えてくるのかって話をしたいです Clojureってどんな言語?
16.
LISP系のJVM上で動く言語 よくかっこ多過ぎと言われるアレ (実際にはそんなに変わらんのだけど)
17.
関数言語
18.
• クラスはない • 一つのデータに対してたくさんの関数 一般的なオブジェクト指向言語
Clojure
19.
データと関数は独立している Users 閲覧者を処理する関数 Listを処理する関数 購入者を処理する関数 社員を処理する関数
20.
データの価値は、関数が決める Users 社員を処理する関数 関数がそのデータを社員として扱うなら、それは社員データ
21.
CleanArchitectureのあの図
22.
Usecaseってなんだ? Usec a seオブジェクト? 社員のある月のサラリーを求めるユースケース 社員Repository 社員Domain Service 勤務履歴Repository 社員 履歴 メソッド
23.
Clojureでも似たような構造は作れるが… RecordとProtocol 社員のある月のサラリーを求めるユースケースprotocolを実装したrecord SalaryUsecase 社員Repository 社員Domain Service 勤務履歴Repository 社員 履歴 protocol関数 Record作成時にrecord内に格納する
24.
関数は、その引数にだけ依存すべき 多くの関数言語で使われるポリシー •関数はそれだけで実行できるべき •テスト容易性 •REPLドリブン開発
25.
ただの関数でよくない? 社員のある月のサラリーを求める関数 その他必要なもの全部 年月 社員を特定できるデータ 引数
26.
DDDのエンティティ エンティティ「社員」 社員ID 名前 値オブジェクト 部署 ある月の社員の基本給を求めるメソッド 年月 引数 値オブジェクト 値オブジェクト オブジェクト フィールド オブジェクト フィールド
27.
関数でよくない? 社員の基本給を求める関数 基本給を求めるのに必要な社 員の情報が入ってるデータ 引数 年月
28.
Clean ArchitectureのいうEntity CleanArchitectureのEntityと DDDのEntity Entityオブジェクト Entityを取り出すRepository Domain Service DDDの「モデル」
29.
ドメインを表す名前空間に関数定義すればよくない? Clojureでは、関数は「名前空間」で区分けすることができます 社員データを処理する関数 社員データを取り出す関数 社員データ同士をまとめて処理したり、他のものを掛け合わ せて処理したりする関数 「社員」名前空間 Entityのメソッドだったもの Repositoryのメソッドだったもの DomainServiceのメソッドだったもの
30.
何がドメインかは、関数が決める Users 社員を処理する関数 関数がそのデータを社員として扱うなら、そのデータは社員 データが社員クラスだから社員なのではない データそれだけでは、ただのデータで、何者でもない
31.
これらは、オブジェクト指向のデザインパターンだった Entityオブジェクト Entityを取り出すRepository Domain Service Usecaseオブジェクト オブジェクト指向言語の特性や制約が生んだものであっ て、システム設計上必須のものではなかった デザインパターンは、条件が変わると消滅することがある
32.
でも、それでも消えなかったものも ありますよね その部分が、言語を超えて通用するアーキテクチャ
33.
“CleanArchitecture”というアーキテクチャはない あの図は例の一つです
34.
この図の通りやってる人どのくらいいますか? 特にWebアプリケーション開発してる人
35.
割と都合悪いところは無視してません? でもそれはそれでも構わない場合もある
36.
SOLID原則 • S -
Single-responsiblity Principle 単一責任の原則 • O - Open-closed Principle オープン・クローズドの原則 • L - Liskov Substitution Principle リスコフの置換原則 • I - Interface Segregation Principle インターフェイス分離の原則 • D - Dependency Inversion Principle 依存関係逆転の原則 2000年ごろにUSENETで誕生(名前がついたのは2004年)
37.
Robert C.Martin,角 征典,高木
正弘. Clean Architecture 達人に学ぶソフトウェアの構造と設計 (Japanese Edition) “SOLID原則は、関数やデータ構造をどのようにクラスに組み込むのか、そしてクラスの相 互接続をどのようにするのかといったことを教えてくれる。「クラス」という用語を使った からといって、これらの原則がオブジェクト指向ソフトウェアにしか通用しないわけではな い。ここでいうクラスとは、単にいくつかの機能やデータをとりまとめたものを指している にすぎない。「クラス」と呼ぶかどうかは別として、どのようなソフトウェアシステムにも そのような仕組みはあるはずだ。SOLID原則は、そうした仕組みに適用するものである”
38.
単一責任の原則 個々のモジュールを変更する理由がたったひとつだけになるように、ソフト ウェアシステムの構造がそれを使う組織の社会的構造に大きな影響を受けるよ うにする。 オープン・クローズドの原則 ソフトウェアを変更しやすくするために、既存のコードの変更よりも新しい コードの追加によって、システムの振る舞いを変更できるように設計すべきで ある
39.
リスコフの置換原則 要するに、交換可能なパーツを使ってソフトウェアシステムを構築するなら、 個々のパーツが交換可能となるような契約に従わなければいけないというこ と。 インターフェイス分離の原則 ソフトウェアを設計する際には、使っていないものへの依存を回避すべきだと いう原則。
40.
依存関係逆転の原則 上位レベルの方針の実装コードは、下位レベルの詳細の実装コードに依存すべ きではなく、逆に詳細側が方針に依存すべきであるという原則。
41.
SOLID原則をシステムに当てはまるとこうなるよね と言うのがこの図 ぶっちゃけ色分け以外の文字はどうでもいい…
42.
外界 アプリケーションロジック ビジネスロジック 外界とのIO詳細
43.
でも一番複雑なプログラム、ここにあったりしませんか? 一番複雑な部分を、G a tew a yの向こう側に吹っ飛ばしてしまってるとも言える それじゃ、システムの複雑さは改善されないですよね??
44.
この図の通りにクラス分けできているか? 自分のプログラムは SOLID原則を守れているか? よりも の方が大事。
45.
• 下位レイヤーとロジックを分離できているか? ( インターフェイス分離の原則) •
ロジックが下位レイヤーの詳細に依存するのではなく、下位レイヤーの方がロジック 側の提供する仕様に合わせているか? (依存関係逆転の原則) • 下位レイヤーの変更を行わずに、コードを追加することで、機能の拡張ができるか? (オープン・クローズドの原則) こういった理屈は、言語が変わっても そのまま適用できる
46.
OSにだって適用できる OS (カーネル)プラグイン ハードウェア抽象化レイヤー ハードウェア
47.
Webアプリケーション以外にだって適用できる データ Clojureのチャンネル・パイプラインの実装 チャンネル 関数 関数 関数 関数 関数 関数 既存のチャンネル+関数を変更することなく、 チャンネルを追加することで、機能を拡張・改変できる
48.
もちろんGatewayの向こう側に 吹っ飛ばした複雑性にも 適用できる
49.
言語を超えて通用するものを見つけるために パラダイムの違う言語をやろう 今オブジェクト指向言語ばっかり使っているなら オブジェクト指向言語でないものをやろう
50.
言語を超えても有効なものこそが、 システムの基盤となるアーキテクチャ理論になる 今回言いたかったこと モデリングは楽しいけども、 その部分を無視したモデリングは多分何も解決してくれない
51.
とりあえず Clojure やってみませんか? というわけで 楽しいよ…
52.
終わり
Download now