瘦BLL+胖DAL VS 胖BLL+瘦DAL(1)
简介
====================================================
以前做过一些winform的项目,那些项目也涉及到数据库,但是那些项目中表的作用只是把那些数据管理起来而已,
表与表之间的关联,或者说表与表之间一般不会有什么多表查询,为什么我会在这里说到多表查询呢,因为这个问题
就是我写这篇文章的原因,这里只是想起一个提出问题的作用,也希望大家帮忙帮忙。。。我做web还没有一个月,
就遇到一个问题,这个问题应该是很多人都有的,我这里集合我找到的一些资料和网上的讨论,仅仅想起到一个抛砖
引玉的作用。。
====================================================
问题
====================================================
任何做过web的程序员,一定知道三层构架,也就是什么界面层,业务逻辑层和数据访问层,界面层这里
就不做为今天的主题,我就来说一下业务逻辑层与数据访问层与处理多表查询之间的矛盾。
我这里引用别人的例子,我做了上点改动。
举例说明:
我有一个公司的管理系统,其中有两张表Department和Employee,现在公司有个需求说需要查看某一部门员工列表,
要求要有部门名称。我首先是建立两个实体类,DepartmentInfo和EmployeeInfo,其中EmployeeInfo中有一个
DepartmentName的属性。 然后我的做法是在DAL层中的Employee类中加一个方法
public List<EmployeeInfo> GetEmployeeList()
{
//string command="select e.*,d.departmentname from employee e,department d where e.departmentid=d.departmentid";
//或者调用存储过程
//.....访问数据库,填充EmployeeInfo
}
然后在BLL层中也写一个方法
public List<EmployeeInfo> GetEmployeeList()
{
DAL.GetEmployeeList();
//......一些其它的处理
}
最终在UI层去调用BLL的方法去实现列表显示。
在上面的程序示例中,DAL层中不论是直接用SQL语句还是用存储过程,这样无形之中就将业务逻辑转嫁到了数据访问层,
数据访问层是干什么的,数据访问层应该仅仅是对数据库进行访问,他才不管你什么业务逻辑,这样不就乱了吗??如果表的连接
越多, 这种现象也就越明显。
好,为了不乱我就想一个办法,不就数据访问层吗,分层就分层,
BLL层:
public List<EmployeeInfo> GetEmployeeInfo()
{
//先得到员工,DAL.GetEmployee();
//再得到员工所在我部门名,DAL.GetDepartmentName();
//最后填充EmployeeInfo
}
DAL层:
public List<Employee> GetEmplyee()
{
sql="select * from Emplyee";
//操作emplyee表
}
public string GetEmplyee()
{
sql="select DepartmentName from Department where DepartmentId=123";
//操作Department表
}
这样就完全是按三层做的,并且这样的代码可以用代码生成工具生成,但是这样的代码在效率上就不成样子了,这样就有
了问题,怎么解决呢?用不用三层呢??
晚上,再写一些我的想法,先吃饭去。
作者:OUZI(connoryan)
出处:http://www.cnblogs.com/ouzi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述