RecommederAlgorithm is an interface and hence am not moving it there. I had attended a talk recently on software engineering in which they stressed on the fact the inheritance is a bad practice (favouring composition over inheritance) whereas polymorphism is good. There are inheritance in some placed in the code which I have written ... but I guess for this case it does not make much difference.