Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
達人に学ぶソフトウェアの構造と設計 29,30章
Search
kazuki
December 09, 2020
Technology
0
55
達人に学ぶソフトウェアの構造と設計 29,30章
kazuki
December 09, 2020
Tweet
Share
More Decks by kazuki
See All by kazuki
達人に学ぶソフトウェアの構造と設計 19,20章
kazuki_ijima_ym
0
44
達人に学ぶソフトウェアの構造と設計 9,10,11章
kazuki_ijima_ym
0
150
Other Decks in Technology
See All in Technology
どう買う?Azure
kuniteru
1
190
やっていきテスト
k6s4i53rx
0
160
Azureコストは水道代/The_47th_Tokyo_Jazug
aeonpeople
3
350
チーム単位で保守性を高める:独自指標と向上にむけた実践
tarappo
0
300
Getting started with controlling LEGO using Swift
hcrane
0
130
生成AIの不確実性と向き合うためのオブジェクト指向設計
tkikuchi1002
2
660
Cloud Friendly(?) Jenkins. How we failed to make Jenkins cloud native and what we learned?
onenashev
PRO
0
110
Evolutionary Optimization of Model Merging Recipes
fuyu_quant0
3
520
家族アルバム みてねで直面してきた技術的負債 / MIXI KAG 2024
isaoshimizu
17
7.7k
20240321_生成AI時代のDevOps
kzkmaeda
2
610
戦略的DDDを実践するための跳躍力 / OOC 2024
pictiny
6
3.9k
OpenTelemetry実践 はじめの一歩
taxin
0
310
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
227
130k
Visualization
eitanlees
135
14k
Optimising Largest Contentful Paint
csswizardry
7
2.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
15
6.3k
The Cult of Friendly URLs
andyhume
72
5.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
11
1.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
397
65k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Robots, Beer and Maslow
schacon
PRO
154
7.9k
For a Future-Friendly Web
brad_frost
170
8.9k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Building Applications with DynamoDB
mza
88
5.6k
Transcript
クリーンアーキテクチャ 達人に学ぶソフトウェアの構造と設計 29,30章 kazuki ijima
29,30章 クリーン組込みアーキテクチャ データベースは詳細
29章 クリーン組込みアーキテクチャ
ソフトウェアは消耗しないが、ファームウェアやハードウェアは時代遅れになる。 その結果、ソフトウェアの変更が必要になる。 ソフトウェアは消耗しないが、管理できていないファームウェアやハードウェアの依存関 係により、ソフトウェアが内部から破壊される可能性がある。
• ファームウェアは、ハードウェアの変化に対して、どれだけ依存しているかで変化し にくさが決まる • 依存の強いコードを書く = ファームウェアを書いているようなもの
適性テスト • ソフトウェアを構築する活動 ◦ 動作させる ◦ 正しくする(リファクタ、変更しやすく、理解しやすく ) ◦ パフォーマンスを高速化する
• 適性テスト ◦ アプリを動作させること ◦ アプリを動作させることだけに関心を持つプログラマは、 プロダクトに不利益を与えている Apptitude Aptitude
ターゲットハードウェアのボトルネック • HWは、SWやFWと同時に開発されることが多い ◦ 開発中はHWに欠陥があることが多い ◦ SWの開発は通常よりも遅くなる
ターゲットハードウェアのボトルネック • クリーン組込みアーキテクチャ = テスト可能な組込みアーキテクチャ • レイヤー ◦ 図29-1 ▪
HWは変化していく ◦ 全てのコードからHWの知識の汚染を取り除くものが存在しない ◦ SWとFWを混ぜるのはアンチパターン • ハードウェアは詳細 ◦ 図29-3 ◦ SW - FWの境界は、HW - コードの境界ほど明確ではない ◦ HAL(Hardware Abstraction Layer)
ハードウェアの詳細はHALのユーザに明らかにしない • クリーン組込みアーキテクチャのSWは、 ターゲットHWをオフにしたテストが可能 • プロセッサは詳細 ◦ 全てのSWはプロセッサに依存しないようにすべき。 FWにはそれができない ◦
例 • OSは詳細 ◦ 寿命を延ばすために OSの依存関係から身を守る ◦ 図29-5 ◦ OSAL(OS抽象化レイヤー)
インターフェイスに対するプログラミングと代替可能性 • 主なレイヤーにHALやOSALを追加するだけでなく、これまでの原則を適用するべ き • このタイミングで説明する内容??
DRYな条件付きコンパイル命令 • 代用可能性 ◦ 組込みのC/C++のプログラムが複数のターゲットや OSを扱う方法 • HALを使うといい
30章 データベースは詳細
• データベースはエンティティではなく、詳細 ◦ データベースはデータモデルではない ▪ データベースはソフトウェアに過ぎない ▪ データアクセス機能を持つ道具に過ぎない
リレーショナルデータベース • 普及した ◦ 素晴らしいもの • ただし、アーキテクチャの円の外側 ◦ 単なるテクノロジーの一つに過ぎない ◦
あくまで詳細
なぜデータベースシステムが普及しているのか? • 素晴らしい点 ◦ ディスクの進化 ▪ 小ささ ▪ 容量 ◦
欠点である、ディスクの遅さを軽減する方法がある ▪ ファイルシステム ▪ リレーショナルデータベース
もしもディスクがなかったら? • ディスクはRAMに取って代わられつつある ◦ ? • ディスクが絶滅した場合 ◦ ? ◦
次の節に繋がる
詳細 • データベースは、ディスクとRAM間でデータを移動しているに過ぎない
だけど、パフォーマンスはどうなの? • 気になるけど、下位レベルの関心ごと
小話