「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > フロントエンドプロジェクトの構造は何種類ありますか?

フロントエンドプロジェクトの構造は何種類ありますか?

2024 年 8 月 18 日に公開
ブラウズ:658

How many types of frontend project structures are there?

การวางโครงสร้างโปรเจค Frontend เป็นสิ่งสำคัญมากสำหรับการพัฒนาแอปพลิเคชันที่มีประสิทธิภาพและง่ายต่อการดูแลรักษา การวางโครงสร้างที่ดีช่วยให้โค้ดเข้าใจง่าย และสามารถขยายฟีเจอร์ได้อย่างมีประสิทธิภาพ โดยเฉพาะเมื่อใช้ Next.js และ TypeScript ในการพัฒนา ในที่นี้จะแสดงโครงสร้างโปรเจคที่นิยมใช้กันหลายรูปแบบ:

1. Basic Structure

my-next-app/
├── public/              # Static files like images, fonts, etc.
├── src/                 # Source code
│   ├── components/      # Reusable components
│   ├── pages/           # Page components (Next.js routing)
│   ├── styles/          # CSS/SASS files
│   ├── hooks/           # Custom hooks
│   ├── contexts/        # Context API providers
│   ├── utils/           # Utility functions
│   ├── types/           # TypeScript types/interfaces
│   ├── services/        # API calls or services
│   ├── lib/             # Any additional libraries or helpers
│   └── config/          # Configuration files
├── .gitignore           # Git ignore file
├── next.config.js       # Next.js configuration
├── package.json         # npm/yarn package file
└── tsconfig.json        # TypeScript configuration

2. Atomic Design Structure

Atomic Design คือแนวคิดในการออกแบบ UI ที่เน้นการแยกส่วนประกอบตามขนาดและการใช้งาน สามารถแบ่งออกเป็น 5 ระดับ ได้แก่ Atoms, Molecules, Organisms, Templates, และ Pages

my-next-app/
├── public/                 # Static files
├── src/
│   ├── components/         # UI components
│   │   ├── atoms/          # Smallest elements like buttons, inputs
│   │   ├── molecules/      # Combinations of atoms (e.g., form groups)
│   │   ├── organisms/      # Complex UI components (e.g., header, footer)
│   │   ├── templates/      # Page templates with placeholders
│   │   └── pages/          # Page components
│   ├── pages/              # Next.js routing (can be left for dynamic routing)
│   ├── hooks/              # Custom hooks
│   ├── contexts/           # Context providers
│   ├── utils/              # Utility functions
│   ├── types/              # TypeScript interfaces/types
│   ├── services/           # API services
│   ├── lib/                # Additional libraries/helpers
│   └── config/             # Configurations
├── .gitignore
├── next.config.js
├── package.json
└── tsconfig.json

3. Feature-Based Structure

โครงสร้างแบบแยกตามฟีเจอร์เป็นอีกหนึ่งแนวทางที่ทำให้การจัดการและขยายฟีเจอร์ใหม่ๆ เป็นเรื่องง่าย

my-next-app/
├── public/                 # Static files
├── src/
│   ├── features/           # Separate by features/modules
│   │   ├── featureA/
│   │   │   ├── components/ # Components specific to FeatureA
│   │   │   ├── pages/      # Pages related to FeatureA
│   │   │   ├── hooks/      # Hooks specific to FeatureA
│   │   │   ├── services/   # API calls related to FeatureA
│   │   │   └── utils/      # Utility functions for FeatureA
│   │   └── featureB/       # Another feature module
│   ├── shared/             # Shared resources across features
│   │   ├── components/     # Shared components
│   │   ├── hooks/          # Shared hooks
│   │   ├── contexts/       # Shared contexts
│   │   └── utils/          # Shared utilities
│   ├── styles/             # Global styles
│   └── config/             # Configuration files
├── .gitignore
├── next.config.js
├── package.json
└── tsconfig.json

4. Monorepo Structure with NX or Turborepo

โครงสร้างนี้เป็นการจัดการโปรเจคที่มีหลายโปรเจคหรือโมดูลในที่เดียว เหมาะสำหรับทีมขนาดใหญ่หรือโปรเจคที่ต้องการการแยกการพัฒนาแต่ละส่วนอย่างชัดเจน

my-next-monorepo/
├── apps/                   # Applications (Next.js, React, etc.)
│   ├── web/                # Next.js app
│   └── admin/              # Another Next.js app or admin panel
├── packages/               # Shared packages or libraries
│   ├── ui/                 # UI component library
│   ├── utils/              # Utility functions
│   ├── hooks/              # Custom hooks
│   └── services/           # API service packages
├── .gitignore
├── nx.json                 # NX configuration (if using NX)
├── turbo.json              # Turborepo configuration (if using Turborepo)
├── package.json
└── tsconfig.json

5. Layered Architecture Structure

การออกแบบโครงสร้างแบบ Layered Architecture ช่วยให้การแยกส่วนตามการทำงานของโปรเจคเป็นเรื่องง่าย

my-next-app/
├── public/                 # Static files
├── src/
│   ├── presentation/       # UI components, pages, and routing
│   │   ├── components/     # UI components
│   │   ├── pages/          # Next.js pages
│   │   └── routes/         # Custom routing logic
│   ├── domain/             # Business logic and entities
│   │   ├── entities/       # Domain entities
│   │   ├── useCases/       # Business use cases
│   │   └── repositories/   # Interfaces for data repositories
│   ├── infrastructure/     # Data access and external services
│   │   ├── api/            # API service implementations
│   │   ├── db/             # Database access
│   │   └── thirdParty/     # Third-party integrations
│   ├── shared/             # Shared utilities and configurations
│   │   ├── utils/          # Utility functions
│   │   └── config/         # Configuration files
│   └── styles/             # Global styles
├── .gitignore
├── next.config.js
├── package.json
└── tsconfig.json

6. Component-Driven Structure with Storybook

การใช้ Storybook เป็นการทดสอบและพัฒนา UI Component ที่แยกออกมาอย่างเป็นระบบ ช่วยให้สามารถทดสอบการทำงานของ component ได้ง่าย

my-next-app/
├── public/                 # Static files
├── src/
│   ├── components/         # UI components
│   │   ├── Button/         # Button component
│   │   │   ├── Button.tsx
│   │   │   ├── Button.stories.tsx
│   │   │   └── Button.test.tsx
│   │   └── Input/          # Input component
│   ├── pages/              # Next.js pages
│   ├── hooks/              # Custom hooks
│   ├── utils/              # Utility functions
│   ├── styles/             # Global styles
│   └── config/             # Configuration files
├── .storybook/             # Storybook configuration
│   ├── main.js
│   └── preview.js
├── .gitignore
├── next.config.js
├── package.json
└── tsconfig.json

Factors to Consider When Choosing a Structure

การเลือกโครงสร้างของโปรเจคขึ้นอยู่กับหลายปัจจัย เช่น

  1. ขนาดของโปรเจค: ถ้าโปรเจคมีขนาดใหญ่ ควรเลือกโครงสร้างที่ช่วยให้การจัดการและขยายโปรเจคได้ง่าย
  2. ขนาดของทีมพัฒนา: ถ้ามีทีมขนาดใหญ่ ควรเลือกโครงสร้างที่แยกแต่ละส่วนให้ชัดเจนเพื่อการทำงานร่วมกัน
  3. ความซับซ้อนของโปรเจค: ถ้าโปรเจคมีความซับซ้อน ควรเลือกโครงสร้างที่สามารถจัดการความซับซ้อนเหล่านั้นได้
  4. เทคโนโลยีที่ใช้: เทคโนโลยีที่ใช้เช่น Next.js, TypeScript, และ Storybook อาจมีโครงสร้างที่เหมาะสมและแนะนำ

Best Practices for Project Structure

  • Keep Components Small and Reusable: Components should do one thing and do it well. Reuse components across

the project.

  • Use Contexts Wisely: Leverage React Context API to manage state across components that need access to the same data.
  • Organize Styles: Organize your CSS/SASS files efficiently, using CSS modules or styled-components for modularity.
  • Utilize TypeScript for Type Safety: Define types and interfaces to ensure type safety and better code readability.
  • Write Tests: Include unit and integration tests for components and utilities to ensure functionality.

Tools to Consider

  • Storybook: สำหรับการพัฒนาและทดสอบ UI Component
  • Jest: สำหรับการทดสอบและตรวจสอบโค้ด
  • ESLint: สำหรับการตรวจสอบและจัดรูปแบบโค้ด
  • Prettier: สำหรับการจัดรูปแบบโค้ดอัตโนมัติ
  • Husky & Lint-Staged: สำหรับการตั้งค่า pre-commit hooks
  • Next.js Custom Server: สำหรับการใช้งาน server-side logic

หวังว่าข้อมูลนี้จะช่วยให้คุณสามารถเลือกโครงสร้างโปรเจคที่เหมาะสมกับการพัฒนา Frontend ของคุณได้!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/cinderellan/how-many-types-of-frontend-project-structurals-are-there-48n?1 侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>
  • jQueryで非表示要素の高さを効率的に取得する方法?
    jQueryで非表示要素の高さを効率的に取得する方法?
    jQuery での非表示要素の高さの取得非表示要素を扱う場合、その高さを取得するのは困難な場合があります。要素を一時的に表示して高さを測定し、その後再び非表示にするという従来のアプローチは非効率であるように思えます。より最適な解決策はありますか?jQuery 1.4.2 アプローチjQuery 1....
    プログラミング 2024 年 11 月 5 日に公開
  • Go Struct タグで変数を使用できないのはなぜですか?
    Go Struct タグで変数を使用できないのはなぜですか?
    Go 構造体タグでの変数の使用Go では、構造体タグを使用して、構造体内のフィールドに関するメタデータを指定します。文字列リテラルを使用してタグを定義することは可能ですが、その場所で変数を使用しようとするとエラーが発生します。無効な使用法:const ( TYPE = "type&...
    プログラミング 2024 年 11 月 5 日に公開
  • Qopy: 開発者としてお気に入りのクリップボード マネージャー
    Qopy: 開発者としてお気に入りのクリップボード マネージャー
    開発者として、私はワークフローをよりスムーズかつ効率的にできるツールを常に探しています。最近、Linux と Windows で動作するオープンソースのクリップボード マネージャーである Qopy を見つけました。 クコピーって何? Qopy は、標準的なクリップボード エクスペリエ...
    プログラミング 2024 年 11 月 5 日に公開
  • 私のボタンでホバー効果が機能しないのはなぜですか?
    私のボタンでホバー効果が機能しないのはなぜですか?
    ホバー時にボタンの色を変更する: 別の解決策ホバー時にボタンの色を変更しようとすると、イライラすることがあります。解決策は望ましい効果を生み出すことができません。提供されているサンプル コードを考えてみましょう:a.button { ... } a.button a:hover{ b...
    プログラミング 2024 年 11 月 5 日に公開
  • Pythonのみを使用してフロントエンドを構築する
    Pythonのみを使用してフロントエンドを構築する
    バックエンドに重点を置く開発者にとって、フロントエンド開発は困難な、さらには悪夢のような作業になる可能性があります。私のキャリアの初期には、フロントエンドとバックエンドの境界があいまいで、誰もが両方を扱うことが期待されていました。特に CSS は絶えず苦労しました。不可能なミッションのように感じまし...
    プログラミング 2024 年 11 月 5 日に公開
  • LaravelでCronジョブを実行する方法
    LaravelでCronジョブを実行する方法
    このチュートリアルでは、Laravel で cron ジョブを実行する方法を説明しますが、何よりも生徒にとって物事をシンプルで簡単なものにします。 Laravel アプリを構築しながら、これらの自動化されたタスクを自分のコンピューター上でセットアップして実行する方法を検討していきます。 まず、cr...
    プログラミング 2024 年 11 月 5 日に公開
  • パディングはインライン要素の間隔にどのような影響を与えますか?また、競合はどのように解決できますか?
    パディングはインライン要素の間隔にどのような影響を与えますか?また、競合はどのように解決できますか?
    インライン要素のパディング: 効果と制限ソースによると、インライン要素の上部と下部にパディングを追加しても影響はありません周囲の要素の間隔。ただし、「パディングは他のインライン要素と重なる」という記述は、パディングが影響を与える特定の状況がある可能性があることを示唆しています。オーバーラップ パディ...
    プログラミング 2024 年 11 月 5 日に公開
  • Django クラスベースのビューが簡単に
    Django クラスベースのビューが簡単に
    ご存知のとおり、django は Web アプリケーション開発の設計に MVT (model-view-template) を使用します。 View 自体は、リクエストを受け取り、レスポンスを返す呼び出し可能です。 Django はクラス ベース ビューと呼ばれるものを提供するため、これは単なる機...
    プログラミング 2024 年 11 月 5 日に公開
  • VAKX を使用してノーコード AI エージェントを構築する
    VAKX を使用してノーコード AI エージェントを構築する
    If you’ve been keeping up with the AI space, you already know that AI agents are becoming a game-changer in the world of automation and customer inter...
    プログラミング 2024 年 11 月 5 日に公開
  • ここでは、jQuery Datatable でカーソルベースのページネーションを実装する方法を説明します。
    ここでは、jQuery Datatable でカーソルベースのページネーションを実装する方法を説明します。
    Web アプリケーションで大規模なデータセットを操作する場合、ページネーションはパフォーマンスとユーザー エクスペリエンスにとって非常に重要です。データ テーブルで一般的に使用される標準のオフセット ベースのページネーションは、大規模なデータセットでは非効率的になる可能性があります。 カーソルベー...
    プログラミング 2024 年 11 月 5 日に公開
  • 同期エンジンが Web アプリケーションの未来となる理由
    同期エンジンが Web アプリケーションの未来となる理由
    進化する Web アプリケーションの世界では、効率、スケーラビリティ、シームレスなリアルタイム エクスペリエンスが最も重要です。従来の Web アーキテクチャは、クライアント/サーバー モデルに大きく依存しており、応答性と同期に対する現代の要求の下では困難になる可能性があります。ここで同期エンジンが...
    プログラミング 2024 年 11 月 5 日に公開
  • Python によるコンピューター ビジョンの概要 (パート 1)
    Python によるコンピューター ビジョンの概要 (パート 1)
    注: この投稿では、わかりやすくするためにグレースケール画像のみを使用します。 画像とは何ですか? 画像は値の行列として考えることができ、各値はピクセルの強度を表します。画像形式には主に 3 つのタイプがあります: Binary: この形式の画像は、0 (黒) と 1 (白) の値を...
    プログラミング 2024 年 11 月 5 日に公開
  • ウェブサイトのHTMLコード
    ウェブサイトのHTMLコード
    航空関連のウェブサイトを構築しようとしています。 AI を使用してコードを生成し、Web サイト全体を生成できるかどうかを確認したかっただけです。 HTML Web サイトはブログと互換性がありますか? それとも JavaScript を使用する必要がありますか?これがデモとして使用したコードです。...
    プログラミング 2024 年 11 月 5 日に公開
  • プログラマーのように考える: Java の基礎を学ぶ
    プログラマーのように考える: Java の基礎を学ぶ
    この記事では、Java プログラミングの基本的な概念と構造を紹介します。変数とデータ型の紹介から始まり、演算子と式、および制御フロー プロセスについて説明します。次に、メソッドとクラスについて説明し、次に入出力操作を紹介します。最後に、この記事では、給与計算の実際の例を通じて、これらの概念の適用を示...
    プログラミング 2024 年 11 月 5 日に公開
  • PHP GD は 2 つの画像の類似性を比較できますか?
    PHP GD は 2 つの画像の類似性を比較できますか?
    PHP GD は 2 つの画像の類似性を判断できますか?検討中の質問は、次の方法を使用して 2 つの画像が同一であるかどうかを確認できるかどうかを尋ねます。 PHP GD の違いを比較します。これには、2 つの画像の差を取得し、画像全体が白 (または均一な色) で構成されているかどうかを判断する必要...
    プログラミング 2024 年 11 月 5 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3