Skip to content

Commit 6d7669e

Browse files
committed
Add detailed architecture diagrams and state management workflows to README.md
This update enhances the documentation by introducing comprehensive diagrams for component architecture, task management, statistics architecture, navigation flow, and state management. These additions aim to provide a clearer understanding of the application's structure and workflows.
1 parent 214ce67 commit 6d7669e

1 file changed

Lines changed: 339 additions & 0 deletions

File tree

README.md

Lines changed: 339 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,345 @@ This application demonstrates:
181181
4. **Dependency Injection**: Clean provision of dependencies to components
182182
5. **SaveInstanceState**: Automatic state restoration across configuration changes
183183

184+
### Component Architecture
185+
186+
```mermaid
187+
graph TD
188+
A[Application] --> B[RootComponent]
189+
B --> C[MainScreenComponent]
190+
B --> D[SettingsComponent]
191+
B --> E[StatisticsComponent]
192+
193+
C --> F[TaskListComponent]
194+
C --> G[TaskDetailsComponent]
195+
C --> H[TaskEditComponent]
196+
197+
F --> I[TaskItemComponent]
198+
G --> J[StatusToggleComponent]
199+
H --> K[PrioritySelectComponent]
200+
H --> L[DatePickerComponent]
201+
202+
style A fill:#f9f,stroke:#333,stroke-width:2px
203+
style B fill:#bbf,stroke:#333,stroke-width:2px
204+
style C fill:#dfd,stroke:#333,stroke-width:2px
205+
style D fill:#dfd,stroke:#333,stroke-width:2px
206+
style E fill:#dfd,stroke:#333,stroke-width:2px
207+
```
208+
209+
### Task Management Architecture
210+
211+
```mermaid
212+
graph TD
213+
A[TaskListComponent] -->|State| B[TaskListState]
214+
A -->|Events| C[TaskListIntent]
215+
C -->|Process| D[TaskListReducer]
216+
D -->|Update| B
217+
218+
A -->|Details Click| E[TaskDetailsComponent]
219+
A -->|Add Click| F[TaskEditComponent]
220+
E -->|Edit Click| F
221+
222+
F -->|Save| G[TaskRepository]
223+
E -->|Load| G
224+
A -->|Load All| G
225+
226+
G -->|Store| H[(Local Database)]
227+
228+
style A fill:#bbf,stroke:#333,stroke-width:2px
229+
style B fill:#dfd,stroke:#333,stroke-width:2px
230+
style G fill:#ffd,stroke:#333,stroke-width:2px
231+
style H fill:#fcc,stroke:#333,stroke-width:2px
232+
```
233+
234+
### Statistics Architecture
235+
236+
```mermaid
237+
graph TD
238+
A[StatisticsComponent] -->|State| B[StatisticsState]
239+
A -->|Events| C[StatisticsIntent]
240+
C -->|Process| D[StatisticsReducer]
241+
D -->|Update| B
242+
243+
A -->|Load Stats| E[StatisticsRepository]
244+
E -->|Query| F[TaskRepository]
245+
F -->|Read| G[(Local Database)]
246+
247+
E -->|Transform| H[StatsCalculator]
248+
H -->|Provide| I[ChartData]
249+
I -->|Display in| A
250+
251+
style A fill:#bbf,stroke:#333,stroke-width:2px
252+
style B fill:#dfd,stroke:#333,stroke-width:2px
253+
style E fill:#ffd,stroke:#333,stroke-width:2px
254+
style F fill:#ffd,stroke:#333,stroke-width:2px
255+
style G fill:#fcc,stroke:#333,stroke-width:2px
256+
```
257+
258+
### Navigation Flow
259+
260+
```mermaid
261+
stateDiagram-v2
262+
[*] --> TaskList
263+
TaskList --> TaskDetails: Select Task
264+
TaskDetails --> TaskEdit: Edit Button
265+
TaskList --> TaskEdit: Add Button
266+
267+
TaskEdit --> TaskList: Save/Cancel
268+
TaskDetails --> TaskList: Back Button
269+
270+
TaskList --> Statistics: Tab Navigation
271+
TaskList --> Settings: Tab Navigation
272+
273+
Statistics --> TaskList: Tab Navigation
274+
Settings --> TaskList: Tab Navigation
275+
```
276+
277+
### State Management
278+
279+
```mermaid
280+
flowchart LR
281+
A[User Interaction] -->|Intent| B[Reducer]
282+
B -->|New State| C[Component State]
283+
C -->|Renders UI| D[UI]
284+
D -->|Triggers| A
285+
286+
E[Decompose StateKeeper] <-->|Saves/Restores| C
287+
F[Background Process] -->|Updates| B
288+
```
289+
290+
### Clean Architecture Integration
291+
292+
```mermaid
293+
graph TD
294+
subgraph Presentation
295+
A[Jetpack Compose UI] -->|Observes| B[Decompose Component]
296+
B -->|Contains| C[Component State]
297+
B -->|Processes| D[Component Intent]
298+
end
299+
300+
subgraph Domain
301+
E[Use Cases]
302+
F[Domain Models]
303+
G[Repository Interfaces]
304+
end
305+
306+
subgraph Data
307+
H[Repository Implementations]
308+
I[Data Sources]
309+
J[Network/DB/Cache]
310+
end
311+
312+
B -->|Invokes| E
313+
E -->|Uses| F
314+
E -->|Calls| G
315+
G <--Implementation--> H
316+
H -->|Accesses| I
317+
I -->|Manages| J
318+
319+
style A fill:#dfd,stroke:#333,stroke-width:2px
320+
style B fill:#bbf,stroke:#333,stroke-width:2px
321+
style E fill:#ffd,stroke:#333,stroke-width:2px
322+
style H fill:#fcc,stroke:#333,stroke-width:2px
323+
```
324+
325+
### Component Lifecycle
326+
327+
```mermaid
328+
sequenceDiagram
329+
participant User
330+
participant Compose as Jetpack Compose
331+
participant Component as Decompose Component
332+
participant State as State Management
333+
participant Domain as Domain Layer
334+
335+
User->>Compose: Interaction
336+
Compose->>Component: Event
337+
Component->>State: Update State
338+
Component->>Domain: Execute Use Case
339+
Domain-->>Component: Result
340+
Component->>State: Update State
341+
State-->>Compose: State Change
342+
Compose-->>User: UI Update
343+
344+
Note over Component,State: Decompose handles lifecycle and state preservation during configuration changes
345+
```
346+
347+
### Task Workflow State Management
348+
349+
```mermaid
350+
stateDiagram-v2
351+
classDef todo fill:#ffcccb,stroke:#333,stroke-width:1px
352+
classDef inProgress fill:#ffffcc,stroke:#333,stroke-width:1px
353+
classDef done fill:#ccffcc,stroke:#333,stroke-width:1px
354+
355+
state "Task Created" as TC
356+
state "Todo State" as TODO
357+
state "In Progress State" as IP
358+
state "Done State" as DONE
359+
360+
[*] --> TC
361+
TC --> TODO : Initial Status
362+
363+
state TODO {
364+
[*] --> Idle
365+
Idle --> Starting : Start Task
366+
Starting --> [*] : Emit Intent.StartTask
367+
}
368+
369+
state IP {
370+
[*] --> Active
371+
Active --> Completing : Complete Task
372+
Active --> Abandoning : Back to Todo
373+
Completing --> [*] : Emit Intent.CompleteTask
374+
Abandoning --> [*] : Emit Intent.RevertToTodo
375+
}
376+
377+
state DONE {
378+
[*] --> Completed
379+
Completed --> Reopening : Reopen Task
380+
Reopening --> [*] : Emit Intent.ReopenTask
381+
}
382+
383+
TODO --> IP : Start Button Click
384+
IP --> DONE : Check Completed
385+
IP --> TODO : Revert Button Click
386+
DONE --> IP : Uncheck Completed
387+
388+
class TODO todo
389+
class IP inProgress
390+
class DONE done
391+
```
392+
393+
### Task Component Implementation Structure
394+
395+
```mermaid
396+
classDiagram
397+
class TaskComponent {
398+
<<interface>>
399+
+Value<Model> models
400+
+onTaskAction(TaskAction)
401+
}
402+
403+
class DefaultTaskComponent {
404+
-MutableValue<Model> _models
405+
-TaskRepository repository
406+
-CoroutineScope componentScope
407+
-StateKeeper stateKeeper
408+
+DefaultTaskComponent(componentContext, taskRepository)
409+
-initializeState()
410+
-saveState()
411+
-processAction(TaskAction)
412+
}
413+
414+
class Model {
415+
+TaskState state
416+
+List<Task> tasks
417+
+boolean isLoading
418+
+boolean hasError
419+
+String errorMessage
420+
}
421+
422+
class TaskState {
423+
<<enum>>
424+
TODO
425+
IN_PROGRESS
426+
DONE
427+
}
428+
429+
class TaskAction {
430+
<<sealed class>>
431+
}
432+
433+
class TaskAction.Start {
434+
+String taskId
435+
}
436+
437+
class TaskAction.Complete {
438+
+String taskId
439+
}
440+
441+
class TaskAction.Revert {
442+
+String taskId
443+
}
444+
445+
TaskComponent <|-- DefaultTaskComponent
446+
DefaultTaskComponent --> Model
447+
Model --> TaskState
448+
DefaultTaskComponent --> TaskAction
449+
TaskAction <|-- TaskAction.Start
450+
TaskAction <|-- TaskAction.Complete
451+
TaskAction <|-- TaskAction.Revert
452+
```
453+
454+
### Decompose Navigation Architecture
455+
456+
```mermaid
457+
graph TD
458+
subgraph "Root Component"
459+
NavHost[Navigation Host]
460+
Stack[Navigation Stack]
461+
Stack -->|Current| Child[Active Child Component]
462+
NavHost -->|Manages| Stack
463+
end
464+
465+
subgraph "Navigation Configuration"
466+
Config[Navigation Config]
467+
Registry[Component Registry]
468+
Factory[Component Factory]
469+
end
470+
471+
NavHost -->|Uses| Config
472+
Config -->|Defines| Registry
473+
Registry -->|Creates via| Factory
474+
475+
Child -->|Can Push| NewScreen[New Screen Component]
476+
NewScreen -->|Added to| Stack
477+
Child -->|Can Pop| Stack
478+
479+
style NavHost fill:#bbf,stroke:#333,stroke-width:2px
480+
style Stack fill:#dfd,stroke:#333,stroke-width:2px
481+
style Factory fill:#ffd,stroke:#333,stroke-width:2px
482+
```
483+
484+
### Child Slots Management
485+
486+
```mermaid
487+
graph LR
488+
subgraph "Parent Component"
489+
Parent[Parent Component]
490+
491+
subgraph "Child Slots"
492+
Slot1[Child Slot 1]
493+
Slot2[Child Slot 2]
494+
Slot3[Child Slot 3]
495+
end
496+
497+
Parent -->|Creates & Manages| Slot1
498+
Parent -->|Creates & Manages| Slot2
499+
Parent -->|Creates & Manages| Slot3
500+
end
501+
502+
subgraph "Compose UI"
503+
UI[Compose UI]
504+
slot1UI[Slot 1 UI]
505+
slot2UI[Slot 2 UI]
506+
slot3UI[Slot 3 UI]
507+
end
508+
509+
UI -->|Children| slot1UI
510+
UI -->|Children| slot2UI
511+
UI -->|Children| slot3UI
512+
513+
Slot1 -->|Renders| slot1UI
514+
Slot2 -->|Renders| slot2UI
515+
Slot3 -->|Renders| slot3UI
516+
517+
style Parent fill:#bbf,stroke:#333,stroke-width:2px
518+
style Slot1 fill:#dfd,stroke:#333,stroke-width:2px
519+
style Slot2 fill:#dfd,stroke:#333,stroke-width:2px
520+
style Slot3 fill:#dfd,stroke:#333,stroke-width:2px
521+
```
522+
184523
## 📚 Additional Resources
185524

186525
- [Decompose Documentation](https://arkivanov.github.io/Decompose/)

0 commit comments

Comments
 (0)