MVC中应该如何正确分层

Mic_Gary 2016-01-25 01:55:48
在此MVC项目之前,有一个三层结构的项目,然后我把那些bll、dal等项目拷贝过来直接用了,在“MvcTyLas5”中,在Control中去调用bll、dal、model这些层中的方法,Mvc的Model几乎没用到,项目截图如下图所示。

在做的过程中,发现mvc在我手里似乎变成了变现层,与教材书上的东西开始偏离了。
请问:按照图中的分层方式,是否正确?如果错误,应怎么样分层
...全文
611 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangguan96 2019-11-20
  • 打赏
  • 举报
回复
学到了 ,总是一直使用ajax,技术一直在更新啊
Mic_Gary 2016-01-27
  • 打赏
  • 举报
回复
引用 17 楼 sp1234 的回复:
当你倾向于学习这些比较现代的基于前端框架搞Web前端开发的思路,你对老的那种在web服务器端一遍遍刷新页面而设计的所谓 mvc 应该扔掉,这样可以减轻负担。 前端 web 框架,有采用 mvc 方式进行抽象的,也有 mmvm 方式抽象的,对应着比较简单的处理、和比较自动化的处理风格。(当然,如果连mvc风格都没有,那么就是你按照15年前的脚本编程方式纯粹手工去处理了)。前端跟后端数据服务总是需要沟通,就好像你经常使用的 ajax 就是其中一种(现在更好的方式,是逐步转换到 websocket 为核心的技术上,而不是 ajax 为核心)。这个沟通过程中你就需要事先定义好数据接口,这时候就明白的发现 model 建模对于思路的影响了。 而传统的 asp.net mvc,确实对 model 有点混淆。
谢谢大神指点
  • 打赏
  • 举报
回复
你感觉用不到你的mvc中的model的原因,是因为你根本不怎么真正使用 mvc。但是受到asp.net mvc 宣传的影响,又总是感觉自己好像是在使用着 mvc 似地。 实际上,当年你的页面以前端开发为主,那么页面在交互运行过程中并不刷新,此时纠结“服务器端的 mvc 架构”就是非常过时和浪费时间的事情了。此时所谓“服务器端 mvc”只是在初始化页面时有一点用。
  • 打赏
  • 举报
回复
因此 model 跨表现层,也跨数据层 --> 因此 model 跨表现层,也跨数据库操作层
  • 打赏
  • 举报
回复
mvc本来就是表现层的东西,它针对用户操作如何被响应、数据改变如何渲染,而并不针对任何数据库操作。 ajax 跟 mvc其实没有什么关系。你使用前端来访问ashx 才更能明白地进行编程。当你使用前端框架来访问数据服务,此时要求服务器端编程的什么 V 和 C 都应该删掉,应该是单纯的业务逻辑层数据服务。你说“我现在用到datatable的地方通过ajax访问control中的JsonResult”,有没有想过,这不恰好说明原本的 MVC 其实只是变成了提供远程数据服务访问了吗?! model 有各种实现,你的后端数据服务如果给 javascript 框架返回 json 对象(包括对象数组),然后由前端去渲染界面,那么这就是在传送 model。因此 model 跨表现层,也跨数据层,而且表现形式不仅仅是 .net 对象,也可以是序列化为 json 形式、xml形式。如果没有这个 model,不用说你的前端 UI 没有分层框架,就连前端跟服务器端也没有三层框架。 因此,一方面你根本没有“三层框架”,你的业务数据服务层就接到具体的 html 表现(可见前端框架也受其牵制);另一方面你的 mvc 概念也其实无用,因为你是倾向于 ajax、前端开发,而asp.net mvc 根本就只是asp.net服务器端编程,asp.net mvc 对前端开发根本没有提供什么支持。
  • 打赏
  • 举报
回复
MVC的那个Model我一般都用来放ViewModel,而不是DTO,Model那个类才用来放DTO,如果DTO已经满足ViewModel的需求,那么就没必要在MVC的Model文件夹里面再放个对应的ViewModel
正怒月神 版主 2016-01-26
  • 打赏
  • 举报
回复
前面写错了,不是dal层,是bll层业务处理,这里纠正一下。 如果datatable转换到json然后对前台绑定也是可以的。 既然你弄成了json,那我觉得你可以通过easyui来绑定数据,这样比你前台ajax拼接html来的方便许多。 当然,如果不是很麻烦的项目,那么可以通过ef生成model层,避免使用datatable,这样更符合面向对象的思想。 不过这个无伤大雅。
Mic_Gary 2016-01-26
  • 打赏
  • 举报
回复
引用 5 楼 hanjun0612 的回复:
我个人感觉mvc和 三层架构其实也不冲突。 把业务逻辑写到dal层,然后提供controller调用,是很正常的。 然后说说你没用到model的问题。 我觉得如果楼主没有用到实体层,那么就有问题。 mvc毕竟讲究实体对象与前台绑定的。如果你Model层没用到,那么前台绑定的数据难道是datatable?
似乎有道理,我现在用到datatable的地方通过ajax访问control中的JsonResult,然后把整个要查询的Datatable变成一个tr与td组合的string值返回回去,但似乎这么做有问题。求指导,学习中
正怒月神 版主 2016-01-26
  • 打赏
  • 举报
回复
我个人感觉mvc和 三层架构其实也不冲突。 把业务逻辑写到dal层,然后提供controller调用,是很正常的。 然后说说你没用到model的问题。 我觉得如果楼主没有用到实体层,那么就有问题。 mvc毕竟讲究实体对象与前台绑定的。如果你Model层没用到,那么前台绑定的数据难道是datatable?
huaneramn 2016-01-26
  • 打赏
  • 举报
回复
MVC就3块,哪有什么层的概念。。。。。。。。。。。。。。
  • 打赏
  • 举报
回复
当你倾向于学习这些比较现代的基于前端框架搞Web前端开发的思路,你对老的那种在web服务器端一遍遍刷新页面而设计的所谓 mvc 应该扔掉,这样可以减轻负担。 前端 web 框架,有采用 mvc 方式进行抽象的,也有 mmvm 方式抽象的,对应着比较简单的处理、和比较自动化的处理风格。(当然,如果连mvc风格都没有,那么就是你按照15年前的脚本编程方式纯粹手工去处理了)。前端跟后端数据服务总是需要沟通,就好像你经常使用的 ajax 就是其中一种(现在更好的方式,是逐步转换到 websocket 为核心的技术上,而不是 ajax 为核心)。这个沟通过程中你就需要事先定义好数据接口,这时候就明白的发现 model 建模对于思路的影响了。 而传统的 asp.net mvc,确实对 model 有点混淆。
  • 打赏
  • 举报
回复
对于asp.net编程来说,其实顶多就是给 html 文件中上述 seo 部分和最后的 script部分拼接几行简单的代码,用来写入几个 <ul><li><a><span> 这样的内容给搜索引擎看(如果是纯粹的动态应用而根本不需要seo,那么这方面则也不需要),然后写几个 初始化数据对象语句,最后调用自己的脚本的“启动”命令来根据数据去渲染界面(这是运行在客户端,而不是服务器端)。 asp.net 并不用来产生界面。那么你的 asp.net 服务器端程序中不应该再有什么 V、C部分了,mvc 服务器处理概念没有用了。
  • 打赏
  • 举报
回复
引用 12 楼 Mic_Gary 的回复:
细细阅读了一下您的留言,发现我确实是进入了“根本不怎么真正使用 mvc。但是受到asp.net mvc 宣传的影响,又总是感觉自己好像是在使用着 mvc 似地”这样一个状态,但如果我现在既想用上mvc,又不希望把原来的项目中写好的业务逻辑重新写过,是否还有更好的方法,我在网上看到一个gms的系统,我想参考它的做法,不知道他的是不是标准,如果您方便,可以帮我看看吗?下载地址: http://pan.baidu.com/s/1dDBqSBR
asp.net mvc作为一个编程平台产品,使用它没有问题。但是它并不是针对前端开发的,而是从java 阵营的 struts 抄来的15年前的那种 web 后台编程风格。事实上,如果你重点在于前端开发技术,那么不关你使用 .net、jsp、php,都不需要纠结于从多年前遗留下来的服务器端的 mvc 编程框架。遗留下来的 asp.net、jsp、php开发工具仍然还是要用的,但是编程方式会大不一样。 例如,举个稍微“激进”一点的例子,那么任何页面可能几乎都是类似这样的
<!DOCTYPE html>

<html lang="zh-cn">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial=1.0, user-scalable=no, target-densitydpi=medium-dpi" />


    <title>.......................</title>

    <link href="css/font-awesome.min.css" rel="stylesheet" />
    <link href="photo/photoswipe.css" rel="stylesheet" />
    <link href="photo/default-skin/default-skin.css" rel="stylesheet" />
    ..................... 其它一堆 .css 文件声明

</head>
<body style="position:relative;">
    <div class="seo">
        ................ 这里是少量最简单的基础 html 元素,用来给搜索引擎看,而用户不看这些内容 .......
    </div>

    <div class="page">
        这里是你的 html 模板,静态的、或者通过 ajax.get 方式动态获取这些内容
    </div>

    <div class="footer">
        ........
    </div>

    <script src="Scripts/jquery-2.1.4.min.js"></script>
    <script src="Scripts/moment.min.js"></script>
    <script src="Scripts/knockout-3.3.0.js"></script>
    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

    <script type="text/javascript">
        var a = .......初始化数据对象
        var b = .......初始化数据对象
        IndexPage.BootStart();
    </script>

</body>
</html>
一个页面,其实只有很简单的 html 模板,甚至没有 html 模板。整个界面表现,都是你的前端框架在浏览器端动态渲染的,而不是你在web服务器端生成的。
Doson 2016-01-26
  • 打赏
  • 举报
回复
mvc的model其实就是你实体的Model,只不过经常把实体的Model作为mvc中的model直接给了v,所以你感觉没用到mvc的m!如果遇到复杂的m是由几个数据实体的Model组成,这个时候你就需要在mvc的m中重新构建一个新model,这个时候你就能感觉到mvc的m的存在感了
Mic_Gary 2016-01-26
  • 打赏
  • 举报
回复
引用 11 楼 sp1234 的回复:
你感觉用不到你的mvc中的model的原因,是因为你根本不怎么真正使用 mvc。但是受到asp.net mvc 宣传的影响,又总是感觉自己好像是在使用着 mvc 似地。 实际上,当年你的页面以前端开发为主,那么页面在交互运行过程中并不刷新,此时纠结“服务器端的 mvc 架构”就是非常过时和浪费时间的事情了。此时所谓“服务器端 mvc”只是在初始化页面时有一点用。
http://www.cnblogs.com/guozili/p/3496265.html 这个是说明
Mic_Gary 2016-01-26
  • 打赏
  • 举报
回复
引用 11 楼 sp1234 的回复:
你感觉用不到你的mvc中的model的原因,是因为你根本不怎么真正使用 mvc。但是受到asp.net mvc 宣传的影响,又总是感觉自己好像是在使用着 mvc 似地。 实际上,当年你的页面以前端开发为主,那么页面在交互运行过程中并不刷新,此时纠结“服务器端的 mvc 架构”就是非常过时和浪费时间的事情了。此时所谓“服务器端 mvc”只是在初始化页面时有一点用。
细细阅读了一下您的留言,发现我确实是进入了“根本不怎么真正使用 mvc。但是受到asp.net mvc 宣传的影响,又总是感觉自己好像是在使用着 mvc 似地”这样一个状态,但如果我现在既想用上mvc,又不希望把原来的项目中写好的业务逻辑重新写过,是否还有更好的方法,我在网上看到一个gms的系统,我想参考它的做法,不知道他的是不是标准,如果您方便,可以帮我看看吗?下载地址: http://pan.baidu.com/s/1dDBqSBR
编程有钱人了 2016-01-25
  • 打赏
  • 举报
回复
用DDD模式 ,博客园和百度 你搜索下 这个模式
xuan.ye 2016-01-25
  • 打赏
  • 举报
回复
不用model 可能 是因为.net的数据结构太强大,难道表现层或者 html 没有比较复杂的数据结构吗?
Mic_Gary 2016-01-25
  • 打赏
  • 举报
回复
不是“变现层”,是“表现层”,语体教

62,046

社区成员

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

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

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

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