Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are there any side effect of using to many static function?

Currently i`m interesting in play framework because this framework promise faster development.

When i see the code, there are so many static code. even the controller declared as static function. Thus all the code that called inside static function must be static right?

My question is, is this approach is right? are there any side effect of using to many static function?

like image 459
indrap Avatar asked Sep 14 '11 07:09

indrap


People also ask

Is it bad to use static functions?

Static methods are bad for testability. Since static methods belong to the class and not a particular instance, mocking them becomes difficult and dangerous. Overriding a static method is not that simple for some languages.

Why should we avoid using static for everything?

Code that relies on static objects can't be easily unit tested, and statics can't be easily mocked (usually). If you use statics, it is not possible to swap the implementation of the class out in order to test higher level components.

Can we have multiple static methods?

The answer is 'Yes'. We can have two or more static methods with the same name, but differences in input parameters. For example, consider the following Java program.


3 Answers

This question has been asked in a similar way previously. The simple answer is that Play uses statics where it is sensible.

The HTTP model is not an OO model. HTTP requests themselves are stateless, and therefore, static methods allow access to controllers as functional requests from client code.

The Model classes on the other hand are pure OO, and as a result are not static heavy. Some of the utility methods, such as findAll or findById are static, but these again are not statefull, and are utility methods on the class. I would expect this in a standard OO model anyway.

Therefore, I don't think there is any risk in doing things in the way Play expects. It may look odd, because it challenges the norm, but it does so for sound reasons.

like image 154
Codemwnci Avatar answered Sep 28 '22 17:09

Codemwnci


Couple of things about static methods in an object oriented language: Let me try to explain the problems if you choose to have all static methods.

Using all static functions may not be idiomatic in an Object oriented language. You cannot override static functions in a subclass. Therefore you lose the ability to do runtime polymorphism by overriding.

The variables that you define all become class variables automatically (since all your methods are static), so essentially you do not have any state associated with the instance.

Static methods are difficult to Mock. You might need frameworks like PowerMock to do the mocking for you. So testing becomes difficult.

Design becomes a bit complex as you won't be able to create immutable classes as you really only have the class and no instance. So designing thread-safe classes becomes difficult.

like image 39
Aneesh Avatar answered Sep 28 '22 17:09

Aneesh


To elaborate on my comment.

static methods can call non-static methods provided you have an instance of something.

class A {
   public void nonStaticMethod() { }

   public static void staticMethod(String text) {
      // calls non-static method on text
      text.length();
      // calls non-static method on new Object
      new Object().hashCode();
      // calls non static method on a instance of A
      new A().nonStaticMethod();
   }
}
like image 24
Peter Lawrey Avatar answered Sep 28 '22 16:09

Peter Lawrey