Skip to content

Question: Maybe bike shedding #16

@zomars

Description

@zomars

Is there a specific reason you chose to organize your files based on the layers instead of the co-locating feature related code?

I'm speaking explicitly about this example:

src
├── application
│   ├── repositories
│   │   ├── todos.repository.interface.ts
│   │   └── users.repository.interface.ts
│   ├── services
│   │   ├── authentication.service.interface.ts
│   │   ├── crash-reporter.service.interface.ts
│   │   ├── instrumentation.service.interface.ts
│   │   └── transaction-manager.service.interface.ts
│   └── use-cases
│       ├── auth
│       │   ├── sign-in.use-case.ts
│       │   ├── sign-out.use-case.ts
│       │   └── sign-up.use-case.ts
│       └── todos
│           ├── create-todo.use-case.ts
│           ├── delete-todo.use-case.ts
│           ├── get-todos-for-user.use-case.ts
│           └── toggle-todo.use-case.ts
├── entities
│   ├── errors
│   │   ├── auth.ts
│   │   └── common.ts
│   └── models
│       ├── cookie.ts
│       ├── session.ts
│       ├── todo.ts
│       ├── transaction.interface.ts
│       └── user.ts
├── infrastructure
│   ├── repositories
│   │   ├── todos.repository.mock.ts
│   │   ├── todos.repository.ts
│   │   ├── users.repository.mock.ts
│   │   └── users.repository.ts
│   └── services
│       ├── authentication.service.mock.ts
│       ├── authentication.service.ts
│       ├── crash-reporter.service.mock.ts
│       ├── crash-reporter.service.ts
│       ├── instrumentation.service.mock.ts
│       ├── instrumentation.service.ts
│       ├── transaction-manager.service.mock.ts
│       └── transaction-manager.service.ts
└── interface-adapters
    └── controllers
        ├── auth
        │   ├── sign-in.controller.ts
        │   ├── sign-out.controller.ts
        │   └── sign-up.controller.ts
        └── todos
            ├── bulk-update.controller.ts
            ├── create-todo.controller.ts
            ├── get-todos-for-user.controller.ts
            └── toggle-todo.controller.ts

VS a feature based approach:

src
└── modules
    ├── auth
    │   ├── authentication.module.ts
    │   ├── authentication.service.interface.ts
    │   ├── authentication.service.mock.ts
    │   ├── authentication.service.ts
    │   ├── controllers
    │   │   ├── sign-in.controller.test.ts
    │   │   ├── sign-in.controller.ts
    │   │   ├── sign-out.controller.test.ts
    │   │   ├── sign-out.controller.ts
    │   │   ├── sign-up.controller.test.ts
    │   │   └── sign-up.controller.ts
    │   ├── entities
    │   │   ├── auth.error.ts
    │   │   ├── cookie.model.ts
    │   │   └── session.model.ts
    │   └── use-cases
    │       ├── sign-in.use-case.test.ts
    │       ├── sign-in.use-case.ts
    │       ├── sign-out.use-case.test.ts
    │       ├── sign-out.use-case.ts
    │       ├── sign-up.use-case.test.ts
    │       └── sign-up.use-case.ts
    ├── common
    │   ├── common.error.ts
    │   └── lib
    │       ├── capture-exception.sentry.ts
    │       ├── capture-exception.ts
    │       ├── with-reporting.sentry.ts
    │       └── with-reporting.ts
    ├── todos
    │   ├── controllers
    │   │   ├── create-todo.controller.test.ts
    │   │   ├── create-todo.controller.ts
    │   │   ├── get-todos-for-user.controller.test.ts
    │   │   ├── get-todos-for-user.controller.ts
    │   │   ├── toggle-todo.controller.test.ts
    │   │   └── toggle-todo.controller.ts
    │   ├── todo.model.ts
    │   ├── todos.module.ts
    │   ├── todos.repository.interface.ts
    │   ├── todos.repository.mock.ts
    │   ├── todos.repository.ts
    │   └── use-cases
    │       ├── create-todo.use-case.test.ts
    │       ├── create-todo.use-case.ts
    │       ├── get-todos-for-user.use-case.test.ts
    │       ├── get-todos-for-user.use-case.ts
    │       ├── toggle-todo.use-case.test.ts
    │       └── toggle-todo.use-case.ts
    └── users
        ├── user.model.ts
        ├── users.module.ts
        ├── users.repository.interface.ts
        ├── users.repository.mock.ts
        └── users.repository.ts

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions