Petshop里的return (PetShop.IDAL.IAccount) Assembly.Load(path).CreateInstance(className);到底表示什么意思呢?返回一个接口类型有什么用呢?IAccount dal = PetShop.DALFactory.Account.Create();
调用了 IAccount.CS public class Account
{
public static PetShop.IDAL.IAccount Create()
{
/// Look up the DAL implementation we should be using
string path = System.Configuration.ConfigurationSettings.AppSettings["WebDAL"];
string className = path + ".Account"; // Using the evidence given in the config file load the appropriate assembly and class
return (PetShop.IDAL.IAccount) Assembly.Load(path).CreateInstance(className);
}
}

解决方案 »

  1.   

    Petshorp这么做是为了实现商业逻辑层能跨数据库复用
    利用ADO.net的框架很容易解决数据库访问的统一外观问题,但是具体每个业务查询的Sql语句仍然带有数据库特性。所以Petshorp有一个DAL(Data Access Layer)数据访问层专门写数据库查询语句并做具体和数据库特性有关的数据处理供商业逻辑层使用,既然商业逻辑层不关心这些Sql实现,当然要定义统一的接口IDAL。
    你引用的这部分其实是利用工厂模式达到商业逻辑层封装好后不再重新编译就能针对不同数据库复用的效果,可以假想如果DAL不动态Load的话,Load谁都写在代码里,那肯定要重新编译。
    Petshorp的思想不错,不过实际编程代价很大,毕竟sql的很多共性可以利用。
    建议你到msdn的developer center找最新“Enterprise Library Data Access Application Block”看看,感觉这个框架会更出色