DEV Community

Cover image for Clean Code Tip: Avoid using too many Imports in your classes
Davide Bellone
Davide Bellone

Posted on • Originally published at code4it.dev

3 2

Clean Code Tip: Avoid using too many Imports in your classes

Actually, this article is not about a tip to write cleaner code, but it is an article that aims at pointing out a code smell.

Of course, once you find this code smell in your code, you can act in order to eliminate it, and, as a consequence, you will end up with cleaner code.

The code smell is easy to identify: open your classes and have a look at the imports list (in C#, the using on top of the file).

A real example of too many imports

Here's a real-life example (I censored the names, of course):

using MyCompany.CMS.Data;
using MyCompany.CMS.Modules;
using MyCompany.CMS.Rendering;
using MyCompany.Witch.Distribution;
using MyCompany.Witch.Distribution.Elements;
using MyCompany.Witch.Distribution.Entities;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using MyProject.Controllers.VideoPlayer.v1.DataSource;
using MyProject.Controllers.VideoPlayer.v1.Vod;
using MyProject.Core;
using MyProject.Helpers.Common;
using MyProject.Helpers.DataExplorer;
using MyProject.Helpers.Entities;
using MyProject.Helpers.Extensions;
using MyProject.Helpers.Metadata;
using MyProject.Helpers.Roofline;
using MyProject.ModelsEntities;
using MyProject.Models.ViewEntities.Tags;
using MyProject.Modules.EditorialDetail.Core;
using MyProject.Modules.VideoPlayer.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;

namespace MyProject.Modules.Video
Enter fullscreen mode Exit fullscreen mode

Sounds familiar?

If we exclude the imports necessary to use some C# functionalities

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
Enter fullscreen mode Exit fullscreen mode

We have lots of dependencies on external modules.

This means that if something changes in one of the classes that are part of those namespaces, we may end up with code that is difficult to update.

Class diagram

Also, guess what comes with all those imports? Constructor with too many parameters (and, in fact, in this class, I have 11 dependencies injected in the constructor) and code that is too long and difficult to understand (and, in fact, this class has 500+ lines).

A solution? Refactor your project in order to minimize scattering those dependencies.

Wrapping up

Having all those imports (in C# we use the keyword using) is a good indicator that your code does too many things. You should focus on minimizing those imports without cheating (like using global imports).

Happy coding!

🐧

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more