LogoSkills

Module Refactoring Patterns

A guide for module renaming and refactoring.

A guide for module renaming and refactoring.

Module Renaming Procedure#

1. Directory Move#

# Example: scm_sales_management → publisher_sales_management
mv feature/console/scm_sales_management feature/console/publisher_sales_management

2. Update pubspec.yaml#

# feature/console/publisher_sales_management/pubspec.yaml
name: publisher_sales_management  # Change package name

3. File Renaming#

BeforeAfter
scm_sales_management.dartpublisher_sales_management.dart
scm_sales_management_bloc.dart publisher_sales_management_bloc.dart
scm_sales_management_page.dart publisher_sales_management_page.dart
scm_sales_management_route.dart publisher_sales_management_route.dart
i_scm_sales_management_repository.dart i_publisher_sales_management_repository.dart

4. Class/Type Renaming#

// Before
class ScmSalesManagementBloc extends Bloc<...>
class ScmSalesManagementState
sealed class ScmSalesManagementEvent
class IScmSalesManagementRepository

// After
class PublisherSalesManagementBloc extends Bloc<...>
class PublisherSalesManagementState
sealed class PublisherSalesManagementEvent
class IPublisherSalesManagementRepository

5. Update Import Paths#

// Before
import 'package:scm_sales_management/scm_sales_management.dart';

// After
import 'package:publisher_sales_management/publisher_sales_management.dart';

6. Update Router#

// console_router/lib/src/route/console_route.dart
import 'package:publisher_sales_management/publisher_sales_management.dart';

// Update route definitions as well
TypedGoRoute<PublisherSalesManagementRoute>(
  path: '/publisher-sales',
  // ...
)

7. Melos Bootstrap#

melos bootstrap

Renaming Checklist#

  • Move directory
  • Change pubspec.yaml name
  • Rename main export file
  • Rename BLoC files (bloc, event, state)
  • Rename Page files
  • Rename Route files
  • Rename Repository interface/implementation
  • Update UseCase internal references
  • Rename Failure/Exception classes
  • Update all import paths
  • Update Router package dependencies
  • Verify BlocProvider wiring (no di/ folder)
  • Update test files
  • Run melos bootstrap
  • Verify build

Batch Replacement Patterns#

VSCode Search/Replace#

Search: scm_sales_management
Replace: publisher_sales_management

Search: ScmSalesManagement
Replace: PublisherSalesManagement

Search: scmSalesManagement
Replace: publisherSalesManagement

sed commands (caution: backup required)#

# Replace file contents
find feature/console/publisher_sales_management -name  " *.dart "   \
  -exec sed -i  ' '   ' s/ScmSalesManagement/PublisherSalesManagement/g '   {} \;

find feature/console/publisher_sales_management -name  " *.dart "   \
  -exec sed -i  ' '   ' s/scm_sales_management/publisher_sales_management/g '   {} \;

Dependency Graph Impact#

Packages affected by module renaming:

publisher_sales_management
├── console_router (direct dependency)
├── app_kobic_console (indirect dependency)
└── (other packages referencing this module)

Common Mistakes#

  1. Missing export file: Export paths in main export file not updated
  2. Router dependency: Dependency name not changed in console_router pubspec.yaml
  3. BlocProvider: BLoC creation code in page not updated
  4. Test files: Imports in test files not updated
  5. Generated files: .g.dart, .freezed.dart files need regeneration

Verification Commands#

# Build verification
cd feature/console/publisher_sales_management
flutter analyze lib

# Full project verification
melos run analyze --no-select