On the QaFoo blog they've posted an article sharing advice about refactoring to extract logic to services when there's no testing to cover the code.
When you are refactoring in a legacy codebase, the goal is often to reduce complexity or separate concerns from classes, methods and functions that do too much work themselves. Primary candidates for refactoring are often controller classes or use-case oriented service classes (such as a UserService).
Extracting new service classes is one popular refactoring to separate concerns, but without tests it is dangerous because there are many ways to break your original code. This post presents a list of steps and checklists to perform extract service when you don't have tests or only minimal test coverage. It is not 100% safe but it provides small baby-steps that can be applied and immediately verified.
The article talks about some of the primary risks when performing this kind of refactoring and how their extract method recommendations could case some of those issues. The tutorial then breaks down the process into the small steps:
- Step 1: Create Class and Copy Method
- Step 2: Fix Visibility, Namespace, Use and Autoloading
- Step 3: Check for Instance Variable Usage
- Step 4: Use New Class Inline
- Step 5: Inline Method
- Step 6: Move Instantiation into Constructor or Setter
- Step 7: Cleanup Dependency Injection
While that seems like a lot of steps to take, they're all pretty small. They include a series of code snippets giving you an example to work from, making these small steps to refactor current functionality into a Solr service class.