Microsoft 开发人员网络 > 论坛主页 > Visual C# General > Interface casting best practice question
提出问题提出问题
 

已答复Interface casting best practice question

  • 2009年11月7日 22:24Kéboo 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     
    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 





答案

  • 2009年11月7日 22:33andyfraser 用户奖牌用户奖牌用户奖牌用户奖牌用户奖牌
     已答复
    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

全部回复