跪求大神解释什么叫做纯粹的三层架构,目前已经背上MVC的阴影了

MadridRamos 2016-04-21 01:38:05

我看了这个项目好几天了,越看越糊涂了,三层架构中除了DAL,BLL,UI层最多加个接口层,其他的层都是什么鬼,而且三层架构中UI层里到底应该有些什么?请求各位不吝赐教,多谢了。
...全文
485 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
likevs 2016-04-22
  • 打赏
  • 举报
回复
引用 12 楼 yuwenge 的回复:
[quote=引用 6 楼 likevs 的回复:] webform三层:DAL + BLL + Model + UI mvc三层:DAL + BLL + Entity + View 楼主你自己看上面这些,就懂得它们其实都一个样,区别嘛,粗略来讲,webform的DAL层偏喜欢直接使用ADO.NET来和数据库打交道;而mvc偏喜欢用EF来和数据库打交道,其实它们背后的原理嘛,我不解释了,只不过表面上看来是有区别的嘛。 区别大一点的话,可能就是UI和View了,VS开发工具里有一个【工具箱】的,它里面有两组控件,一种是【标准】,另一组是【HTML】,webform的页面大多是*.aspx文件,偏喜欢用【标准】组控件,而mvc的页面大多是*.cshtml,应该只能使用【HTML】组的控件了,这应该算是蛮大的区别了,至于webform的*.aspx页面的一些按钮控件,官方把它们封装好了,所以它们自己带有驱动事件,我们用它们时,喜欢用它们的事件驱动式编程开发,比如提交表单事件,而mvc的*.cshtml里的按钮,是HTML原始的按钮,怎么操作你自己搞定就行。 讲到这里,相信楼主也多少朦胧地理解一小点儿它们的区别了。其实楼主,你不防这样,你在UI里新添加一个叫123.aspx的页面,然后在【工具箱】里,找到一个中Button的按钮,把它拖放到123.aspx页面上来,开发页面左下角有个“设计”选项,你可以选中它之后,像在网页设计软件DW中一样直接可视化地看到网页,不像MVC里的,必须要运行才能看到页面长啥样哦,然后,你双击刚才的按钮,不出错的话,开发工具会给你弹出一个123.aspx.cs的文件窗口给你,这,就是对应123.aspx文件的逻辑代码文件了,你在这个123.aspx.cs文件中,可以处理点击按钮事件,提交表单事件等的C#代码,它有点像MVC中的123Controls.cs文件。 简单点说的话,就是123.aspx文件对应的编码是123.aspx.cs,它没有方法之说,它用的是事件,至于事件的绑定,一般都是你页面上选中相应的控件,双击它或者在【属性】窗口里双击相应的事件,则开发工具会自动帮你关联起来,而123.cshtml对应的编码文件为123Contrlos.cs文件,它用的是方法,没有事件之说(JS事件除外),至于方法的绑定,一般都是你页面上手动绑定好控件器和方法名,开发工具是不会帮你处理这些的 好了,我只写这么多了,我觉得嘛,真想了解它们,还不如去看一下书快点,问也问不出多少的嘛
一口就把controller吃掉了。[/quote] 确实,写得太急忙了,忘记写上MVC中的控制器了,不过就好比webform中的*.aspx.cs文件一样,这两者不是侧重点,重点是楼主他想知道两种开发模式中三层的概念
正怒月神 版主 2016-04-22
  • 打赏
  • 举报
回复
同上 ,三层架构和mvc的注重点是不同的,完全可以用在一个项目中。 楼主图上的只是对三层架构进一步进行了拓展。本质上还是三层架构。 只是多了一些 比如 接口层等等
「已注销」 2016-04-22
  • 打赏
  • 举报
回复
MVC和三层 可以有交叉 也可以完全分离 但不可以搞混淆
「已注销」 2016-04-22
  • 打赏
  • 举报
回复
引用 11 楼 lr5420511 的回复:
按照版主的性格,这贴又要加精没跑了
此贴有望加精 快来留个名
  • 打赏
  • 举报
回复
由于许多人整天纠结于底层数据库增删改查,为了体现他们10几年“研究软件”稍有成就,于是他们很容易就在DAL上做多余的文章。所以不要看名词儿,不要因为他们起了DAL这个词儿就认为它们写的是DAL代码。 DAL应该是纯粹疯传数据库操作的,例如传统的但是比较简单的ADO.NET也是DAL,高级的面向对象的ODBMS也是,Entitity Framework 也是。当然如果现成的模块不够用,你可以自己扩展自己的模块与现成的模块公公组成DAL。 实际上大部分代码都不需要写DAL层,因为现成的数据库封装框架已经非常精当、非常好用、甚至把(一般人根本用不上的)跨数据库封装都考虑进去了,在BLL中直接使用即可。你根本不用自己写什么DAL。但是就算是写,最起码的原则,DAL中并不涉及业务逻辑处理,是纯粹的数据库操作。DAL层是在你知道一个项目“之前”就写出来的,而不是你根据什么业务Model去逐一封装的。而你看那些“为了三层而三层”的所谓DAL,它根据业务实体来写一个个DAL类,这明显就是越俎代庖用DAL来干BLL的事情的做法。
  • 打赏
  • 举报
回复
每一个技术、每一个重要决策,都会回到 UI 层去重新研究和评估。可能一个项目要有1千次回归,每一个技术设计的“合理性解释”都可以从应用出发来解释,并且每隔几天就重新设计、重新上线符合新的 UI 设计的版本。 如果你满脑子只有底层,然后“慢慢向上拼凑”,最后把老板的钱都耗光了的时候才推出来的是一个畸形的交互式应用,根本不是用户和投资人要的东西,那这就是很不幸的事件。一看你看别人软件的方式,就知道你还是只把精力放在低级的技术层,没有从应用设计着手去看问题。
  • 打赏
  • 举报
回复
分层的概念,例如UI相关的代码不应该直接访问数据库和后台一切内部信息,于是出现了BLL层,这就是分层。而假设一个模块被很多其它的代码调用,这顶多叫做模块,不叫做层。 所以不可能有什么“model层”的概念,如果把这个叫做层一定是很扯的。Model是用在各个层共享的信息交换规范、序列化定义,因此它顶多是叫做“model模块”而不叫层。因此 Utility通常也是类库模块,而不是层。而IBLL也只是模块,跟这里的Model模块是同一个意思。 BLL中应该直接调用数据库增删改查操作语句,而一些“为了三层而三层”的人,在有了Entity之后非要再分出一个DAL,然后在DAL中干BLL本该干的事情,把BLL层架空了。于是就产生了多余的层。 最后,还是那句话,你的关注点是从底层出发的,而不是从高层UI 层出发的。这就会浪费大量精力去纠结技术,容易忽视真正的技术的目的。纯粹技术不是什么高尚的东西,只有从应用出发、对技术进行重构,你的技术才有用。所有我们看一个人的技术好不好,不是看它低级考试得几分,而是看他在紧急时刻是否能够对技术进行外科手术式的调整改变。
卧_槽 2016-04-22
  • 打赏
  • 举报
回复
引用 6 楼 likevs 的回复:
webform三层:DAL + BLL + Model + UI mvc三层:DAL + BLL + Entity + View 楼主你自己看上面这些,就懂得它们其实都一个样,区别嘛,粗略来讲,webform的DAL层偏喜欢直接使用ADO.NET来和数据库打交道;而mvc偏喜欢用EF来和数据库打交道,其实它们背后的原理嘛,我不解释了,只不过表面上看来是有区别的嘛。 区别大一点的话,可能就是UI和View了,VS开发工具里有一个【工具箱】的,它里面有两组控件,一种是【标准】,另一组是【HTML】,webform的页面大多是*.aspx文件,偏喜欢用【标准】组控件,而mvc的页面大多是*.cshtml,应该只能使用【HTML】组的控件了,这应该算是蛮大的区别了,至于webform的*.aspx页面的一些按钮控件,官方把它们封装好了,所以它们自己带有驱动事件,我们用它们时,喜欢用它们的事件驱动式编程开发,比如提交表单事件,而mvc的*.cshtml里的按钮,是HTML原始的按钮,怎么操作你自己搞定就行。 讲到这里,相信楼主也多少朦胧地理解一小点儿它们的区别了。其实楼主,你不防这样,你在UI里新添加一个叫123.aspx的页面,然后在【工具箱】里,找到一个中Button的按钮,把它拖放到123.aspx页面上来,开发页面左下角有个“设计”选项,你可以选中它之后,像在网页设计软件DW中一样直接可视化地看到网页,不像MVC里的,必须要运行才能看到页面长啥样哦,然后,你双击刚才的按钮,不出错的话,开发工具会给你弹出一个123.aspx.cs的文件窗口给你,这,就是对应123.aspx文件的逻辑代码文件了,你在这个123.aspx.cs文件中,可以处理点击按钮事件,提交表单事件等的C#代码,它有点像MVC中的123Controls.cs文件。 简单点说的话,就是123.aspx文件对应的编码是123.aspx.cs,它没有方法之说,它用的是事件,至于事件的绑定,一般都是你页面上选中相应的控件,双击它或者在【属性】窗口里双击相应的事件,则开发工具会自动帮你关联起来,而123.cshtml对应的编码文件为123Contrlos.cs文件,它用的是方法,没有事件之说(JS事件除外),至于方法的绑定,一般都是你页面上手动绑定好控件器和方法名,开发工具是不会帮你处理这些的 好了,我只写这么多了,我觉得嘛,真想了解它们,还不如去看一下书快点,问也问不出多少的嘛
一口就把controller吃掉了。
lr5420511 2016-04-21
  • 打赏
  • 举报
回复
按照版主的性格,这贴又要加精没跑了
  • 打赏
  • 举报
回复
纯粹三层?UI层包括视图,model,控制器,js引用文件,还有美工做的图标,图片等,当然UI层的视图,model,控制器,一般情况是不用的,真正实现功能的在其他层,估摸着你做的这个项目最初就是用三层做的,后来改成的mvc,其实搞不搞的懂没啥关系,用多了就搞懂了
圣殿骑士18 2016-04-21
  • 打赏
  • 举报
回复
所谓三层的概念,不只是一个概念,不同的角度,是有不同的概念的。 MVC的三层,当然就是M,V,C了。侧重讲的是数据的提取和展现。 而所谓BLL,DAL,Entity(或者Model)的分层,侧重讲的是业务数据的分层处理。实际上BLL+DAL,就是MVC中的C,Entity就是 MVC的M。
範先森 2016-04-21
  • 打赏
  • 举报
回复
对于网站来说,DAL,BLL这些都是负责功能数据的,而对于老板来说UI才是他关心的,对所有用户来说,最直观的就是UI
  • 打赏
  • 举报
回复
你可以忽略那几个接口dll,然后剩下的就是三层,BLL,DAL,UI,然后Enitty就是Model层,不知道你这个项目里面的Web.UI这个类是干嘛的,难道是展示层封装?
likevs 2016-04-21
  • 打赏
  • 举报
回复
webform三层:DAL + BLL + Model + UI mvc三层:DAL + BLL + Entity + View 楼主你自己看上面这些,就懂得它们其实都一个样,区别嘛,粗略来讲,webform的DAL层偏喜欢直接使用ADO.NET来和数据库打交道;而mvc偏喜欢用EF来和数据库打交道,其实它们背后的原理嘛,我不解释了,只不过表面上看来是有区别的嘛。 区别大一点的话,可能就是UI和View了,VS开发工具里有一个【工具箱】的,它里面有两组控件,一种是【标准】,另一组是【HTML】,webform的页面大多是*.aspx文件,偏喜欢用【标准】组控件,而mvc的页面大多是*.cshtml,应该只能使用【HTML】组的控件了,这应该算是蛮大的区别了,至于webform的*.aspx页面的一些按钮控件,官方把它们封装好了,所以它们自己带有驱动事件,我们用它们时,喜欢用它们的事件驱动式编程开发,比如提交表单事件,而mvc的*.cshtml里的按钮,是HTML原始的按钮,怎么操作你自己搞定就行。 讲到这里,相信楼主也多少朦胧地理解一小点儿它们的区别了。其实楼主,你不防这样,你在UI里新添加一个叫123.aspx的页面,然后在【工具箱】里,找到一个中Button的按钮,把它拖放到123.aspx页面上来,开发页面左下角有个“设计”选项,你可以选中它之后,像在网页设计软件DW中一样直接可视化地看到网页,不像MVC里的,必须要运行才能看到页面长啥样哦,然后,你双击刚才的按钮,不出错的话,开发工具会给你弹出一个123.aspx.cs的文件窗口给你,这,就是对应123.aspx文件的逻辑代码文件了,你在这个123.aspx.cs文件中,可以处理点击按钮事件,提交表单事件等的C#代码,它有点像MVC中的123Controls.cs文件。 简单点说的话,就是123.aspx文件对应的编码是123.aspx.cs,它没有方法之说,它用的是事件,至于事件的绑定,一般都是你页面上选中相应的控件,双击它或者在【属性】窗口里双击相应的事件,则开发工具会自动帮你关联起来,而123.cshtml对应的编码文件为123Contrlos.cs文件,它用的是方法,没有事件之说(JS事件除外),至于方法的绑定,一般都是你页面上手动绑定好控件器和方法名,开发工具是不会帮你处理这些的 好了,我只写这么多了,我觉得嘛,真想了解它们,还不如去看一下书快点,问也问不出多少的嘛
MadridRamos 2016-04-21
  • 打赏
  • 举报
回复
感谢回帖的大神,其实我从学校正式接触编程包括实习的两个月还有现在刚工作的一周的时间,算是初学者中的初学者,因为培训时用的MVC,在UI层里通过控制器从模型中获取数据到视图上,现在工作的企业不用mvc所以没了控制器,需要在UI层中创建Web窗体添加方法,而且用到了很多控件。关于UI层的问题其实是这样的,在建立Web应用程序时我到底该选哪一个?
jhdxhj 2016-04-21
  • 打赏
  • 举报
回复
本来不存在什么层,有的人非要讲个分层的理论
  • 打赏
  • 举报
回复
其它所有的层,都是为了把 UI 做得更好而设计的,其中最低级、最后的就是DAL。比如说一个人开饭馆做大厨,它最低级的目的是只要让人填饱肚子,比较高级的还可能考虑口味佳、卖相好。你觉得DAL算是口味佳、还是填饱肚子层次的呢? 你还问“UI层到底做什么的?”,其实你把庸俗的底层的东西忘掉,赶紧做点用户和老板最关心的东西,这就是UI。
  • 打赏
  • 举报
回复
至于说 BLL,当你的系统稍微复杂一点,就不是一个人在家里“玩玩儿”所能作得了的了,它需要持续重构,随着UI 的千奇百怪的新需求而扩展,不同前端团队的不同应用都可能共享一套业务服务器系统,这就是BLL层设计概念。
  • 打赏
  • 举报
回复
你既然要做web应用,当然就是要提交可交互操作的界面给用户使用,提交页面给股东审查,不然他怎么会发给你工资呢。UI 是你的围绕的、做事情的出发点。你怎么连 UI 都本末倒置呢?

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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