RefactorFirst Report for spring-petclinic-rest 3.4.3
Back Edges
Highly Coupled Classes
Class Cycles
Class Map
Show classGraph 3D Popup
Show classGraph 2D Popup
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
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
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) Class Priority Change Proneness Rank Coupling Count Most Recent Commit Date Commit Count ClinicServiceImpl.java
1
1
22
12/28/24, 11:16 AM
23
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
Show Pet 3D Popup
Show Pet 2D Popup
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
Show Role 3D Popup
Show Role 2D Popup
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
Show BaseEntity 3D Popup
Show BaseEntity 2D Popup
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