cal.com icon indicating copy to clipboard operation
cal.com copied to clipboard

[CAL-2766] Refactor: Identify and Split Large Code Files for Improved Testability

Open keithwillcode opened this issue 1 year ago • 2 comments

Our codebase currently contains large files that could benefit from refactoring into smaller, more modular components. Example: handleNewBooking.ts.

This refactoring effort is essential for improving the maintainability of the code and facilitating more effective unit and integration testing. The goal is to identify these large files, break them down into smaller, logically organized modules, and create a structure that enables comprehensive testing.

Desired Features:

  • Adhere to current system design: The idea of this is not to introduce a new architecture or system design (e.g. DDD) but instead to break down large files into smaller, more testable units of code.
  • Unit and Integration Testing: Create or enhance unit and integration tests for the refactored components to ensure their correctness and reliability.
  • Documentation: Document the refactoring process, including the rationale behind splitting specific files, to aid future development and maintenance efforts.

Requirements:

  • Maintainability: Ensure that the refactored codebase remains maintainable and comprehensible, with clear separation of concerns. No major functionality changes will be accepted.
  • Testability: Design the smaller components with testing in mind, making it easier to write meaningful unit and integration tests.
  • Performance Considerations: Evaluate the performance impact of the refactoring and address any potential bottlenecks or inefficiencies.

From SyncLinear.com | CAL-2766

keithwillcode avatar Nov 27 '23 18:11 keithwillcode

Our codebase currently contains large files that could benefit from refactoring into smaller, more modular components. Example: handleNewBooking.ts.

This refactoring effort is essential for improving the maintainability of the code and facilitating more effective unit and integration testing. The goal is to identify these large files, break them down into smaller, logically organized modules, and create a structure that enables comprehensive testing.

Desired Features:

* **Adhere to current system design**: The idea of this is not to introduce a new architecture or system design (e.g. DDD) but instead to break down large files into smaller, more testable units of code.

* **Unit and Integration Testing**: Create or enhance unit and integration tests for the refactored components to ensure their correctness and reliability.

* **Documentation**: Document the refactoring process, including the rationale behind splitting specific files, to aid future development and maintenance efforts.

Requirements:

* **Maintainability**: Ensure that the refactored codebase remains maintainable and comprehensible, with clear separation of concerns. **No major functionality changes will be accepted.**

* **Testability**: Design the smaller components with testing in mind, making it easier to write meaningful unit and integration tests.

* **Performance Considerations**: Evaluate the performance impact of the refactoring and address any potential bottlenecks or inefficiencies.

From SyncLinear.com | CAL-2766

Does this cover test files? Some have up to 2k LOC

smyja avatar Dec 05 '23 08:12 smyja

Sir @keithwillcode you are trying to say like this changes please tell me so i can continue work on this.

Shyam-Raghuwanshi avatar Dec 24 '23 22:12 Shyam-Raghuwanshi

Just clarifying. A file with lots of lines of code is not a bad thing IF all that code is being used in a single place. We encourage splitting into files we have code being reused in multiple places. Even better than splitting files we encourage to split a large functions into smaller functions so we can unit test them and THEN split them into another file.

zomars avatar Feb 07 '24 18:02 zomars

hi @keithwillcode should i move the other functions from handlenewbooking.ts to the lib folder?

Shyam-Raghuwanshi avatar Feb 16 '24 18:02 Shyam-Raghuwanshi