Angular функциональный модуль против общего модуля - PullRequest
0 голосов
/ 16 января 2020

У меня вопрос относительно официального Angular руководства по стилю о функциональных модулях .

Допустим, у меня есть функциональный модуль person и функциональный модуль автомобили . Теперь я хочу отобразить таблицу, содержащую всех людей. При нажатии на строку таблицы таблица должна развернуться, показывая таблицу машин, содержащую все машины человека. Теперь, щелкая строку автомобиля, я хочу, чтобы таблица машин расширялась, отображая всех людей, владеющих такой машиной.

| Name   | Age       |
| Peter  | 25        |
| > Cars | Brand     | Model   |
|        | Toyota    | Corolla |
|        | > Persons | Name    | Age |
|        |           | Peter   | 25  |
|        |           | Fred    | 35  |
| Hans   | 28        |
| Fred   | 35        |

Поэтому у меня круговая зависимость, поскольку person-table -> car-table -> person-table поставляются из двух разных функциональных модулей. Будет ли нормальным переносить таблицу персоны и машины в SharedModule для полного использования варианта использования?

1 Ответ

1 голос
/ 16 января 2020

Я предпочитаю следовать одному компоненту на модуль шаблон проектирования и использовать ленивые модули для функций с одним основным модулем, загружающим все.

Модуль main должен иметь наименьшее количество зависимостей, необходимых для запуска приложения, поскольку это повышает производительность загрузки, а маршрут top level должен быть загружен с отложенной загрузкой. Поэтому, когда приложение запускается, первой загруженной функцией является приложение main . Все остальные ленивые модули являются дочерними маршрутами.

A ленивый модуль должен иметь только outlet компонентов и услуг (поставщиков), необходимых для этой функции. Все остальные визуальные компоненты поступают из общей папки , содержащей один компонент на модуль каталогов.

Этот шаблон проектирования действительно следует руководству по проектированию но имеет более мелкое зерно модулей. Он создает больше стандартного кода и много других файлов, но есть и преимущества в обслуживании, и преимущества времени компиляции (т. Е. Встряхивание дерева гораздо эффективнее).

Типичная структура проекта для меня:

src/app
+-- lazy
+-- main
+-- shared
  • /src/app/lazy содержит подпапки из ленивых модулей .
  • /src/app/main содержит AppModule, который загружается.
  • /src/app/shared содержит подпапки один компонент на модуль каталоги

Типичный ленивый модуль будет иметь такую ​​структуру

src/app/lazy/feature
+-- OutletFeature
+-- feature.module.ts
+-- feature-routing.module.ts
  • /src/app/lazy/feature содержит модуль и маршрутизацию
  • /src/app/lazy/feature/OutletFeature является целевым компонентом для отложенного маршрута.

Функция lazy будет содержать охранников, преобразователей и службы. Вы также можете добавить дополнительные компоненты, если они уникальны для этой функции, но я стараюсь свести это к минимуму, потому что часто они заканчиваются тем, что повторно используются , когда подобная функция добавлено позже.

Папка shared содержит компоненты.

src/app/shared/Example
+-- Example/example.component.ts
+-- example.module.ts

Выше находится Пример компонента с модулем с тем же именем. Следуя шаблону каталога компонентов, папка с тем же именем содержит компонент. Общие модули не ограничиваются ограниченным одним компонентом, но потребитель компонента должен ожидать только одного компонента , экспортированного модулем. В примере таблицы общим компонентом будет таблица, но модуль может содержать внутренние компоненты для верхнего, нижнего и нижнего колонтитулов. Идея состоит в том, что модуль имеет одну цель.

Все вышесказанное является мнением, а руководство по стилю предлагает хороший шаблон для небольшого проекта. Я использовал вышеупомянутое в нескольких крупномасштабных приложениях и чувствую, что он очень хорошо масштабируется.

Angular Материал * Библиотека 1089 * использует один компонент на модуль как пример. У них есть собственный процесс сборки, который сначала делает структуру их исходного кода немного запутанной, но как только вы попадаете в раздел компонентов, все становится одним компонентом.

https://github.com/angular/components

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...