初学C#三层构架碰到的疑惑

kmy001 2010-10-13 11:32:34
从网上下了几个三层的源码看了看,这哪是三层,一个解决最多方案里有做多7个项目,难道有7层?
后来仔细看了一下,原来用到了反射和抽象工厂所以多了一层(DALFactory),还有一些类和接口(model,IDAL)是多于两层都用到的,所以把它们写到了单独的项目里。这样感觉六个项目就够了(UI,BLL,DALFactory,DAL,Model,IDAL)。

疑惑1、为什么BLL里都没有什么东西,基本上都是几行代码,什么东西应该放在BLL里,BLL的意义何在?

疑惑2、DAL里也有一些带有“user""login"等字眼的类,这些类基本都是一些对跟类同名表的增删查改的操作,这是不是业务逻?。如果把这些写在了DAL里是不是会不太方便呢?例如:如果又要做另一个项目(做另一个应用程序),把上一个项目的DAL拿过来用,却发现这个项目和原来的项目数据库里的表是不一样的,所以DAL还要做较大改动才能用。

望高手解惑!
...全文
584 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwe751682337 2010-10-17
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 troy2012 的回复:]
MVC思想.

Model
view
control
[/Quote]
mvc不等于三层架构
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 kmy001 的回复:]
引用 21 楼 ivan333 的回复:
数据库都不同 DAL也不同 当然不能复用

这是摘自 http://baike.baidu.com/view/687468的一段

三层结构的程序不是说把项目分成DAL, BLL, WebUI三个模块就叫三层了, 下面几个问题在你的项目里面:   1. UILayer里面只有少量(或者没有)的SQL语句或者存储过程调用, 并且这些语句保证不会修改……
[/Quote]

三层只是讲逻辑实现上的,并不是指程序结构上的三层。最终目的是为了提高内聚,降低耦合,减少层之间的依赖,便于扩展和维护(尽管可能会牺牲些许的性能)
同样学习中..
  • 打赏
  • 举报
回复
分层只是一种思想,不同的公司有不同的框架,也许是3层,也许大于3层
kmy001 2010-10-17
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 qq123592624 的回复:]
引用楼主 kmy001 的回复:
这个完全不用担心,应为上面我提到过一个DBHelper通用类,只要你的数据库不更换(如MySql换SQLServer或者Oracle)拿到哪里都可以使用,我们只要把每个更换的表对应的DAL类表名和字段名修改一下就可以了.
[/Quote]
更换数据库(如MySql换SQLServer或者Oracle)也可以用的helper
http://blog.csdn.net/kmy001/archive/2010/10/14/5940480.aspx
kmy001 2010-10-17
  • 打赏
  • 举报
回复
需要用到33楼说的socket吗?
kmy001 2010-10-17
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 vrhero 的回复:]
又是一个以为一个project就是一个tier的...那我岂不是设计过几十层的东西?

以你现在的程度最好去学OOAD和软件工程,分层不是技术问题而是工程问题...
[/Quote]
我没说一个项目就是一层,而且还加个又让我好自卑


谁能告诉我怎么让三层运行在不同的服务器上呢?
vrhero 2010-10-15
  • 打赏
  • 举报
回复
又是一个以为一个project就是一个tier的...那我岂不是设计过几十层的东西?

以你现在的程度最好去学OOAD和软件工程,分层不是技术问题而是工程问题...
NewBao 2010-10-15
  • 打赏
  • 举报
回复
解一:三层是分了更好的进行代码分工。如果只是一个很小的程序,直接一个项目里,甚至一个窗体里就全部搞定了。有三层的目的是为了可以使代码的辨识度增加。BLL中放一些业务逻辑方面的东西,比如从DAL中传入了int类型的,处理一下给表示层返回Bool的。
kmy001 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xiaotiange 的回复:]
都是根据需要来的,至于多少‘层’无所谓,还可以分个二十多‘层’呢
BLL ,业务逻辑层 ,不只业务逻辑的封装,还有验证啊,等等
[/Quote]
不是有多少项目就有多少层的.17L也提到过!
kmy001 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 ivan333 的回复:]
数据库都不同 DAL也不同 当然不能复用
[/Quote]
这是摘自 http://baike.baidu.com/view/687468的一段

三层结构的程序不是说把项目分成DAL, BLL, WebUI三个模块就叫三层了, 下面几个问题在你的项目里面:   1. UILayer里面只有少量(或者没有)的SQL语句或者存储过程调用, 并且这些语句保证不会修改数据?
  2. 如果把UILayer拿掉, 你的项目还能在Interface/API的层次上提供所有功能吗?   
3. 你的DAL可以移植到其他类似环境的项目吗?   
4. 三个模块, 可以分别运行于不同的服务器吗?
如果不是所有答案都为YES, 那么你的项目还不能算是严格意义上的三层程序
csdnflys 2010-10-15
  • 打赏
  • 举报
回复
学无止境,做东西都是根据具体情况而定的
  • 打赏
  • 举报
回复
路过 这个要看项目和搭建人的逻辑
ljb3326 2010-10-15
  • 打赏
  • 举报
回复
学习!!!!!!!!!!!!!!
编程爱好者L 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 kmy001 的回复:]
从网上下了几个三层的源码看了看,这哪是三层,一个解决最多方案里有做多7个项目,难道有7层?
后来仔细看了一下,原来用到了反射和抽象工厂所以多了一层(DALFactory),还有一些类和接口(model,IDAL)是多于两层都用到的,所以把它们写到了单独的项目里。这样感觉六个项目就够了(UI,BLL,DALFactory,DAL,Model,IDAL)。

疑惑1、为什么BLL里都没有什么东西……
[/Quote]
1.每个公司的分层都不一样,具体分几层还是看需求和项目的大小决定.
2.BLL业务逻辑层,主要是处理逻辑判断方面的,楼主看到的那个项目都是操作数据库的添删改查,所以基本上没有什么逻辑,这一层只是为了以后方便扩展,如果楼主去研究socket时,你就会知道那个逻辑不是一般的多...
3.DAL数据访问层,所谓的数据访问层就是对数据库语句的操作,所以楼主看到的都是一些表名之类的字段.其中DAL层中有个通用类DBHelper,即数据访问类,这个类主要负责接收每个表对应的DAL类传过来的SQL语句,然后利用ADO.Net的几个对象对数据库进行添删改查.
4.至于楼主的这句话:(例如:如果又要做另一个项目(做另一个应用程序),把上一个项目的DAL拿过来用,却发现这个项目和原来的项目数据库里的表是不一样的,所以DAL还要做较大改动才能用).这个完全不用担心,应为上面我提到过一个DBHelper通用类,只要你的数据库不更换(如MySql换SQLServer或者Oracle)拿到哪里都可以使用,我们只要把每个更换的表对应的DAL类表名和字段名修改一下就可以了.
wuguoxian001 2010-10-14
  • 打赏
  • 举报
回复
我学习简单的三层 感觉不是很难 不知道深层次的三层是什么
troy2012 2010-10-14
  • 打赏
  • 举报
回复
MVC思想.

Model
view
control
shaobin54504 2010-10-14
  • 打赏
  • 举报
回复
学习中...................
kidnet 2010-10-14
  • 打赏
  • 举报
回复
还好我理解了,现在看几层都比较OK(自认为的,哈哈)

疑惑1、为什么BLL里都没有什么东西,基本上都是几行代码,什么东西应该放在BLL里,BLL的意义何在?
那要看你的业务复不复杂了,如果你添加用户,不光是往用户表插入数据,还要往日志表插入操作,还要往权限表插入数据,那你的BLL里面就不简单

疑惑2、DAL里也有一些带有“user""login"等字眼的类,这些类基本都是一些对跟类同名表的增删查改的操作,这是不是业务逻?。DAL里面都是数据库操作如果把这些写在了DAL里是不是会不太方便呢?例如:如果又要做另一个项目(做另一个应用程序),把上一个项目的DAL拿过来用,却发现这个项目和原来的项目数据库里的表是不一样的,所以DAL还要做较大改动才能用。这是肯定的,就像网上没有稳定的DAL提供下载一样,都是根据数据库的表字段来的
Ivan333 2010-10-14
  • 打赏
  • 举报
回复
数据库都不同 DAL也不同 当然不能复用
kmy001 2010-10-14
  • 打赏
  • 举报
回复
昨天刚下了个petshop好复杂,研究中。
这个帖子过几天再结,互相学习啊!
加载更多回复(19)
源码下载地址: https://pan.quark.cn/s/40677b766bda "ContextCapture 倾斜摄影快速、创新及全面空三建模与单机集群硬件部署方案2018" 此资源聚焦于倾斜摄影(ContextCapture)空三建模及单机集群硬件部署方案,致力于为用户呈现最快、最优成本效益的台式工作站、移动工作站、并行集群的多样化部署选择。以下是该资源的详细知识点概述: 一、相关设备型号说明 * UltraLAB 是西安坤隆计算机科技有限公司推出的专属图形工作站品牌,具备三大卓越优势:顶尖的计算硬件架构、精准的行业应用定制服务、专业的硬件系统优化工艺。 二、硬件部署方案 * 台式工作站部署建议:设备特色在于当前市场上最快的台式计算架构,适用于办公场景下,部门层级常规的倾斜摄影空三处理、三维建模。 * 便携式工作站部署建议:设备特色在于当前市场上最快的移动计算架构,适用于移动倾斜摄影的空三处理、三维建模工作站。 * 大数据量处理工作站推荐:设备特色在于极限自动超频加速与16个并行存储构造,具备空三处理和三维建模最强的计算性能及海量高速并行存储性能。 * 多设备并行计算集群部署建议:针对海量图像数据计算产生的巨大需求,单机计算能力处理时间过长,效率不高,通过多台机器并行集群,进行空三处理、三维建模,显著减少处理时间。 三、部署方案深入解析 * 2.1 倾斜摄影建模(台式工作站)部署方案:设备特色在于最高的计算处理能力~6核5.2GHz,内存最大配置可达64GB,配备最新图灵架构的RTX显卡,相比市场其他品牌机器(单CPU、双Xeon处理器)更快、更具成本效益。 * 2.2 倾斜摄影建模(移动便携式工作站)硬件部署方案:设备特色在于最高的计算处理能力~6...

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧