Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Atomic Architecture
kawasima
すえなみチャンス2019夏
Atomicity
設計要素をAtomicに分解し、
よく知られた設計パターンの解説を試みる
Value
(pure)
Function
Namespace
Time
Identity
値そのもの。またはその集合。
副作用のない関数
値の集合の一意性
業務上の時間...
Type & Values
Typeは、Valueの分類を表す。
Valueは、Typeと値の内部表現(Inner Representation)を含む。
Value
Type
Inner
Representation
42
Integer 0...
Mutation of the Type
PHPやPerlはValueの中のTypeが書き換え可能
Value
LONG 42
PHP5系
Value
STRING “42”
$v = 42; (String)$v;
Types as Constraints
Typeだけを取り出して、Variablesに代入で
きるValueの制約として使う。
これをランタイムより前にチェックするの
が静的型付けということになる。
Variables
Value
Time
...
Disassemble
Atomicな要素を使って、設計パターンを分解する。
【注意】
オブジェクト指向が良い悪いとか、
Rails Wayが良い悪いとか、
そういう話ではなく、構造を理解するための分解で
あることに留意してください!
Object
State
Object
Value
Class
Method
Namespace
Function
Identity
Time
Field
Type
(Javaの場合)
Domain Service
The world of Eric Evans
Value Object
Value
Entity
Identity
State
Value
Time
Function
オブジェクトに種類があり、持つべき性質が異なる
Entityも2種類存在する
コト (Event)
システム化対象領域で本業(生業)として繰り返しなされる行為
●
システムはコト(Event)をデータとして逐一『記録』していく
モノ (Resource)
ある【期間】存在し、コトに直接・間接...
時間の捉え方
Variables
Value
Time
変数はStateと同じく、時間の概念が暗黙的に内包されている。
A = {age: 20};
だったものが、いつか
A = {age: 21};
と変わってるかもしれない。
Variabl...
Immutable Data without Variables
Immutable Data
Value
Immutable Data
Value
変更操作
http://hypirion.com/musings/understanding-...
Stream
時間を離散ステップとして測れれば、時間関数は列としてモデル化できる。
Time Stream
T1
Value Stream
V1 V2 V3
『SICP』3.5 Stream
T2 T3
あるときはA=V1, あるときはA=V2...
Stream represents State
『SICP』3.5 Stream
Variable version
Stream version
Epochal Time Model
『Are we there yet?』Rich Hickey (2009)
Identity
Process Event
(pure)
Function
(pure)
Function
State(t1)
...
Event Stream
FunctionはEventとしてみなせる
Event
Time
Value Stream
Value Value Value
Function
最初のValueとEvent Streamをもとに、Value Stre...
User Profile
Example: Change Profile
<<Function>>
住所変更
Name = kawasima
Address = 浅草橋
User Profile
Name = kawasima
Address ...
Disassemble
Web Application
Functionを分類する
Encoder
Decoder
Validator
Error
Value
Data
Value
Data
Value
Data
Value
Data
Value
Data
Value
Data
Value
厳密な型...
Presentation Layer Business Logic
Layer
Persistence Layer
Layered Architecture
UI Boundary
Value
Business
Object
Value
Typ...
Rails Way
Presentation Layer ActiveRecord
UI Boundary
Value
Entity
Value
Identity
Renderer
Encoder SQL
Decoder
ResultSet
V...
Wrap up
Atomic要素で、設計を見ると概念と言語・フ
レームワークとのギャップが良く理解できるよ
うになる。
Simplicity makes easy to understand.
アーキテクチャ大全 執筆中です。よろしくお願いします。
https://scrapbox.io/kawasima/アーキテクチャ大全
Nächste SlideShare
Wird geladen in …5
×

Atomic Architecture

12.507 Aufrufe

Veröffentlicht am

すえなみチャンス暑気払い 2019夏で話した、設計要素を分解して理解してみようという話です。
Simplicity makes easy to understand.

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

Atomic Architecture

  1. 1. Atomic Architecture kawasima すえなみチャンス2019夏
  2. 2. Atomicity
  3. 3. 設計要素をAtomicに分解し、 よく知られた設計パターンの解説を試みる Value (pure) Function Namespace Time Identity 値そのもの。またはその集合。 副作用のない関数 値の集合の一意性 業務上の時間の概念 名前空間 『Simple Made Easy』Rich Hickey
  4. 4. Type & Values Typeは、Valueの分類を表す。 Valueは、Typeと値の内部表現(Inner Representation)を含む。 Value Type Inner Representation 42 Integer 0x2A TypeやInner Representationを分離すると、プログ ラマにとって意味のある塊ではなくなる。
  5. 5. Mutation of the Type PHPやPerlはValueの中のTypeが書き換え可能 Value LONG 42 PHP5系 Value STRING “42” $v = 42; (String)$v;
  6. 6. Types as Constraints Typeだけを取り出して、Variablesに代入で きるValueの制約として使う。 これをランタイムより前にチェックするの が静的型付けということになる。 Variables Value Time Value Type 同じTypeを持つ Valueしか代入 できない 『Type-Driven Development with Idris』
  7. 7. Disassemble
  8. 8. Atomicな要素を使って、設計パターンを分解する。 【注意】 オブジェクト指向が良い悪いとか、 Rails Wayが良い悪いとか、 そういう話ではなく、構造を理解するための分解で あることに留意してください!
  9. 9. Object State Object Value Class Method Namespace Function Identity Time Field Type (Javaの場合)
  10. 10. Domain Service The world of Eric Evans Value Object Value Entity Identity State Value Time Function オブジェクトに種類があり、持つべき性質が異なる
  11. 11. Entityも2種類存在する コト (Event) システム化対象領域で本業(生業)として繰り返しなされる行為 ● システムはコト(Event)をデータとして逐一『記録』していく モノ (Resource) ある【期間】存在し、コトに直接・間接投入される資源 ● モノは、ある【期間】一定の属性値を持ちながら状態遷移していく。 ● 【時点】を指定することにより、そのときのモノの属性値を得る。 https://speakerdeck.com/rtechkouhou/ye-wu-sisutemugou-zhu-niokerudetamoderingu?slide=20 Resource Entity Identity State Value Time Event Entity Identity Value Value (Valueとしての時刻)
  12. 12. 時間の捉え方 Variables Value Time 変数はStateと同じく、時間の概念が暗黙的に内包されている。 A = {age: 20}; だったものが、いつか A = {age: 21}; と変わってるかもしれない。 Variables Value Time 再代入不可のVariablesを用意す れば、時間による変化から逃れ られるが…
  13. 13. Immutable Data without Variables Immutable Data Value Immutable Data Value 変更操作 http://hypirion.com/musings/understanding-persistent-vector-pt-1
  14. 14. Stream 時間を離散ステップとして測れれば、時間関数は列としてモデル化できる。 Time Stream T1 Value Stream V1 V2 V3 『SICP』3.5 Stream T2 T3 あるときはA=V1, あるときはA=V2, あるときはA=V3ではなく、 A(T) = V T={t|t1, t2, t3,…} V={v|v1, v2, v3,…} と考える。状態変数を持たなくても、ストリームの中に状態をもつことができる。
  15. 15. Stream represents State 『SICP』3.5 Stream Variable version Stream version
  16. 16. Epochal Time Model 『Are we there yet?』Rich Hickey (2009) Identity Process Event (pure) Function (pure) Function State(t1) Value State(t2) Value State(t3) Value
  17. 17. Event Stream FunctionはEventとしてみなせる Event Time Value Stream Value Value Value Function 最初のValueとEvent Streamをもとに、Value Stream を構築する手段がEvent Sourcingである Event Time Function
  18. 18. User Profile Example: Change Profile <<Function>> 住所変更 Name = kawasima Address = 浅草橋 User Profile Name = kawasima Address = 荻窪 <<Function>> 退職 Company = T社Company = T社 User Profile Name = kawasima Address = 荻窪 Company = Nothing
  19. 19. Disassemble Web Application
  20. 20. Functionを分類する Encoder Decoder Validator Error Value Data Value Data Value Data Value Data Value Data Value Data Value 厳密な型から緩い型への変換 緩い型から厳密な型への変換 与えられた定義をValueの集合が満たすか判定する Schema Value 一緒に使われる
  21. 21. Presentation Layer Business Logic Layer Persistence Layer Layered Architecture UI Boundary Value Business Object Value Type Entity Value Identity Renderer Encoder SQL Decoder Decoder ResultSet Value Identity Validator Encoder HTML Value Decoder JSON Value
  22. 22. Rails Way Presentation Layer ActiveRecord UI Boundary Value Entity Value Identity Renderer Encoder SQL Decoder ResultSet Value Identity Validator Encoder HTML Value Decoder JSON Value
  23. 23. Wrap up Atomic要素で、設計を見ると概念と言語・フ レームワークとのギャップが良く理解できるよ うになる。 Simplicity makes easy to understand.
  24. 24. アーキテクチャ大全 執筆中です。よろしくお願いします。 https://scrapbox.io/kawasima/アーキテクチャ大全

×