Code Smell 177 – Missing Small Objects

We see small primitive data everywhere

TL;DR: Don’t forget to model the smallest ones

Problems

Primitive obsession

Solutions

find responsibilities for small objects in the MAPPER
Reify them

Context

Since compu…


This content originally appeared on DEV Community 👩‍💻👨‍💻 and was authored by Maxi Contieri

We see small primitive data everywhere

TL;DR: Don't forget to model the smallest ones

Problems

  • Primitive obsession

Solutions

  1. find responsibilities for small objects in the MAPPER

  2. Reify them

Context

Since computing early days we map all we see to the familiar primitive data types: Strings, Integers, Collections, etc.

Mapping to dates violates abstraction and fail-fast principles.

in the Wordle TDD Kata, we describe a Wordle word to be different than a String or Char(5), since they don't have the same responsibilities.

Sample Code

Wrong

public class Person {
    private final String name; 

    public Person(String name) {
        this.name = name;
    }
}

Right

public class Name {
    private final String name; 

    public Name(String name) {
        this.name = name;
        // Name has its own creation rules, comparison etc.
        // Might be different than a string
    }
}

public class Person {
    private final Name name; 

    public Person(Name name) {
        // name is created as a valid one,
        // we don't need to add validations here 
        this.name = name;
    }
}

Detection

[X] Manual

This is a semantic smell. It is related to design activity

Exceptions

In a very small number of mission-critical systems, we have a tradeoff from abstraction to performance.

This is not the usual case. We do premature optimization not relying on a modern computer and virtual machine optimizations.

As always, we need to stick to evidence in real-world scenarios.

Tags

  • Primitive

Conclusion

Finding small objects is a very hard task requiring experience to make a good job and avoid overdesign.

There's no silver bullet in choosing how and when to map something.

Relations

More Info

Disclaimer

Code Smells are just my opinion.

Credits

Photo by Shane Aldendorff on Unsplash

The secret to building large apps is never build large apps. Break your applications into small pieces. Then, assemble those testable, bite-sized pieces into your big application.

Justin Meyer

This article is part of the CodeSmell Series.


This content originally appeared on DEV Community 👩‍💻👨‍💻 and was authored by Maxi Contieri


Print Share Comment Cite Upload Translate Updates
APA

Maxi Contieri | Sciencx (2022-11-05T13:42:54+00:00) Code Smell 177 – Missing Small Objects. Retrieved from https://www.scien.cx/2022/11/05/code-smell-177-missing-small-objects/

MLA
" » Code Smell 177 – Missing Small Objects." Maxi Contieri | Sciencx - Saturday November 5, 2022, https://www.scien.cx/2022/11/05/code-smell-177-missing-small-objects/
HARVARD
Maxi Contieri | Sciencx Saturday November 5, 2022 » Code Smell 177 – Missing Small Objects., viewed ,<https://www.scien.cx/2022/11/05/code-smell-177-missing-small-objects/>
VANCOUVER
Maxi Contieri | Sciencx - » Code Smell 177 – Missing Small Objects. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/11/05/code-smell-177-missing-small-objects/
CHICAGO
" » Code Smell 177 – Missing Small Objects." Maxi Contieri | Sciencx - Accessed . https://www.scien.cx/2022/11/05/code-smell-177-missing-small-objects/
IEEE
" » Code Smell 177 – Missing Small Objects." Maxi Contieri | Sciencx [Online]. Available: https://www.scien.cx/2022/11/05/code-smell-177-missing-small-objects/. [Accessed: ]
rf:citation
» Code Smell 177 – Missing Small Objects | Maxi Contieri | Sciencx | https://www.scien.cx/2022/11/05/code-smell-177-missing-small-objects/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.