Microsoft Developer Network > Página principal de foros > Visual C# General > Interface casting best practice question
Formular una preguntaFormular una pregunta
 

RespondidaInterface casting best practice question

  • sábado, 07 de noviembre de 2009 22:24Kéboo Medallas del usuarioMedallas del usuarioMedallas del usuarioMedallas del usuarioMedallas del usuario
     
    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 





Respuestas

  • sábado, 07 de noviembre de 2009 22:33andyfraser Medallas del usuarioMedallas del usuarioMedallas del usuarioMedallas del usuarioMedallas del usuario
     Respondida
    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

Todas las respuestas