RefactorFirst Report for spring-petclinic-rest 3.4.3

Back Edges
Highly Coupled Classes
Class Cycles

Class Map

Red lines represent back edges to remove.
Zoom in / out with your mouse wheel and click/move to drag the image.
Excludes classes that have no incoming and outgoing edges
Number of classes: 82 Number of relationships: 192
G OwnerMapper OwnerMapper Owner Owner OwnerMapper->Owner 5 Pet Pet Owner->Pet 13 NamedEntity NamedEntity Owner->NamedEntity 1 Person Person Owner->Person 1 PetMapper PetMapper PetMapper->Pet 5 PetType PetType PetMapper->PetType 3 Pet->Owner 3 Pet->PetType 3 Visit Visit Pet->Visit 9 Pet->NamedEntity 1 PetType->NamedEntity 1 PetTypeMapper PetTypeMapper PetTypeMapper->PetType 5 SpecialtyMapper SpecialtyMapper Specialty Specialty SpecialtyMapper->Specialty 4 Specialty->NamedEntity 1 UserMapper UserMapper Role Role UserMapper->Role 4 User User UserMapper->User 2 Role->User 3 BaseEntity BaseEntity Role->BaseEntity 1 User->Role 6 VetMapper VetMapper Vet Vet VetMapper->Vet 4 Vet->Specialty 8 Vet->Person 1 VisitMapper VisitMapper VisitMapper->Visit 4 Visit->Pet 3 Visit->BaseEntity 1 NamedEntity->BaseEntity 1 EntityUtils EntityUtils BaseEntity->EntityUtils 4 Person->BaseEntity 1 JdbcOwnerRepositoryImpl JdbcOwnerRepositoryImpl JdbcOwnerRepositoryImpl->Owner 13 JdbcOwnerRepositoryImpl->Pet 3 JdbcOwnerRepositoryImpl->PetType 2 JdbcOwnerRepositoryImpl->Visit 2 OwnerRepository OwnerRepository JdbcOwnerRepositoryImpl->OwnerRepository 1 JdbcPet JdbcPet JdbcOwnerRepositoryImpl->JdbcPet 2 OwnerRepository->Owner 5 JdbcPet->Pet 1 JdbcPetRepositoryImpl JdbcPetRepositoryImpl JdbcPetRepositoryImpl->Owner 2 JdbcPetRepositoryImpl->Pet 8 JdbcPetRepositoryImpl->PetType 2 JdbcPetRepositoryImpl->Visit 2 JdbcPetRepositoryImpl->OwnerRepository 3 JdbcPetRepositoryImpl->JdbcPet 3 PetRepository PetRepository JdbcPetRepositoryImpl->PetRepository 1 JdbcPetRepositoryImpl->EntityUtils 1 VisitRepository VisitRepository JdbcPetRepositoryImpl->VisitRepository 2 PetRepository->Pet 4 PetRepository->PetType 1 EntityUtils->BaseEntity 1 VisitRepository->Visit 5 JdbcPetRowMapper JdbcPetRowMapper JdbcPetRowMapper->Pet 1 JdbcPetRowMapper->NamedEntity 1 JdbcPetRowMapper->BaseEntity 1 JdbcPetRowMapper->JdbcPet 5 JdbcPetTypeRepositoryImpl JdbcPetTypeRepositoryImpl JdbcPetTypeRepositoryImpl->Pet 3 JdbcPetTypeRepositoryImpl->PetType 7 JdbcPetTypeRepositoryImpl->Visit 3 PetTypeRepository PetTypeRepository JdbcPetTypeRepositoryImpl->PetTypeRepository 1 PetTypeRepository->PetType 5 JdbcPetVisitExtractor JdbcPetVisitExtractor JdbcPetVisitExtractor->Pet 1 JdbcPetVisitExtractor->Visit 1 JdbcPetVisitExtractor->JdbcPet 1 JdbcSpecialtyRepositoryImpl JdbcSpecialtyRepositoryImpl JdbcSpecialtyRepositoryImpl->Specialty 7 SpecialtyRepository SpecialtyRepository JdbcSpecialtyRepositoryImpl->SpecialtyRepository 1 SpecialtyRepository->Specialty 5 JdbcUserRepositoryImpl JdbcUserRepositoryImpl JdbcUserRepositoryImpl->Role 1 JdbcUserRepositoryImpl->User 3 UserRepository UserRepository JdbcUserRepositoryImpl->UserRepository 1 UserRepository->User 1 JdbcVetRepositoryImpl JdbcVetRepositoryImpl JdbcVetRepositoryImpl->Specialty 5 JdbcVetRepositoryImpl->Vet 9 JdbcVetRepositoryImpl->EntityUtils 2 VetRepository VetRepository JdbcVetRepositoryImpl->VetRepository 1 VetRepository->Vet 4 JdbcVisitRepositoryImpl_JdbcVisitRowMapperExt JdbcVisitRepositoryImpl_JdbcVisitRowMapperExt JdbcVisitRepositoryImpl_JdbcVisitRowMapperExt->Owner 2 JdbcVisitRepositoryImpl_JdbcVisitRowMapperExt->Pet 2 JdbcVisitRepositoryImpl_JdbcVisitRowMapperExt->PetType 2 JdbcVisitRepositoryImpl_JdbcVisitRowMapperExt->Visit 6 JdbcVisitRepositoryImpl_JdbcVisitRowMapperExt->BaseEntity 1 JdbcVisitRepositoryImpl_JdbcVisitRowMapperExt->JdbcPet 2 JdbcVisitRepositoryImpl JdbcVisitRepositoryImpl JdbcVisitRepositoryImpl->Visit 9 JdbcVisitRepositoryImpl->JdbcPet 1 JdbcVisitRepositoryImpl->VisitRepository 1 JdbcVisitRowMapper JdbcVisitRowMapper JdbcVisitRowMapper->Visit 5 JdbcVisitRowMapper->BaseEntity 1 JpaOwnerRepositoryImpl JpaOwnerRepositoryImpl JpaOwnerRepositoryImpl->Owner 5 JpaOwnerRepositoryImpl->OwnerRepository 1 JpaPetRepositoryImpl JpaPetRepositoryImpl JpaPetRepositoryImpl->Pet 4 JpaPetRepositoryImpl->PetType 1 JpaPetRepositoryImpl->PetRepository 1 JpaPetTypeRepositoryImpl JpaPetTypeRepositoryImpl JpaPetTypeRepositoryImpl->Pet 3 JpaPetTypeRepositoryImpl->PetType 5 JpaPetTypeRepositoryImpl->Visit 2 JpaPetTypeRepositoryImpl->BaseEntity 1 JpaPetTypeRepositoryImpl->PetTypeRepository 1 JpaSpecialtyRepositoryImpl JpaSpecialtyRepositoryImpl JpaSpecialtyRepositoryImpl->Specialty 5 JpaSpecialtyRepositoryImpl->BaseEntity 1 JpaSpecialtyRepositoryImpl->SpecialtyRepository 1 JpaUserRepositoryImpl JpaUserRepositoryImpl JpaUserRepositoryImpl->User 1 JpaUserRepositoryImpl->UserRepository 1 JpaVetRepositoryImpl JpaVetRepositoryImpl JpaVetRepositoryImpl->Vet 4 JpaVetRepositoryImpl->VetRepository 1 JpaVisitRepositoryImpl JpaVisitRepositoryImpl JpaVisitRepositoryImpl->Visit 5 JpaVisitRepositoryImpl->VisitRepository 1 PetRepositoryOverride PetRepositoryOverride PetRepositoryOverride->Pet 1 PetTypeRepositoryOverride PetTypeRepositoryOverride PetTypeRepositoryOverride->PetType 1 SpecialtyRepositoryOverride SpecialtyRepositoryOverride SpecialtyRepositoryOverride->Specialty 1 SpringDataOwnerRepository SpringDataOwnerRepository SpringDataOwnerRepository->Owner 2 SpringDataOwnerRepository->OwnerRepository 1 SpringDataPetRepository SpringDataPetRepository SpringDataPetRepository->PetType 1 SpringDataPetRepository->PetRepository 1 SpringDataPetRepository->PetRepositoryOverride 1 SpringDataPetRepositoryImpl SpringDataPetRepositoryImpl SpringDataPetRepositoryImpl->Pet 1 SpringDataPetRepositoryImpl->PetRepositoryOverride 1 SpringDataPetTypeRepository SpringDataPetTypeRepository SpringDataPetTypeRepository->PetTypeRepository 1 SpringDataPetTypeRepository->PetTypeRepositoryOverride 1 SpringDataPetTypeRepositoryImpl SpringDataPetTypeRepositoryImpl SpringDataPetTypeRepositoryImpl->Pet 3 SpringDataPetTypeRepositoryImpl->PetType 1 SpringDataPetTypeRepositoryImpl->Visit 2 SpringDataPetTypeRepositoryImpl->BaseEntity 1 SpringDataPetTypeRepositoryImpl->PetTypeRepositoryOverride 1 SpringDataSpecialtyRepository SpringDataSpecialtyRepository SpringDataSpecialtyRepository->SpecialtyRepository 1 SpringDataSpecialtyRepository->SpecialtyRepositoryOverride 1 SpringDataSpecialtyRepositoryImpl SpringDataSpecialtyRepositoryImpl SpringDataSpecialtyRepositoryImpl->Specialty 1 SpringDataSpecialtyRepositoryImpl->BaseEntity 1 SpringDataSpecialtyRepositoryImpl->SpecialtyRepositoryOverride 1 SpringDataUserRepository SpringDataUserRepository SpringDataUserRepository->UserRepository 1 SpringDataVetRepository SpringDataVetRepository SpringDataVetRepository->VetRepository 1 SpringDataVisitRepository SpringDataVisitRepository SpringDataVisitRepository->VisitRepository 1 VisitRepositoryOverride VisitRepositoryOverride SpringDataVisitRepository->VisitRepositoryOverride 1 VisitRepositoryOverride->Visit 1 SpringDataVisitRepositoryImpl SpringDataVisitRepositoryImpl SpringDataVisitRepositoryImpl->Visit 1 SpringDataVisitRepositoryImpl->VisitRepositoryOverride 1 ExceptionControllerAdvice ExceptionControllerAdvice BindingErrorsResponse BindingErrorsResponse ExceptionControllerAdvice->BindingErrorsResponse 2 BindingErrorsResponse_BindingError BindingErrorsResponse_BindingError BindingErrorsResponse->BindingErrorsResponse_BindingError 11 OwnerRestController OwnerRestController OwnerRestController->OwnerMapper 4 OwnerRestController->Owner 12 OwnerRestController->PetMapper 4 OwnerRestController->Pet 5 OwnerRestController->VisitMapper 4 OwnerRestController->Visit 2 OwnerRestController->NamedEntity 1 OwnerRestController->BaseEntity 2 OwnerRestController->Person 2 ClinicService ClinicService OwnerRestController->ClinicService 11 ClinicService->Owner 5 ClinicService->Pet 4 ClinicService->PetType 5 ClinicService->Specialty 5 ClinicService->Vet 5 ClinicService->Visit 5 PetRestController PetRestController PetRestController->PetMapper 4 PetRestController->Pet 5 PetRestController->NamedEntity 1 PetRestController->ClinicService 7 PetTypeRestController PetTypeRestController PetTypeRestController->PetType 6 PetTypeRestController->PetTypeMapper 3 PetTypeRestController->NamedEntity 1 PetTypeRestController->ClinicService 8 SpecialtyRestController SpecialtyRestController SpecialtyRestController->SpecialtyMapper 3 SpecialtyRestController->Specialty 4 SpecialtyRestController->NamedEntity 1 SpecialtyRestController->ClinicService 8 UserRestController UserRestController UserRestController->UserMapper 3 UserRestController->User 1 UserService UserService UserRestController->UserService 3 UserService->User 1 VetRestController VetRestController VetRestController->SpecialtyMapper 2 VetRestController->Specialty 3 VetRestController->VetMapper 3 VetRestController->Vet 5 VetRestController->Person 2 VetRestController->ClinicService 10 VisitRestController VisitRestController VisitRestController->VisitMapper 3 VisitRestController->Visit 8 VisitRestController->ClinicService 8 ClinicServiceImpl ClinicServiceImpl ClinicServiceImpl->Owner 5 ClinicServiceImpl->Pet 5 ClinicServiceImpl->PetType 5 ClinicServiceImpl->Specialty 5 ClinicServiceImpl->Vet 5 ClinicServiceImpl->Visit 5 ClinicServiceImpl->OwnerRepository 6 ClinicServiceImpl->PetRepository 6 ClinicServiceImpl->VisitRepository 6 ClinicServiceImpl->PetTypeRepository 5 ClinicServiceImpl->SpecialtyRepository 5 ClinicServiceImpl->VetRepository 6 ClinicServiceImpl->ClinicService 1 UserServiceImpl UserServiceImpl UserServiceImpl->Role 1 UserServiceImpl->User 1 UserServiceImpl->UserRepository 2 UserServiceImpl->UserService 1

Show RefactorFirst some ❤️
Star Fork Watch Issue Sponsor

Backward Edge Removal Impact

Current Cycle Count: 3
Current Average Cycle Node Count: 2.3333333333333335
Current Total Back Edge Count: 4
Current Total Min Weight Back Edge Count: 1
Edge Edge Weight In # of Cycles New Cycle Count New Avg Cycle Node Count Avg Node Δ ÷ Effort
Visit → Pet : 3 3 1 3 2.0 0.11111111111111116
Owner → Pet : 13 13 1 3 2.0 0.025641025641025654
Role → User : 3 3 1 2 2.5 -0.055555555555555504
EntityUtils → BaseEntity : 1 1 1 2 2.5 -0.16666666666666652
Show RefactorFirst some ❤️
Star Fork Watch Issue Sponsor







Highly Coupled Classes

Show RefactorFirst some ❤️
Star Fork Watch Issue Sponsor

Coupling Between Objects Chart Legend:

X-Axis: Number of objects the class is coupled to
Y-Axis: Relative churn
Color: Priority of what to fix first
Circle size: Priority (Visual) of what to fix first

Highly Coupled classes by the numbers: (Refactor starting with Priority 1)

ClassPriorityChange Proneness RankCoupling CountMost Recent Commit DateCommit Count
ClinicServiceImpl.java 1 1 22 12/28/24, 11:16 AM 23







Class Cycles

Class Cycles by the numbers:

Cycle Name Priority Class Count Relationship Count
Pet 1 3 4
Role 2 2 2
BaseEntity 3 2 2






Class Cycle : Pet

Class Map

Red lines represent back edges to remove.
Zoom in / out with your mouse wheel and click/move to drag the image.
G Owner Owner Pet Pet Owner->Pet 13 Pet->Owner 3 Visit Visit Pet->Visit 9 Visit->Pet 3


Bold text indicates back edge to remove to decompose cycle
Number of classes: 3 Number of relationships: 4
Classes Relationships
Pet Pet → Visit : 9
Pet → Owner : 3
Owner Owner → Pet : 13
Visit Visit → Pet : 3





Class Cycle : Role

Class Map

Red lines represent back edges to remove.
Zoom in / out with your mouse wheel and click/move to drag the image.
G Role Role User User Role->User 3 User->Role 6


Bold text indicates back edge to remove to decompose cycle
Number of classes: 2 Number of relationships: 2
Classes Relationships
Role Role → User : 3
User User → Role : 6





Class Cycle : BaseEntity

Class Map

Red lines represent back edges to remove.
Zoom in / out with your mouse wheel and click/move to drag the image.
G BaseEntity BaseEntity EntityUtils EntityUtils BaseEntity->EntityUtils 4 EntityUtils->BaseEntity 1


Bold text indicates back edge to remove to decompose cycle
Number of classes: 2 Number of relationships: 2
Classes Relationships
BaseEntity BaseEntity → EntityUtils : 4
EntityUtils EntityUtils → BaseEntity : 1

Last Published: 4/2/25, 7:40 PM