diff --git a/rules/S6745/java/metadata.json b/rules/S6745/java/metadata.json new file mode 100644 index 0000000000..72f0be367b --- /dev/null +++ b/rules/S6745/java/metadata.json @@ -0,0 +1,25 @@ +{ + "title": "Detection of the Local Butterfly object dependencies anti-pattern", + "type": "CODE_SMELL", + "status": "ready", + "remediation": { + "func": "Constant\/Issue", + "constantCost": "5min" + }, + "tags": [ + ], + "defaultSeverity": "Info", + "ruleSpecification": "RSPEC-6745", + "sqKey": "S6745", + "scope": "All", + "defaultQualityProfiles": ["Sonar way"], + "quickfix": "infeasible", + "code": { + "impacts": { + "MAINTAINABILITY": "LOW", + "RELIABILITY": "LOW", + "SECURITY": "LOW" + }, + "attribute": "CONVENTIONAL" + } +} diff --git a/rules/S6745/java/rule.adoc b/rules/S6745/java/rule.adoc new file mode 100644 index 0000000000..d62c23ed6d --- /dev/null +++ b/rules/S6745/java/rule.adoc @@ -0,0 +1,25 @@ +Local Butterfly is a structural anti-pattern for a component with many immediate dependents. +The scope of dependents is limited to immediate dependents that directly access, use, reference, or contain the Local Butterfly. + +These issues arise from the tight coupling between the component and its dependents, which can lead to a lack of flexibility, maintainability, and scalability in the system. + +== Why is this an issue? + +Any changes or modifications to the component with a large number of immediate dependents may require updates in multiple places. +This can make it challenging to introduce new features or make changes without impacting the entire system. +The lack of flexibility can hinder adapting to evolving requirements or business needs. + +The tight coupling between the component and its immediate dependents can make the codebase more complex and harder to understand. +This can lead to difficulties in maintaining and debugging the system. +When a change is required, it may be challenging to identify all the affected areas, increasing the risk of introducing bugs or unintended side effects. + +As the number of immediate dependents increases, the component's scalability can be compromised. + +Only basic Interfaces or utility classes should be allowed to become Local Butterflies. + +== How to fix it + +To mitigate these issues, it is recommended to consider alternative design patterns that promote loose coupling and separation of concerns. +By decoupling the component from its immediate dependents, such as using interfaces or abstractions, it becomes easier to modify, maintain, and test the system. +This promotes better flexibility, maintainability, and scalability in the long run. + diff --git a/rules/S6745/metadata.json b/rules/S6745/metadata.json new file mode 100644 index 0000000000..2c63c08510 --- /dev/null +++ b/rules/S6745/metadata.json @@ -0,0 +1,2 @@ +{ +}