日期:2014-05-17  浏览次数:20431 次

在petshop中的DataAccess返回对象,和直接New一个对象有什么区别?
小弟刚开始研究PetShop
发现里面的生成类的对象时
全是调用的DataAccess里面的
Assembly.Load(path).CreateInstance(className);这个方法
请问一个这样返回一个对象,和直接New这个对象有什么区别?

另外,我在写程序时,都是声明的IDAL对象,接收New的DAL,
然后用这个IDAL的对象调用方法,这样做对吗,这样做有什么好处?
刚开始研究这类的东西,高手们见谅了。。。




------解决方案--------------------

第一条我明白, 
就是不知道第二条怎么实现,有没有例子可以看啊? 
简单点的例子
-----------------
参看petshop:
C# code

public sealed class DataAccess {

        // Look up the DAL implementation we should be using
        private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];
        private static readonly string orderPath = ConfigurationManager.AppSettings["OrdersDAL"];
        
        private DataAccess() { }

        public static PetShop.IDAL.ICategory CreateCategory() {
            string className = path + ".Category";
            return (PetShop.IDAL.ICategory)Assembly.Load(path).CreateInstance(className);
        }
}

------解决方案--------------------
探讨
引用:
也就是说:

IDAL的作用是把访问数据的实现与客户端分开,符合“Program to an interface, not an implementation”的设计原理,这样

1。客户端不依赖于DAL的具体实现的类
2。可以通过工厂类/配置设置改换具体实现的类(譬如从Oracle到SQL Server)


第一条我明白,
就是不知道第二条怎么实现,有没有例子可以看啊?
简单点的例子