五、实现业务逻辑层BLL
定义一个基本业务逻辑接口IBaseService,作各业务访问的总中介,也就是说视图层只通过IBaseService的接口对象,访问业务层,具体访问哪个业务,是通过注入IBaseService的实现类来完成的,可根据需要生成具体业务类,实现接口中定义的抽象方法。
业务逻辑层通过对应数据实现类,访问模型数据。
1.新建IBaseService接口,定义单个业务的CRUD泛型操作
public interface IBaseService
{
void add(Object obj);
void delete(int id);
void edit(Object obj);
BindingSource list();
Object getById(int id);
BindingSource getByName(String name);
}
public abstract class BaseDataService
{
private String msg;
public String Msg { get => msg; set => msg = value; }
}
2.新建UserService类,实现BaseDataService,IBaseService接口,实现用户业务。
public class UserService : BaseDataService,IBaseService
{
UserDao userDAO; //用户数据访问类
public UserService() { userDAO = new UserDao(); }
public void add(Object obj)
{
User user = (User)obj;
int num=userDAO.Add(user);
this.Msg = "成功添加" + num + "条信息";
}
public void delete(int id)
{
int num= userDAO.Delete(id);
this.Msg = "成功删除"+num+"条信息";
}
public void edit(Object obj)
{
User user = (User)obj;
int num=userDAO.Edit(user);
this.Msg = "成功修改" + num + "条信息";
}
public BindingSource list()
{
DataSet ds=userDAO.FindAll();
//向listDgView绑定数据源
BindingSource bs = new BindingSource();
bs.DataSource = ds.Tables[0];
return bs;
//listDgView.DataSource = bs;
//listDgView.ReadOnly = true;
}
public object getById(int id)
{
return userDAO.Get(id);
}
public BindingSource getByName(string name)
{
SqlDataReader sdr= userDAO.Get(name);
BindingSource bs = new BindingSource();
bs.DataSource = sdr;
return bs;
}
}】
3.新建TopicService类,实现BaseDataService,IBaseService接口,实现标题业务。
public class TopicService: IBaseService
{
TopicDao topicDAO;
String msg;
public String Msg { get => msg; set => msg = value; }
public TopicService() { topicDAO = new TopicDao(); }
public void add(Object obj)
{
topicDAO.Add((Topic)obj);
}
public void delete(int id)
{
int num = topicDAO.Delete(id);
msg = "成功删除" + num + "条信息";
}
public void edit(Object obj)
{
topicDAO.Edit((Topic)obj);
}
public BindingSource list()
{
DataSet ds=topicDAO.FindAll();
//向listDgView绑定数据源
BindingSource bs = new BindingSource();
bs.DataSource = ds.Tables[0];
return bs;
}
public object getById(int id)
{
return topicDAO.Get(id);
}
public BindingSource getByName(string name)
{
SqlDataReader sdr= topicDAO.Get(name);
BindingSource bs = new BindingSource();
bs.DataSource = sdr;
return bs;
}
}
4.新建TopicService类,实现BaseDataService,IBaseService接口,实现标题业务。
public class NewsService : IBaseService
{
NewsDao newsDAO;
String msg;
public String Msg { get => msg; set => msg = value; }
public NewsService()
{
this.newsDAO = new NewsDao();
}
public void add(object obj)
{
this.newsDAO.Add((News)obj);
}
public void delete(int id)
{
int num=newsDAO.Delete(id);
msg = "成功删除" + num + "条信息";
}
public void edit(object obj)
{
this.newsDAO.Edit((News)obj);
}
public BindingSource list()
{
DataSet ds = newsDAO.FindAll();
//向listDgView绑定数据源
BindingSource bs = new BindingSource();
bs.DataSource = ds.Tables[0];
return bs;
}
public object getById(int id)
{
return newsDAO.Get(id);
}
public BindingSource getByName(string name)
{
SqlDataReader sdr = newsDAO.Get(name);
BindingSource bs = new BindingSource();
bs.DataSource = sdr;
return bs;
}
}
用户登录业务,这里直接访问了数据层
public class UserLogin {
String msg;
public String Msg
{
get
{
return this.msg;
}
set { this.msg = value; }
}
public User login(String name,String pwd)
{
const String sql = "SELECT * FROM [newsDB].[dbo].[users] where uname=@uname and upass=@upass";
AdoConnector ado = new AdoConnector();
User user=null;
//验证用户是否存在
SqlDataReader sdr = ado.QueryReader(sql,
new SqlParameter[] {new SqlParameter("@uname",name), new SqlParameter("@upass",pwd)});
if (sdr != null)
{
user = new User((String)sdr["uname"], (String)sdr["upass"]);
}
ado.CloseConnection();
return user;
}
}