Visual C# Developer Center > Visual C# Forums > Visual C# General > Interface casting best practice question
Ask a questionAsk a question
 

AnswerInterface casting best practice question

  • Saturday, November 07, 2009 10:24 PMKéboo Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    I have implemented a class factory for classes representing rows from database tables. The class factory returns an interface to a class which could be either a SqlServer aware class, or an Oracle aware class,. Design pattern stuff. But I am not sure I did it right. Exemple with pseudo code:

    interface ICar
    {
       Load();
       Save();
       Delete();
    }

    class Car
    {
       Make
       Model
       Year
    }

    class SqlServer.Car : Car, ICar
    {
       // Do stuff with Sqlserver SQL
    }

    class Oracle.Car : Car, ICar
    {
       // Do stuff with Oracle SQL
    }

    Then in the code I use the interface object, and I dont know if the data came form SqlServer or Oracle. However, I need to get to the base class to get its properties and then there are several options:
    1. Add a getter to the interface classes for each properties (dont like this, to much work)
    2. Cast the interface to its associated type ( second variable required, dont want to use the "as", make code difficult to read)
    3. Add a getter called "Base" to the interface which returns "this" in the associated class (which is what the debugger is doing)

    Which approach would be best? Also should my "Car" class be abstract instead?

    Thanks 





Answers

  • Saturday, November 07, 2009 10:33 PMandyfraser Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    Hi,

    Seems to me that you would want to abstract your database access and pass its interface into the constructor of your Car class.
    Search for the Dependancy Injection design pattern.

    HTH

    Andy

    www.sharpcontrols.net :: Free custom controls for .NET

All Replies