66 lines
2.1 KiB
Plaintext
66 lines
2.1 KiB
Plaintext
![]() |
This rule reports when a source file does not adhere to the architectural constraints defined for a project.
|
||
|
|
||
|
== Why is this an issue?
|
||
|
|
||
|
There is an import from one source file to another that is prohibited by the architectural constraints defined for the project.
|
||
|
These constraints are established by the project maintainers in the architecture configuration file.
|
||
|
|
||
|
=== What is the potential impact?
|
||
|
|
||
|
Over time, codebases often drift from the intended project architecture,
|
||
|
gradually degrading the code structure and misaligning it with the original design.
|
||
|
|
||
|
This misalignment reduces visibility and control over daily decisions affecting the architecture.
|
||
|
As these small decisions accumulate, the codebase becomes harder to understand, and the architecture grows increasingly complex and unstructured.
|
||
|
|
||
|
== How to fix it
|
||
|
|
||
|
Refactor your source code to adhere to the architectural constraints.
|
||
|
The specific approach will depend on your project architecture and the code not adhering to the constraints.
|
||
|
For example, you might replace an import with an alternative import from another module
|
||
|
or create a new function in the appropriate module to maintain a clean architecture.
|
||
|
|
||
|
=== Code examples
|
||
|
|
||
|
Assuming that files in the directory `./src/panels` should not directly access files in the directory `./src/repos`:
|
||
|
|
||
|
==== Noncompliant code example
|
||
|
|
||
|
[source,javascript,diff-id=1,diff-type=noncompliant]
|
||
|
----
|
||
|
// ./src/panels/showCustomersPanel.js
|
||
|
import { CustomerRepo } from '../repos/customerRepo.js';
|
||
|
|
||
|
class ShowCustomersPanel {
|
||
|
constructor() {
|
||
|
this.customerRepo = new CustomerRepo();
|
||
|
}
|
||
|
|
||
|
getCustomers() {
|
||
|
return this.customerRepo.findAll();
|
||
|
}
|
||
|
}
|
||
|
----
|
||
|
|
||
|
==== Compliant solution
|
||
|
|
||
|
[source,javascript,diff-id=1,diff-type=compliant]
|
||
|
----
|
||
|
// ./src/panels/showCustomersPanel.js
|
||
|
import { CustomerService } from '../services/customerService.js';
|
||
|
|
||
|
class ShowCustomersPanel {
|
||
|
constructor() {
|
||
|
this.customerService = new CustomerService();
|
||
|
}
|
||
|
|
||
|
getCustomers() {
|
||
|
return this.customerService.getAllCustomers();
|
||
|
}
|
||
|
}
|
||
|
----
|
||
|
|
||
|
=== Documentation
|
||
|
|
||
|
- Defining architectural constraints for SonarQube
|