菜鸟求助,三层架构不太理解
今天老师讲三层架构,代码中将sql语句(select * from 表)放到了Model层和BLL层,在调用dal层的时候传递的参数是sql语句。
可是我听有高手说将sql语句放到dal层。又百度了一下,的确很多人说sql语句是在dal层生成的。
菜鸟不解:
放到bll层,在bll层生成sql语句后调用dal层,但是如果数据库改了,那不是还要改bll层的语句吗?
放到dal层,如果sql语句太多的话,一个语句一个方法调用,那会不会太乱啊?自定义的方法很多。维护的时候不好维护。
求高手解惑。如果有经典三层架构源代码最好分享一下。(微软的那个petshop就不要说了)
------解决方案--------------------SQL语句 是一般是放在SqlDal层,在Model的我还没见过;至于你要像那样的源码,给你也 恐怕看不懂的
------解决方案--------------------你说的多数据库现在你还不用考虑。。那要用到抽象工厂了。。
还是在 dal 封装你自己常用的数据库好点。
等以后学的好点了就可以自己去找资料看了。。
------解决方案--------------------三层架构简单的理解举例
dal,bill,ui
数据库操作dal
逻辑bill
用户交互:ui
例如,
1.现在你的ui层程序是web的,哪天改成win了,只需要再做一个win就行了
2.现在你的dal连接的是SQL,哪天改成MYSQL了.也只需改动dal
------解决方案--------------------不要关注代码实现
抽象到 模块的关联 级别 就能理解了
------解决方案--------------------自己理解的三层:
页面表示层(MODEL) 我理解为对字段的封装,对请求的数据返回,表现出来
业务逻辑层(BLL) 业务逻辑,自定义方法都在这里面
数据访问层(DAL) 对数据的操作,可以自定义sqlhelp里的内容
------解决方案--------------------UI层
List<Model.Customer> li = CustomerBLL.getAllCustomer();
BLL层
public static List<Model.Customer> getAllCustomer()
{
return CustomerDAL.getAllCustomer();
}
DAL层
public static List<Model.Customer> getAllCustomer()
{
List<Model.Customer> li = new List<Model.Customer>();
LinqDBDataContext db = new LinqDBDataContext(LinqDBHelp.linqcon);
var customer = from p in db.Customers
select p;
foreach (var i in customer)
{
Model.Customer temp = new Model.Customer();
temp.CustomerID = i.CustomerID;
temp.Name = i.Name;
temp.Sex = i.Sex;
temp.Age = Convert.ToInt32(i.Age);
temp.Phone = i.Phone;
temp.Email = i.Email;
temp.Birthday = i.Birthday.ToString();
temp.Postcode = Convert.ToInt32(i.PostCode);
temp.Address = i.Address;
temp.Companyname = i.CompanyName;
temp.Agent = i.Agent;
temp.State = i.State;
li.Add(temp);
}
return li;
}
------解决方案--------------------
------解决方案--------------------还有你管他有几层呢,做出来就行了 BLL也不是非得要不可的 你就是1层、没层次,只要做出来了,money也照样到手。
------解决方案--------------------三层不简单,更准确说,架构设计不简单,融合很多知识点。
而要把这个庞然大物,解构,剥洋葱皮,简单的呈现出来,更是二期工程,难上加难。
这两个事情,都是我的目标。
三层架构,够不够---DDD眼中的三层(附C#源代码实现)
------解决方案--------------------在我的程序中,我直接调用ado.net、或者linq to sql、或者MongoDB的.net驱动等。这些就是数据驱动层,我不再写ORM了。
不过,我不反对任何研究ORM的主张。如果有好的高性能的ORM,还是可以立刻尝试的。