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

]]></content:encoded></item></channel></rss>