Enviar pesquisa
Carregar
プログラミング言語とシステムデザイン
•
0 gostou
•
326 visualizações
Tsutomu Yano
Seguir
Tech BASE Okinawa 2021での発表で使ったスライドです。
Leia menos
Leia mais
Software
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 52
Baixar agora
Baixar para ler offline
Recomendados
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
Clojureの世界と実際のWeb開発
Clojureの世界と実際のWeb開発
Tsutomu Yano
テスト技法の背景を考察する - WACATE2021夏
テスト技法の背景を考察する - WACATE2021夏
kauji0522
例外設計における大罪
例外設計における大罪
Takuto Wada
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Shin Ohno
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
Recomendados
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
Clojureの世界と実際のWeb開発
Clojureの世界と実際のWeb開発
Tsutomu Yano
テスト技法の背景を考察する - WACATE2021夏
テスト技法の背景を考察する - WACATE2021夏
kauji0522
例外設計における大罪
例外設計における大罪
Takuto Wada
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Shin Ohno
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
Private Recommender Systems: How Can Users Build Their Own Fair Recommender S...
Private Recommender Systems: How Can Users Build Their Own Fair Recommender S...
joisino
WebSocketのキホン
WebSocketのキホン
You_Kinjoh
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
[第2回3D勉強会 研究紹介] Neural 3D Mesh Renderer (CVPR 2018)
[第2回3D勉強会 研究紹介] Neural 3D Mesh Renderer (CVPR 2018)
Hiroharu Kato
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
Yuhei Miyazato
オントロジーとは?
オントロジーとは?
Kouji Kozaki
Oss貢献超入門
Oss貢献超入門
Michihito Shigemura
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
品質とは何か.pdf
品質とは何か.pdf
kauji0522
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Yutaka Kachi
クソコード動画「Managerクラス」解説
クソコード動画「Managerクラス」解説
MinoDriven
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
#nds34 LT
#nds34 LT
Kazumune Katagiri
磯野ー!Dartやろうぜー!
磯野ー!Dartやろうぜー!
uka yare
Mais conteúdo relacionado
Mais procurados
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
Private Recommender Systems: How Can Users Build Their Own Fair Recommender S...
Private Recommender Systems: How Can Users Build Their Own Fair Recommender S...
joisino
WebSocketのキホン
WebSocketのキホン
You_Kinjoh
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
[第2回3D勉強会 研究紹介] Neural 3D Mesh Renderer (CVPR 2018)
[第2回3D勉強会 研究紹介] Neural 3D Mesh Renderer (CVPR 2018)
Hiroharu Kato
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
Yuhei Miyazato
オントロジーとは?
オントロジーとは?
Kouji Kozaki
Oss貢献超入門
Oss貢献超入門
Michihito Shigemura
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
増田 亨
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
品質とは何か.pdf
品質とは何か.pdf
kauji0522
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
Yutaka Kachi
クソコード動画「Managerクラス」解説
クソコード動画「Managerクラス」解説
MinoDriven
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
Mais procurados
(20)
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
C#でわかる こわくないMonad
C#でわかる こわくないMonad
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
暗号技術の実装と数学
暗号技術の実装と数学
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Private Recommender Systems: How Can Users Build Their Own Fair Recommender S...
Private Recommender Systems: How Can Users Build Their Own Fair Recommender S...
WebSocketのキホン
WebSocketのキホン
関数プログラミング入門
関数プログラミング入門
[第2回3D勉強会 研究紹介] Neural 3D Mesh Renderer (CVPR 2018)
[第2回3D勉強会 研究紹介] Neural 3D Mesh Renderer (CVPR 2018)
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
オントロジーとは?
オントロジーとは?
Oss貢献超入門
Oss貢献超入門
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
品質とは何か.pdf
品質とは何か.pdf
オープンソースライセンスの基礎と実務
オープンソースライセンスの基礎と実務
クソコード動画「Managerクラス」解説
クソコード動画「Managerクラス」解説
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
Semelhante a プログラミング言語とシステムデザイン
#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
Windows Azure 最新 Update 2014/03/10
Windows Azure 最新 Update 2014/03/10
Ryusaburo Tanaka
Semelhante a プログラミング言語とシステムデザイン
(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
特にタイトルはない
特にタイトルはない
Windows Azure 最新 Update 2014/03/10
Windows Azure 最新 Update 2014/03/10
プログラミング言語とシステムデザイン
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.
終わり
Baixar agora