<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Ruslan</title><author><name>Ruslan</name></author><id>https://teletype.in/atom/theruslanusmanov</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/theruslanusmanov?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@theruslanusmanov?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=theruslanusmanov"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/theruslanusmanov?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-06-24T18:06:32.279Z</updated><entry><id>theruslanusmanov:xw8P2qdLx4V</id><link rel="alternate" type="text/html" href="https://teletype.in/@theruslanusmanov/xw8P2qdLx4V?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=theruslanusmanov"></link><title>Angular Feature Structure</title><published>2022-07-20T16:50:04.052Z</published><updated>2022-07-20T16:50:04.052Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/59/6a/596a4689-5de6-4b2c-9440-e596327b4bf9.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/339/04f/f66/33904ff661be323189b54bacb54c65d9.png&quot;&gt;Представьте что вы решили сделать приложение в Angular, это будет простой список новостей...</summary><content type="html">
  &lt;p id=&quot;oK7Y&quot;&gt;Представьте что вы решили сделать приложение в Angular, это будет простой список новостей...&lt;/p&gt;
  &lt;figure id=&quot;HE2O&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/339/04f/f66/33904ff661be323189b54bacb54c65d9.png&quot; width=&quot;1936&quot; /&gt;
    &lt;figcaption&gt;Пример приложения - список новостей.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;PrtE&quot;&gt;Обычно когда мы говорим о проекте сгенерированном в Angular, подразумевается самая обычная структура по типу основных компонент фреймворка:&lt;/p&gt;
  &lt;p id=&quot;HUqi&quot;&gt;Вспомним какие бывают типы:&lt;/p&gt;
  &lt;ul id=&quot;231e&quot;&gt;
    &lt;li id=&quot;bs6S&quot;&gt;Class&lt;/li&gt;
    &lt;li id=&quot;rr5s&quot;&gt;Component&lt;/li&gt;
    &lt;li id=&quot;VffT&quot;&gt;Directive&lt;/li&gt;
    &lt;li id=&quot;w5XO&quot;&gt;Enum&lt;/li&gt;
    &lt;li id=&quot;HOF1&quot;&gt;Guard&lt;/li&gt;
    &lt;li id=&quot;KsxL&quot;&gt;Interceptor&lt;/li&gt;
    &lt;li id=&quot;h4tS&quot;&gt;Interface&lt;/li&gt;
    &lt;li id=&quot;LrNU&quot;&gt;Module&lt;/li&gt;
    &lt;li id=&quot;4tTL&quot;&gt;Pipe&lt;/li&gt;
    &lt;li id=&quot;Pf0b&quot;&gt;Service&lt;/li&gt;
    &lt;li id=&quot;JZa3&quot;&gt;…&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;GcBi&quot;&gt;и т.д. и т.п.&lt;/p&gt;
  &lt;p id=&quot;DM9h&quot;&gt;По какой-то причине некоторые проекты имеют структуру, которая выглядит подобным же образом. Возможно существует множество других видов структуры приложения в Angular, рассмотрим один из них.&lt;/p&gt;
  &lt;h2 id=&quot;O4mA&quot;&gt;Пример структуры&lt;/h2&gt;
  &lt;p id=&quot;agQz&quot;&gt;Взглянем на типичное приложение&lt;strong&gt;,&lt;/strong&gt; которое имеет следующую структуру:&lt;/p&gt;
  &lt;pre id=&quot;v6d5&quot;&gt;- app
  - components
  - containers
  - directives
  - models
  - store
  - app-routing.module.ts&lt;/pre&gt;
  &lt;p id=&quot;Esk2&quot;&gt;Такая структура не дает нам наглядной информации о том как устроен модуль внутри себя, необходимо смотреть файлы с роутами, &amp;quot;рыскать&amp;quot; по папкам. Чтобы сделать структуру более наглядной, можно попытаться выделить основные сущности нашего модуля, отделить их от общих компонент.&lt;/p&gt;
  &lt;pre id=&quot;ijpn&quot;&gt;- app
  - feed - Главная страница, список новостей
  - post - Детальная страница новости
  - shared - Общие компоненты внутри приложения
  - app-routing.module.ts - Основные роуты приложения&lt;/pre&gt;
  &lt;p id=&quot;b9xJ&quot;&gt;Как можно определить, что является модулем который стоит оставить в корне папке, а что убрать в общие, распространяемые между модулями компоненты в &lt;strong&gt;shared.&lt;/strong&gt; Для этого можно отталкиваться от нашего модуля с роутами&lt;em&gt;. &lt;/em&gt;Т.е. у нас имеются следующие роуты в файле &lt;code&gt;app-routing.module.ts&lt;/code&gt;:&lt;/p&gt;
  &lt;p id=&quot;ZrxM&quot;&gt;&lt;strong&gt;app-routing.module.ts&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;JsqG&quot;&gt;const routes: Routes = [
  {
    path: &amp;#x27;&amp;#x27;,
    loadChildren: () =&amp;gt; import(&amp;#x27;./feed/feed.module&amp;#x27;).then(m =&amp;gt; m.FeedModule)
  },
  {
    path: &amp;#x27;:id&amp;#x27;,
    loadChildren: () =&amp;gt; import(&amp;#x27;./post/post.module&amp;#x27;).then(m =&amp;gt; m.PostModule)
  }
];&lt;/pre&gt;
  &lt;p id=&quot;w8YE&quot;&gt;Таким образом, одним из вариантов построения структуры является идея следовать структуре роутинга приложения, что на самом деле необязательно. &lt;/p&gt;
  &lt;p id=&quot;IzmZ&quot;&gt;Данная статья лишь одна из попыток построения более наглядной структуры приложения в Angular.&lt;/p&gt;
  &lt;p id=&quot;InQk&quot;&gt;&lt;strong&gt;Пример проекта:&lt;/strong&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/theruslanusmanov/angular-feature-structure&quot; target=&quot;_blank&quot;&gt;https://github.com/theruslanusmanov/angular-feature-structure&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;HIOC&quot;&gt;&lt;strong&gt;DEMO | Stackblitz:&lt;/strong&gt;&lt;br /&gt;&lt;a href=&quot;https://stackblitz.com/github/theruslanusmanov/angular-feature-structure&quot; target=&quot;_blank&quot;&gt;https://stackblitz.com/github/theruslanusmanov/angular-feature-structure&lt;/a&gt;&lt;/p&gt;

</content></entry></feed>