169 похожих чатов

@Limit_of_zero можешь напомнить почему при лейзи shared нельзя?

27 ответов

15 просмотров

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

не, можно. Просто это плохо тришейкится. Мы больше придерживаемся подхода близкому к one component per module, чтобы в модуле было только то, что нужно ему. За счет этого app бандл неплохо порезали. Ну и некоторые другие лейзи модули легче стали.

Denis Makarov
не, можно. Просто это плохо тришейкится. Мы больше...

Да, поддерживаю, такой подход очень удобен

Denis- Автор вопроса
Oleg Safonov
я есть почитать что про one component per module?)

Вероятно, тут не о чем читать. Просто любой компонент идёт со своим модулем, который имеет экспорт этого компонента. Вот и вся идея

Alex Bu
Вероятно, тут не о чем читать. Просто любой компон...

блин, все эти идеи по моему опыту разбиваются о суровую реальность) Есть примеры больших проектов, реализованных таким подходом?)

Oleg Safonov
блин, все эти идеи по моему опыту разбиваются о су...

Хм, пример с разбиванием о реальность приведите, плс?) Пример проекта, полагаю, среди популярных либ найти можно

Alex Bu
Хм, пример с разбиванием о реальность приведите, п...

С этой конкретной идеей примеров нет, т.к. не встречал нигде и не пробовал сам,)

Alex Bu
Попробуйте, понравится)

А как выглядит при этом иерархия каталогов? Вот у меня есть компонент-страница, т.е. некий компонент, для которого есть свой путь и который рендерит кусок какой то логики. У этого компонента есть отдельный модуль (например, page.module) Внутри компонента есть (например) 10 компонентов, которые нигде больше не используются. Мне создавать рядом с page.module каталог с ещё 10 модулями по одному компоненту в каждом?

Denis
screenshot а DDD подходит под этот вывод?

А откуда картинка такая, не подскажите?)

Denis- Автор вопроса
Oleg Safonov
А откуда картинка такая, не подскажите?)

https://www.angulararchitects.io/aktuelles/tactical-domain-driven-design-with-monorepos/

Denis- Автор вопроса
Oleg Safonov
А как выглядит при этом иерархия каталогов? Вот у ...

Всё просто на самом деле. Давайте сначала с термионологией разберемся. Я использую следующие понятия - 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

Alex Bu
Всё просто на самом деле. Давайте сначала с термио...

Спасибо за подробный разбор, теперь понятно о чем речь, сам придерживаюсь чего то похожего) я просто изначально подумал, что речь вообще обо всех компонентах была)

Oleg Safonov
Спасибо за подробный разбор, теперь понятно о чем ...

Так все компоненты так и идут. Более Вам скажу, так идут и все директивы, пайпы: каждый со своим модулем

Alex Bu
Так все компоненты так и идут. Более Вам скажу, та...

Ну вот а примере выше в NgModule({ imports: [все модули, которые обеспечивают контект файла <app-person-card>], declrations: [PersonCardComponent, +все компоненты, пайпы и проч, которые обеспечивают контент файла <app-person-card>], и важный момент exports: [PersonCardComponent] }) В декларациях несколько компонентов же, а не один

Oleg Safonov
Ну вот а примере выше в NgModule({ imports: [все...

Да, я так написал, так как иногда бывают случаи, что внутри виджета есть компоненты, которые 100% будут использоваться только в этом виджете, нигде больше. Или пайп только для этого виджета, нигде больше. Тут отпадает смысл делать для них отдельный модуль для каждого Но вообще, в моих проектах в декларейшенсах почти всегда - один компонент

Alex Bu
Да, я так написал, так как иногда бывают случаи, ч...

Пока это контринтуитивно для меня, что нет компонентов, которые 100% в одном компоненте будут. У меня непонимание только с ними были, я этот момент подчеркнул в изначально вопросе) Но возможно, тут дело в прикладной области, по разному бывает, конечно

Oleg Safonov
Пока это контринтуитивно для меня, что нет компоне...

Не очень понимаю, про какие компоненты Вы, можете какой-нибудь простенький пример?

Alex Bu
Не очень понимаю, про какие компоненты Вы, можете ...

Ну, к примеру, у меня есть страница с а-ля файловым менеджером. Пользователь выбирает файл для дальнейшей работы Вот внутри этого менеджера (это view в Вашей терминологии) есть компонент отображения файла (с контекстным меню и прочим) (это widget с одной стороны, с другой есть ли смысл выносить его в отдельный модуль?) Я уверен, что этот компонент я больше нигде переиспользовать не буду

Oleg Safonov
Ну, к примеру, у меня есть страница с а-ля файловы...

В целом, это еще от ситуации зависит. Здесь файловый менеджер может оказаться совсем не view модулем, а именно widget модулем. Тогда всё логично, что внутри widget модуля (файловый менеджер) есть только в нем используемый компонент (файл) Часто view модулю соответствует роут, а сам компонент по этому роуту как бы играет роль лейаута

Oleg Safonov
Ну, к примеру, у меня есть страница с а-ля файловы...

Я сейчас уйду часа на 4, готов продолжить обсуждение по возвращении или завтра)

Alex Bu
Я сейчас уйду часа на 4, готов продолжить обсужден...

Да, хорошая идея Го завтра ddd vs ng, там тоже вопросы есть) А пока спасибо за дискуссию, вроде понятно всё)

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта