Microsoft Developer Network > Página Inicial dos Fóruns > Visual C# General > Interface casting best practice question
Fazer uma PerguntaFazer uma Pergunta
 

RespondidoInterface casting best practice question

  • sábado, 7 de novembro de 2009 22:24Kéboo Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    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 





Respostas

  • sábado, 7 de novembro de 2009 22:33andyfraser Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido
    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 as Respostas