初学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还要做较大改动才能用。

望高手解惑!
...全文
585 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)
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!
内容概要:本文围绕“计及风电不确定性的电力系统黑启动与负荷恢复协同优化”开展研究,提出了一种融合风电出力随机性与波动性的黑启动及负荷恢复协同优化模型,并基于Matlab平台实现了完整的代码仿真与算例验证。研究构建了考虑不确定性因素的优化框架,通过场景生成与削减技术处理风电出力的随机特征,建立了兼顾系统安全性、恢复效率与供电可靠性的多目标优化模型。文中详细阐述了模型的数学建模过程、关键约束条件(如功率平衡、设备启停顺序、网络拓扑约束等)、求解算法设计及黑启动电源优选策略,并通过标准测试系统验证了所提方法在提升灾后恢复能力方面的有效性与优越性。; 适合人群:具备电力系统分析、优化理论及可再生能源并网基础知识,从事电力系统恢复控制、新型电力系统韧性提升、新能源集成等方向研究的研究生、科研人员及电力行业工程技术人才。; 使用场景及目标:①用于电力系统大面积停电后的黑启动方案制定,优化启动电源选择与负荷恢复时序;②为高比例风电接入背景下电力系统的安全稳定与弹性恢复提供决策支持;③作为Matlab仿真教学资源,辅助理解不确定性建模、随机/分布鲁棒优化及电力系统动态恢复过程。; 阅读建议:建议结合提供的Matlab代码进行同步研读,重点掌握风电不确定性建模方法(如场景法)、优化模型构建逻辑与求解流程(如使用YALMIP调用求解器),宜在熟悉基本电力系统运行与优化算法的基础上进行复现与拓展研究。
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!

111,129

社区成员

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

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

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