You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -7,35 +7,55 @@ Electron-приложения имеют особую архитектуру, с
7
7
8
8
```sh
9
9
└── src
10
-
├── app
11
-
├── main # Main процесс
12
-
│ ├── widgets
13
-
│ ├── features
14
-
│ ├── entities
10
+
├── app # Общий сегмент app
11
+
│ ├── main # Main процесс
12
+
│ │ └── index.ts # Точка входа main процесса
13
+
│ ├── preload # Preload скрипт и Context Bridge
14
+
│ │ └── index.ts # Точка входа preload
15
+
│ └── renderer # Renderer процесс
16
+
│ └── index.html # Точка входа renderer процесса
17
+
├── main
18
+
│ ├── services
19
+
│ │ └── user
20
+
│ │ └── ipc
21
+
│ │ ├── get-user.ts
22
+
│ │ └── send-user.ts
15
23
│ └── shared
16
-
├── renderer # Renderer процесс
17
-
│ ├── pages
18
-
│ ├── widgets
19
-
│ ├── features
20
-
│ ├── entities
24
+
├── renderer
25
+
│ └── pages
26
+
│ │ ├── settings
27
+
│ │ │ ├── ipc
28
+
│ │ │ │ ├── get-user.ts
29
+
│ │ │ │ └── save-user.ts
30
+
│ │ │ ├── ui
31
+
│ │ │ │ └── user.tsx
32
+
│ │ │ └── index.ts
33
+
│ │ └── home
34
+
│ │ ├── ui
35
+
│ │ │ └── home.tsx
36
+
│ │ └── index.ts
21
37
│ └── shared
22
-
└── shared # Общий код между main и renderer
23
-
└── ipc # Описание IPC (наименование event'ов, контракты)
38
+
└── shared # Общий код между main и renderer
39
+
└── ipc # Описание IPC (наименование event'ов, контракты)
24
40
```
25
41
26
42
## Правила для публичного API
27
-
Каждый процесс должен иметь свой публичный API, нельзя импортировать модули из `main` в `renderer`. Общедоступным между процессами кодом является только папка `src/shared`. Она же служит для описания контрактов по взаимодействию процессов.
43
+
Каждый процесс должен иметь свой публичный API, как пример, нельзя импортировать модули из `main` в `renderer`.
44
+
Общедоступным между процессами кодом является только папка `src/shared`.
45
+
Она же необходима для описания контрактов по взаимодействию процессов.
28
46
29
47
## Дополнительные изменения в стандартной структуре
30
-
Предлагается использовать новый сегмент `ipc`, в котором происходит взаимодействие между процессами
31
-
Слой `pages`, исходя из названия, не должен присутствовать в `src/main`. Слой `app` в `src` содержит точки входа для `main` и `renderer`, а также IPC.
48
+
Предлагается использовать новый сегмент `ipc`, в котором происходит взаимодействие между процессами.
49
+
Слои `pages` и `widgets`, исходя из названия, не должен присутствовать в `src/main`, вместо них предлагается в качестве самого верхнего уровня использовать слой `services`.
50
+
Слой `app` в `src` содержит точки входа для `main` и `renderer`, а также IPC.
51
+
Сегментам в слое `app` нежелательно иметь точек пересечения
32
52
33
53
## Пример взаимодействия
34
54
35
55
```typescript title="src/shared/ipc/channels.ts"
36
56
exportconst CHANNELS = {
37
57
GET_USER_DATA: 'GET_USER_DATA',
38
-
SAVE_SETTINGS: 'SAVE_SETTINGS',
58
+
SAVE_USER: 'SAVE_USER',
39
59
} asconst;
40
60
41
61
exporttypeTChannelKeys=keyoftypeofCHANNELS;
@@ -46,10 +66,11 @@ import { CHANNELS } from './channels';
0 commit comments