uccmkw
Last Updated: February 25, 2016
·
1.608K
· kbilsted
1616338

Don't use static

Never use the keyword static. Well of course when you are making extension methods. Otherwise don't.

Statics are hard-coding your dependency and killing OOP (you don't operate with instances). Instead use dependency injection.

Caches are a seemingly naturally implemented using statics. Don't! You get more flexibility by avoiding this implementation strategy and you can let some one else handle the eviction strategy. Often that some one has a better idea about the eviction strategy based on the use-scenario rather than a generic cache class.

Sometimes I see people make method static when the methods do not access state on the object. Resharper also encourages you. Again don't follow this practice. If your method is not accessing any state on the object, it may be a hint that the method does not belong to that class. Don't make such methods static as they will hurt you when the code evolves.

Configuration is often tutored at candidates for static. Check out the project https://github.com/kbilsted/StatePrinter which doesn't use static for configuration. This allows me to use different configurations when running my tests in parallel.

Say Thanks
Respond

6 Responses
Add your response

16883
9f8df38ee46afe861bcbb4455a0dca7f

I won't say don't use it, but use it intelligently.

over 1 year ago ·
16884
1616338

What do you mean intelligently?please give some examples.

over 1 year ago ·
17100
Cf6deba897062e74251c43a6b6a1903f

There is such a thing as "process scope" or "application scope". For example, statically declaring the DI container. Such things are obviously suited for using static.

over 1 year ago ·
17105
1616338

Thanks for your feedback. DI is an interesting choice. In fact the modern DI containers such as AutoFac has the notion of scoped dependency configurations and thus the configuration is by no means static. Rather it is instance-based. I'll update the text with an example.

over 1 year ago ·
17742
9f8df38ee46afe861bcbb4455a0dca7f

What if you want to make a class singleton ?

over 1 year ago ·
18561
1616338

What would the purpose be for you to make a class singleton? If you need singleton behaviour your are better off using a DI framework and configuring the instance as singleton in the registration part of the DI.

over 1 year ago ·