Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using interfaces for writing DAO classes

I'm creating a new web application which will use a bunch of Data Access Object(DAO) classes for doing CRUD operations on the data. I know I should write java interfaces when I have external users/applications using my DAO classes. But if there is no such need do you think I should still write the interfaces? I'll be injecting DAO classes in to the Spring Controller(I'm using Spring MVC) classes using spring.

like image 441
Srini Kandula Avatar asked Nov 27 '22 22:11

Srini Kandula


2 Answers

NOTE THAT : You should always try to separating the Interface from the Implementation. This will give you more control to the other layers, using this DAO layer.

But, As you know an interface gives you more abstraction, and makes the code more flexible and resilient to changes, because you can use different implementations of the same interface without changing its client. Still, if you don't think your code will change, or (specially) if you think your abstraction is good enough, you don't necessarily have to use interfaces

In other words: interfaces are good, but before making an interface for every class think about it

like image 56
Vijay Shanker Dubey Avatar answered Dec 21 '22 01:12

Vijay Shanker Dubey


Yes, you should. Your classes that use them should rely on the interfaces only. This enables you to easily initialize the client classes with fake implementations of your DAOs in order to test those classes, among other things. If you just use a concrete class, then the clients of your DAOs will depend directly on that single (database accessing) implementation and be very difficult to test.

The ease of making classes rely only on interfaces for services they depend on is one of the main strengths of dependency injection and you'd be doing yourself and your application a disservice by not taking advantage of it.

like image 32
ColinD Avatar answered Dec 21 '22 02:12

ColinD