cover-img

Code Smell 66 - Shotgun Surgery

Say it only once

28 April, 2023

3

3

0

TL;DR: Don't fire!

Say it only once

Problems

  • Bad Responsibilities Assignments
  • Code Duplication
  • Maintainability
  • Single Responsibility Violation.
  • Copy-pasted code.

Solutions

  1. Refactor

Sample Code

Wrong

<?

final class SocialNetwork {

function postStatus(string $newStatus) {
if (!$user->isLogged()) {
throw new Exception('User is not logged');
}
// ...
}

function uploadProfilePicture(Picture $newPicture) {
if (!$user->isLogged()) {
throw new Exception('User is not logged');
}
// ...
}

function sendMessage(User $recipient, Message $messageSend) {
if (!$user->isLogged()) {
throw new Exception('User is not logged');
}
// ...
}
}

Right

<?

final class SocialNetwork {

function postStatus(string $newStatus) {
$this->assertUserIsLogged();
// ...
}

function uploadProfilePicture(Picture $newPicture) {
$this->assertUserIsLogged();
// ...
}

function sendMessage(User $recipient, Message $messageSend) {
$this->assertUserIsLogged();
// ...
}

function assertUserIsLogged() {
if (!$this->user->isLogged()) {
throw new Exception('User is not logged');
// This is just a simplification to show the code smell
// Operations should be defined as objects with preconditions etc.
}
}
}

Detection

Some modern linters can detect repeated patterns (not just repeated code) and also while performing our code reviews we can easily detect this problem and ask for a refactor.

Tags

  • Code Duplication

Conclusion

Adding a new feature should be straightforward in our model maps 1:1 to real-world and our responsibilities are in the correct places. We should be alert for small changes spanning several classes.

More Info

(Wikipedia)[https://en.wikipedia.org/wiki/Shotgun_surgery]

(Refactoring Guru)[https://refactoring.guru/es/smells/shotgun-surgery]

(NDpend Blog)[https://blog.ndepend.com/shotgun-surgery]

(Dzone)[https://dzone.com/articles/code-smell-shot-surgery]

Credits

Photo by William Isted on Unsplash


Duplication is the primary enemy of a well-designed system.

Robert Martin


Software Engineering Great Quotes


This article is part of the CodeSmell Series.

How to Find the Stinky Parts of your Code

3

3

0

Maxi Contieri

Buenos Aires, Argentina

🎓Learn something new every day.📆 💻CS software engineer 👷coding👨🏽‍🏫teaching ✍🏾writing 🎨Software Design 🏢SOLID 🌉TDD 👴Legacy 💩Code Smells

More Articles

Showwcase is a professional tech network with over 0 users from over 150 countries. We assist tech professionals in showcasing their unique skills through dedicated profiles and connect them with top global companies for career opportunities.

© Copyright 2024. Showcase Creators Inc. All rights reserved.