您的位置:首页 > 职场人生

黑马程序员----三层架构(没有另建一个BLL业务层--类库)

2013-02-21 11:57 344 查看
---------------------- Windows Phone 7手机开发.Net培训、期待与您交流!
----------------------
分为UI(表现)层DAL(数据访问)层(BLL层包含在其中)、Model,在添加项目时;如分别添加Winfrom(WPF、控制台、ASP.NET等应用程序,生成的是.exe文件),而DAL和Model添加的是类库,他们生成后都是程序集(.DLL文件),这两个类库都是用来放类的,DAL层放的是有关SQL语句的类,用来访问数据库的,如SQLHelp;而Model是用来放一般类的;原则上"UI层不能包含SQL语句",当然特殊情况下还是可以在UI层写SQL语句的,如多条件的搜索(拼接SQL的字符串如where
@name=name and @age=age.....)

例如.....

代码:

DAL层的SQLHelp类和Common类

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Configuration;

using System.Data.SqlClient;

using System.Data;

namespace HRMSYSDAL

{

class SqlHelp

{

//获取连接字符串

private static string connectionStr = ConfigurationManager.ConnectionStrings["dbTable"].ConnectionString;

//sql是SQL语句,及插入可变长度参数数组parameter[] 注意类型要一致

public static int ExecuteNonQuery(string sql,params SqlParameter[] param)

{

using (SqlConnection con = new SqlConnection(connectionStr))

{

con.Open();

using (SqlCommand command = new SqlCommand(sql, con))

{

//将可变参数数组变量添加到集合里

foreach (SqlParameter p in param)

{

command.Parameters.Add(p);

}

int num = command.ExecuteNonQuery();

return num;

}

}

}

//返回一个要查询的表

public static DataTable GetQuery(string sql,params SqlParameter[] param)

{

using (SqlConnection con = new SqlConnection(connectionStr))

{

using (SqlCommand command = new SqlCommand(sql, con))

{

command.Parameters.AddRange(param); //和上面foreach遍历一样,添加参数到集合里

SqlDataAdapter adapter = new SqlDataAdapter(command);

DataTable table = new DataTable();

adapter.Fill(table);

return table;

}

}

}

//返回第一行的第一列数据

public static object ExecuteScalar(string sql, params SqlParameter[] param)

{

using (SqlConnection con = new SqlConnection(connectionStr))

{

con.Open();

using (SqlCommand command = new SqlCommand(sql, con))

{

foreach (SqlParameter p in param)

{

command.Parameters.Add(p);

}

return command.ExecuteScalar();

}

}

}

}

}

Common类: (应该算是BLL业务层)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using HRMSYSModel; //注意DAL层要引用Model层的类,因为我写在DAL层,所以不需要引用DAL层

using System.Data.SqlClient;

using System.Windows.Forms;

using System.Data;

using System.Drawing;

using System.Collections;

namespace HRMSYSDAL

{

public class Common

{

//注册管理员信息,向数据库提交信息

public static int PostInfo(Operater p)

{

int num = SqlHelp.ExecuteNonQuery(@"insert into T_Operater(operater,password,isDelete)

values(@operater,@password,@isDelete)", new SqlParameter("@operater", p.OperaterName),

new SqlParameter("@password", p.Password),new SqlParameter("@isDelete",p.IsDelete)); //默认插入false,代表默认"软删除"没删除管理员

return num;

}

}

Model类库的一个Operater类

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace HRMSYSModel

{

public class Operater

{

public string OperaterName { set; get; }

public string Password { set; get; }

public bool IsDelete { set; get; }

public Guid ID { set; get; }

}

}

UI层(这里用的是winfrom应用程序)

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using HRMSYSDAL; //注意UI层要引用DAL层和Model层

using HRMSYSModel;

using HRMSYSUI.WinFromSurface;

namespace HRMSYSUI

{

public partial class LogIn : Form

{

public LogIn()

{

InitializeComponent();

}

MainShow MS = new MainShow();

int errorTime = 0;

private void btnLogIn_Click(object sender, EventArgs e)

{

string name = txtLogInUserName.Text.Trim();

string password = txtLogInPassword.Text.Trim();

//验证文本框是否为空

if (Common.CheckTextBox(txtLogInUserName, txtLogInPassword))

{

return;

}

try

{

Common.GetOperater(name); //要是获取不到数据库中用户名,则抛出异常

}

catch

{

MessageBox.Show("用户名不存在!");

return;

}

if(errorTime>=3)

{

MessageBox.Show("错误次数过多,要锁定输入的文本框!");

txtLogInUserName.Enabled = false;

txtLogInPassword.Enabled = false;

return;

}

if (Common.GetPassword(name) == MD5.GetMD5((password + MD5.GetSalt()))&&errorTime<3)

{

MessageBox.Show("登陆成功!");

errorTime = 0;

this.Hide();

MS.Show();

}

else

{

MessageBox.Show("用户名或密码有误!");

errorTime++;

}

}

private void btnCancel_Click(object sender, EventArgs e)

{

this.Close();

this.Dispose();

}

//加载表数据

public void DGShowInfo()

{

MS.dgShow.DataSource = Common.GetPersonInfo();

}

}

}

而我写的应该也是三层,Common类不就是引用DAL层的SQLHelp类和Model类库嘛,其实它就是BLL业务层!

原则上:三层是-----DAL数据层引用Model类库 BLL业务层引用DAL层和Model类库 UI表现层引用BLL层和Model类库(三层我是这么理解的!望纠正!!)

(注意:以上的代码只是为了举例复制了一部分,不是很完整)

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流!
----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: