DEV Community

Ajmal Hasan
Ajmal Hasan

Posted on

3

Optimal Folder Structures for React Native / React JS Projects

How to Decide the Right Architecture

Choosing the right architecture for your React or React Native project depends on several key factors:

  1. Project Size and Complexity
  2. Team Size and Workflow
  3. Future Scalability

1. Project Size and Complexity

a) Small Projects: For smaller projects with simple requirements, a straightforward architecture with minimal layers is often sufficient. Using functional components with hooks and basic state management can keep the codebase clean and manageable.

b) Large Projects: Larger projects with more complex requirements may benefit from a more structured architecture. This could include state management libraries like Redux or MobX, and a clear separation of concerns between presentation and business logic.


2. Team Size and Workflow

a) Small Teams: Small teams can benefit from a simplified architecture that promotes rapid development and ease of communication. Shared understanding and fewer coordination points are key. Component-based architecture with shared utilities and services works well.

b) Large Teams: Larger teams might require a more modular and scalable architecture. Using design patterns such as Container/Presentational components, feature-based folder structures, and strict code conventions can help manage the complexity.
Incorporating automated testing and continuous integration pipelines can also facilitate smooth collaboration.


3. Future Scalability

a) Scalability Considerations: Planning for future growth is essential. An architecture that supports modularity, reusability, and maintainability will facilitate scaling. Implementing lazy loading, code splitting, and micro-frontends can help manage the increasing complexity as the project grows.


For example:
New social media app with a small team, expecting to grow over time this is how we can choose as per requirement/teamsize.
Image description



Types of Architecture:

1. FLAT STRUCTURE

Small projects, prototypes, or quick demos.111

my-small-project/
  src/
    App.js
    index.js
    ComponentA.js
    ComponentB.js
  package.json
  README.md
Enter fullscreen mode Exit fullscreen mode

2. FEATURE BASED STRUCTURE

Medium to large projects with distinct features or modules

my-feature-based-project/
  src/
    features/
      auth/
        components/
          Login.js
          Register.js
        screens/
          LoginScreen.js
          RegisterScreen.js
        services/
          authService.js
        authSlice.js
      profile/
        components/
          ProfileDetails.js
        screens/
          ProfileScreen.js
        services/
          profileService.js
        profileSlice.js
  store/
    rootReducer.js
    store.js
  App.js
  index.js
  package.json
  README.md
Enter fullscreen mode Exit fullscreen mode

3. LAYERED STRUCTURE

Projects needing clear separation of concerns.

my-layered-project/
  src/
    components/
      Button.js
      Header.js
    screens/
      HomeScreen.js
      LoginScreen.js
    services/
      apiService.js
    utils/
      helpers.js
    hooks/
      useAuth.js
  App.js
  index.js
  package.json
  README.md
Enter fullscreen mode Exit fullscreen mode

4. DOMAIN DRIVEN STRUCTURE

Complex applications with distinct business domains.

my-domain-driven-project/
  src/
    domains/
      user/
        components/
          UserDetails.js
        screens/
          UserScreen.js
        services/
          userService.js
      event/
        components/
          EventDetails.js
        screens/
          EventScreen.js
        services/
          eventService.js
  store/
    rootReducer.js
    store.js
  App.js
  index.js
  package.json
  README.md
Enter fullscreen mode Exit fullscreen mode

5. ATOMIC DESIGN STRUCTURE

Design systems and UI component libraries.

src/
  components/
    atoms/
    molecules/
    organisms/
    templates/
    pages/
Enter fullscreen mode Exit fullscreen mode

6. DUCK STRUCTURE

Projects using Redux for state management.

my-redux-duck-project/
  src/
    store/
      ducks/
        auth.js
        profile.js
      rootReducer.js
      store.js
  App.js
  index.js
  package.json
  README.md
Enter fullscreen mode Exit fullscreen mode

7. MONOREPO STRUCTURE

Code for multiple projects is stored in a single repository like react native, react js etc.

my-monorepo-project/
  packages/
    app1/
      src/
        components/
          Button.js
          Header.js
        screens/
          HomeScreen.js
          LoginScreen.js
        store/
          ducks/
            auth.js
            events.js
          index.js
        services/
          apiService.js
        utils/
          helpers.js
        App.js
      __tests__/
        unit/
          Button.test.js
        integration/
          App.test.js
      e2e/
        tests/
          app.test.js
        config/
          wdio.conf.js
      package.json
    app2/
      src/
        components/
          Footer.js
          NavBar.js
        screens/
          DashboardScreen.js
          SettingsScreen.js
        store/
          ducks/
            user.js
            posts.js
          index.js
        services/
          userService.js
        utils/
          formatters.js
        App.js
      __tests__/
        unit/
          Footer.test.js
        integration/
          App.test.js
      e2e/
        tests/
          app.test.js
        config/
          wdio.conf.js
      package.json
    shared-components/
      src/
        Button.js
        Header.js
      __tests__/
        unit/
          Button.test.js
      package.json
    utils/
      src/
        api.js
        helpers.js
      __tests__/
        unit/
          api.test.js
      package.json
  .github/
    workflows/
      ci.yml
  package.json
  lerna.json
  yarn.lock
  jest.config.js
  README.md

Enter fullscreen mode Exit fullscreen mode

8. MICRO-FRONTEND STRUCTURE

Each micro-frontend is an independently deliverable frontend application.

my-react-native-app/
  src/
    features/
      auth/
        components/
        screens/
        services/
      profile/
        components/
        screens/
        services/
      chat/
        components/
        screens/
        services/
  store/
    rootReducer.js
    store.js
  App.js
  index.js
  package.json
  README.md
Enter fullscreen mode Exit fullscreen mode


Some examples of app where specific structures can be used

a) INSTAGRAM
Image description

instagram/
  src/
    features/
      feed/
        components/
        screens/
        services/
      stories/
        components/
        screens/
        services/
      reels/
        components/
        screens/
        services/
      messaging/
        components/
        screens/
        services/
      profile/
        components/
        screens/
        services/
  store/
    rootReducer.js
    store.js
  App.js
  index.js
  package.json
  README.md
Enter fullscreen mode Exit fullscreen mode

b) FLIPKART
Image description

flipkart/
  packages/
    product-listing/
      src/
        components/
        screens/
        services/
      __tests__/
      package.json
    checkout/
      src/
        components/
        screens/
        services/
      __tests__/
      package.json
    user-account/
      src/
        components/
        screens/
        services/
      __tests__/
      package.json
    marketing/
      src/
        components/
        screens/
        services/
      __tests__/
      package.json
  package.json
  lerna.json
  yarn.lock
  README.md
Enter fullscreen mode Exit fullscreen mode

a) SPOTIFY
Image description

spotify/
  src/
    domains/
      user/
        components/
        screens/
        services/
      playlist/
        components/
        screens/
        services/
      music/
        components/
        screens/
        services/
      recommendations/
        components/
        screens/
        services/
  store/
    rootReducer.js
    store.js
  App.js
  index.js
  package.json
  README.md
Enter fullscreen mode Exit fullscreen mode

Image of Datadog

How to Diagram Your Cloud Architecture

Cloud architecture diagrams provide critical visibility into the resources in your environment and how they’re connected. In our latest eBook, AWS Solution Architects Jason Mimick and James Wenzel walk through best practices on how to build effective and professional diagrams.

Download the Free eBook

Top comments (0)

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay