抽象工厂 加 反射

前两天做项目,使用的是 三层架构抽象工厂反射 来完成的。

//code

 

原先的Dal层 现在变成了 一个接口IDal 和 一个DBUnility

 

IDal:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
namespace IDal
{
    public interface Car
    {
         int addCar(Model.Car carM);
         int deleteCar(int id);
         public int updateCar();
         DataTable queryCar(Model.Car carM);
         DataTable showCar();
    }
}

DBUnility 负责多个数据库的连接操作:

eg:下面是sqlserver数据库的例子,名字叫sqlhelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;



namespace DBUnility
{
    
    public class sqlhelper
    {

        private static readonly string conStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();
        public static DataTable show(string sqlStr)
        {
            using (SqlConnection conn = new SqlConnection(conStr))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = sqlStr;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds.Tables[0];

            }
        }
        public static int executeNonquery(string sqlStr)// 这个是executenonquery 还有什么返回database的,executescalard的就是一类型的归为一类 减少代码

       {
            using(SqlConnection conn = new SqlConnection(conStr))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = sqlStr;
                return cmd.ExecuteNonQuery();
            }
        }
        
    }
}

这行紫色部分:

在config文件中写入

<connectionStrings>
    <add name="connStr" connectionString="Data Source=CRUELBB;Initial Catalog=practice;Integrated Security=True"/>
  </connectionStrings>

用来连接数据库的。

 

再来一个DalFactory(所谓的抽象工厂)

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Configuration;
namespace DalFactory
{
    public class createinstance
    {
        private static readonly string dalStr = ConfigurationManager.AppSettings["dalStr"].ToString();

        public static IDal.Car getTab_car()
        {
            return (IDal.Car)Assembly.Load(dalStr).CreateInstance( dalStr+".Car");

        反射

 

    提供了封装程序集、模块和类型的对象。这里仅仅用到反射的一部分功能。且记住它的格式:  

    Assembly.Load(“程序集名称”) . CreateInstance(“命名空间 . 类名称”)
        }
    }
}

这行绿色部分:在config文件中写入

<appSettings>
    <add key="dalStr" value="SqlDal"/>
  </appSettings>

可以看出是用来 便于切换数据库的  ,切哪个数据库 DBUnility就连哪一个 ok。

 

 

然后Bll层:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
namespace Bll
{
    public class Car
    {

        private IDal.Car dal;

        public IDal.Car Dal
        {
            get
            {
                if (dal == null)
                    dal = DalFactory.createinstance.getTab_car();
                return dal;

            }
            //set { dal = value; }
        }
        public DataTable show()
        {
            //SqlDal.Car carD = new SqlDal.Car();        
            //return carD.showCar(carM);
            
            return Dal.showCar();
        }
        public int delete(int id)
        {
            return Dal.deleteCar(id);
        }
        public int add(Model.Car carM)
        {
            return Dal.addCar(carM);
        }
    }
}

 

posted @ 2015-11-01 13:33  BestKiller  阅读(103)  评论(0编辑  收藏  举报