• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
冥海
博客园    首页    新随笔    联系   管理    订阅  订阅

我看三层架构

1.三层架构  代码清晰,维护方便,修改简单
UI(界面 User Interfa)                       顾客
BLL(Business logic Layer) 业务逻辑层       售货员
DAL(Data Access Layer)    数据访问层       蛋糕师傅
Model是在三层之间进行数据传递的。
★★★更主要的在于如果从Winform改成asp.net,只要修改UI
如果从SQL server改成Oracel数据库,只要修改DAL就可以了。


2.如何获得自增字段
(1)在插入的时候用  output inserted.stuid
(2)在插入语句的后面带上 select @@identity
列句:
create database T_student
use T_student
create table Student
(
stuid int primary key,
stuname nvarchar(20),
stugender nvarchar(20)
)

insert into T_Student(stuname,stugender) output inserted.stuid
values('张三','女')

insert into T_Student(stuname,stugender) values('张三','女');select @@identity;

3.由于三层架构中BLL层和DAL层的模型大都相同,所以可以直接生产一个模板,然后之间进行传值。这个模板就是代码生成器生成的。
★★★代码生成器的原理其实就是利用数据库中系统视图
select * from INFORMATION_SCHEMA.TABLES (获取当前数据库中所有的表)
select* from INFORMATION_SCHEMA.COLUMNS where table_name='T_cast'(获取当前表中的所以列)
进行字符串的拼接,然后进行生成。


4.增删改查的几种方式。
(1)Insert进行插入时,由于需要插入很多的字段,所以UI层直接调用Model,通过Model的对象,直接传值给BLL,再通过BLL的对象传递给DAL.
列句:★★★声明一个Model的对象,把UI里要插入的字段,赋值给Model里已经定义好的字段属性。
Model.T_cast cast = new Model.T_cast();
//坐席人员
cast.SitPerson = tbSitPerson.Text.Trim();
//处理人员
cast.dealPerson = tbdealPerson.Text.Trim();

★★★然后直接把Model声明好的对象传递给BLL,并通过BLL返回的插入后自增字段id号的值进行判断
<UI层进行传递>cast.castID = new BLL.T_castBLL().AddNew(cast); //这里的cast是Model声明好的对象。(相当于我把一个人传递给你,它本身带的姓名,性别等字段也传递给你了。)
if (cast.castID > 0)
{
  MessageBox.Show("插入记录成功");
}
else
{
  MessageBox.Show("失败了吧?");
}


▲▲由于返回的插入后得到的自增字段ID,返回类型是Int▲▲
<BLL再把Model 对象进行传递>
public int AddNew2(T_cast model)
{
 return new T_castDAL().AddNew(model);
}

<DAL再对Model对象传过来的数据进行操作>
public int AddNew(T_cast model)
{
string sql = "insert into T_cast(ClientID,castCenter,castlevel) output inserted.castID values(@ClientID,@castCenter,@castlevel)";

int castID = (int)SqlHelper.ExecuteScalar
(sql, CommandType.Text, new SqlParameter("castCenter", model.castCenter == null ? (object)DBNull.Value : model.castCenter)
, new SqlParameter("ClientID", model.ClientID == null ? (object)DBNull.Value : model.ClientID)
, new SqlParameter("castlevel", model.castlevel == null ? (object)DBNull.Value : model.castlevel)
);
   return castID;
}


(2)Update Delete进行修改,删除时,可以通过返回的bool类型进行判断。
如果是真,表示成功,否则失败。
<UI层进行传递>
if (new BLL.T_ClientBLL().Update(clientmod))
{
   MessageBox.Show("该用户的信息修改成功");

}
else
{
   MessageBox.Show("信息修改失败,请重新进行修改");
}

<BLL再把Model 对象进行传递>
public bool Update(T_Client model)
{
   return new T_ClientDAL().Update2(model);
}
<DAL再对Model对象传过来的数据进行操作>
public bool Update(T_Client model)
{
string sql = "update T_Client set ClientName=@ClientName,Clientgender=@Clientgender where ClientID=@ClientID";

int rows = SqlHelper.ExeNonQuery(sql, CommandType.Text
, new SqlParameter("ClientID", model.ClientID == null ? (object)DBNull.Value : model.ClientID)
, new SqlParameter("ClientName", model.ClientName == null ? (object)DBNull.Value : model.ClientName)
, new SqlParameter("Clientgender", model.Clientgender == null ? (object)DBNull.Value : model.Clientgender)
);
    return rows > 0;//如果返回的行数大于0表示为真, 这里传的是bool类型。
}

(3)如果是获取所有的信息,即表中所有的数据。
<BLL>★★★★★这个时候的类型是范型集合,里面是类名。相当于获取ListAll()这个方法里的所有对象。
public IEnumerable<T_Client> ListAll()
{
  return new T_ClientDAL().ListAll();
}


<DAL>
select * from 这种范型集合,即 datasource 这种
(1).在DAL中先建立一个范型的集合
 public IEnumerable<Login> ListAll()
然后相当于一张表里的内容以行的形式,传递给另外一个方法,通过Model对象读取里面的内容,然后把Model添加到范型集合里面,最后返回这个范型的集合。

public IEnumerable<Login> ListAll() ①声明一个只读的范型集合
{
    List<Login> list = new List<Login>(); ② 用list实例化一个范型的集合
    DataTable dt = SqlHelper.getDatatable("select * from Login");
    foreach (DataRow row in dt.Rows)
     {
       list.Add(ToModel(row)); ③读取每一行记录,添加到list里
     }
        return list;  ⑤返回list这个范型的集合
}


private static Login ToModel(DataRow row) ④
{
     Login model = new Login();
     model.Id = (System.Int32)row["Id"];
     model.UserName = (System.String)row["UserName"];
     model.UserPwd = (System.String)row["UserPwd"];
     return model;
}


4.部分类的概念:在class 之前用partial声明
简单说就是多个文件共用一个namespace,class,class前partial进行声明。
★★★也可以说是多个文件组成一个文件。
调用其他文件中的类,最快的方法是
命名空间.类名 这样进行调用。

posted @ 2011-04-18 11:06  冥海  阅读(149)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3