What's the idiomatic way of inheriting data access functionality as well as object properties?

Posted by Knut Arne Vedaa on Stack Overflow See other posts from Stack Overflow or by Knut Arne Vedaa
Published on 2010-04-12T13:32:15Z Indexed on 2010/04/12 13:33 UTC
Read the original article Hit count: 260

Filed under:

Suppose the following (slightly pseudo-code for brevity):

class Basic
{
  String foo;
}

class SomeExtension extends Basic
{
  String bar;
}

class OtherExtension extends Basic
{
  String baz;
}

class BasicService
{
  Basic getBasic()
  {
  }
}

class SomeExtensionService extends BasicService
{
  SomeExtension getSomeExtension()
  {
  }
}

class OtherExtensionService extends BasicService
{
  OtherExtension getOtherExtension()
  {
  }
}

What would be the most idiomatic, elegant way to implement the get-() service methods with the most possible code reuse?

Obviously you could do it like this:

class BasicService
{
  Basic getBasic()
  {
    Basic basic = new Basic();
    basic.setFoo("some kind of foo");
    return basic;
  }
}

class SomeExtensionService
{
  SomeExtension getSomeExtension()
  {        
    SomeExtension someExtension = new SomeExtension;
    Basic basic = getBasic();
    someExtension.setFoo(basic.getFoo());
    someExtension.setBar("some kind of bar");
    return someExtension;
  }
}

But this would be ugly if Basic has a lot of properties, and also you only need one object, as SomeExtension already inherits Basic. However, BasicService can obviously not return a SomeExtension object.

You could also have the get methods not create the object themselves, but create it at the outermost level and pass it to the method for filling in the properties, but I find that too imperative.

(Please let me know if the question is confusingly formulated.)

© Stack Overflow or respective owner

Related posts about oop