Возможно, автор что-то хотел этим передать. Но со своей стороны замечу, что шэред модели без проблем можно комбинировать с лези Если только у нас не расходятся понимания о шэред модулях
не, можно. Просто это плохо тришейкится. Мы больше придерживаемся подхода близкому к one component per module, чтобы в модуле было только то, что нужно ему. За счет этого app бандл неплохо порезали. Ну и некоторые другие лейзи модули легче стали.
Да, поддерживаю, такой подход очень удобен
я есть почитать что про one component per module?)
Вероятно, тут не о чем читать. Просто любой компонент идёт со своим модулем, который имеет экспорт этого компонента. Вот и вся идея
блин, все эти идеи по моему опыту разбиваются о суровую реальность) Есть примеры больших проектов, реализованных таким подходом?)
Хм, пример с разбиванием о реальность приведите, плс?) Пример проекта, полагаю, среди популярных либ найти можно
С этой конкретной идеей примеров нет, т.к. не встречал нигде и не пробовал сам,)
Попробуйте, понравится)
А как выглядит при этом иерархия каталогов? Вот у меня есть компонент-страница, т.е. некий компонент, для которого есть свой путь и который рендерит кусок какой то логики. У этого компонента есть отдельный модуль (например, page.module) Внутри компонента есть (например) 10 компонентов, которые нигде больше не используются. Мне создавать рядом с page.module каталог с ещё 10 модулями по одному компоненту в каждом?
А откуда картинка такая, не подскажите?)
https://www.angulararchitects.io/aktuelles/tactical-domain-driven-design-with-monorepos/
Всё просто на самом деле. Давайте сначала с термионологией разберемся. Я использую следующие понятия - view модули - widget модули Под view модулями я понимаю модуль, реалзиующий кусок философской логики проекта, например AdminModule, в котором будет будут свои view модули, например, AdminListModule, AdminCardModule Под widget модулями я понимаю модули, которые реализуют независимый от философии кусок экрана, например, PersonCardModule, ItemsListModule Соответсвенно, component per module подход используется для widget модулей. Таким образом, например, в PersonCardModule будет примерно следющее NgModule({ imports: [все модули, которые обеспечивают контект файла <app-person-card>], declrations: [PersonCardComponent, +все компоненты, пайпы и проч, которые обеспечивают контент файла <app-person-card>], и важный момент exports: [PersonCardComponent] }) Этот PersonCardModule соответствует только PersonCardComponent и несет всё описание, необходимое для PersonCardComponent Использовать его нужно, например, в view модуле AdminCardModule. Импорт PersonCardModule даст возможность в AdminCardModule использовать тег <app-person-card>, в которые, вы можете прокинут админа, то бишь <app-person-card [person]="admin"> Если есть где-то потребность использовать PersonCardComponent, вы просто импортите в том месте PersonCardModule и используете как<app-person-card [person]="admin или user или person или woman и проч"> Примерно такой подход, очень удобный. Складываю все widget модули в специльную папочку widgets, в зависимости оттого, где используется этот компонент. Если везде используется, то widgets лежит прям на самом верху, то бишь в src/app/widgets/person-card, если только в разделе Admin, то там тоже будет widgets, где эта папка ляжет, то бишь src/app/views/admin/widgets/person-card
Спасибо за подробный разбор, теперь понятно о чем речь, сам придерживаюсь чего то похожего) я просто изначально подумал, что речь вообще обо всех компонентах была)
Так все компоненты так и идут. Более Вам скажу, так идут и все директивы, пайпы: каждый со своим модулем
Ну вот а примере выше в NgModule({ imports: [все модули, которые обеспечивают контект файла <app-person-card>], declrations: [PersonCardComponent, +все компоненты, пайпы и проч, которые обеспечивают контент файла <app-person-card>], и важный момент exports: [PersonCardComponent] }) В декларациях несколько компонентов же, а не один
Да, я так написал, так как иногда бывают случаи, что внутри виджета есть компоненты, которые 100% будут использоваться только в этом виджете, нигде больше. Или пайп только для этого виджета, нигде больше. Тут отпадает смысл делать для них отдельный модуль для каждого Но вообще, в моих проектах в декларейшенсах почти всегда - один компонент
Пока это контринтуитивно для меня, что нет компонентов, которые 100% в одном компоненте будут. У меня непонимание только с ними были, я этот момент подчеркнул в изначально вопросе) Но возможно, тут дело в прикладной области, по разному бывает, конечно
Не очень понимаю, про какие компоненты Вы, можете какой-нибудь простенький пример?
Ну, к примеру, у меня есть страница с а-ля файловым менеджером. Пользователь выбирает файл для дальнейшей работы Вот внутри этого менеджера (это view в Вашей терминологии) есть компонент отображения файла (с контекстным меню и прочим) (это widget с одной стороны, с другой есть ли смысл выносить его в отдельный модуль?) Я уверен, что этот компонент я больше нигде переиспользовать не буду
В целом, это еще от ситуации зависит. Здесь файловый менеджер может оказаться совсем не view модулем, а именно widget модулем. Тогда всё логично, что внутри widget модуля (файловый менеджер) есть только в нем используемый компонент (файл) Часто view модулю соответствует роут, а сам компонент по этому роуту как бы играет роль лейаута
Я сейчас уйду часа на 4, готов продолжить обсуждение по возвращении или завтра)
Да, хорошая идея Го завтра ddd vs ng, там тоже вопросы есть) А пока спасибо за дискуссию, вроде понятно всё)
Обсуждают сегодня