WebForm 自面世以来,  广受广大开发人员的欢迎 。

当然, WebForm 有一些 著名的 弊病,  比如 笨重的 ViewState 。

不过 我们 可以 用 一些 更加 先进 和 灵巧 的 方式 来使用它 。

比如,   《WebForm Anyway》  https://www.cnblogs.com/KSongKing/p/9455143.html  ,

WebForm  优秀 的 控件模型, 很方便, 很好, 很优秀 。

比如  UserControl,  后来者 没有 超越的,  包括  MasterPage,  当然 MasterPage 也是 WebForm 的, 不过我顺便说两句,

MasterPage   把   Web 简单草根 自由清新 的 传统  的 乡村空气    完全 搅浑了,   搅成一塘泥巴  。

明明在  页面  里   放一个   Header  和 一个  Footer   的  UserControl  就完事 的 事,  非要 搞一个 不透明 的 框(MasterPage) 框起来 ,,,

MVC 即使有 多种 方式 插入一个 局部界面, 比如   RenderPartial()  什么的,  没有一样 比得上  UserControl 。

后来者     没有    超越  UserControl  的 。

后来者 也  没有   超越   GridView   的 。

后来者 也  没有   超越   HttpModule   的 。

后来者 也  没有   超越   HttpHandler(.ashx) 的 。

Aspx 、 HttpHandler(.ashx)、HttpModule   三剑客 的 灵活性 无与伦比,  跟 后来者 比起来,  强大到让人 想哭 。

就 灵活性 这一点 而言,  堪称  Web 界  的   C 语言 。

Asp.net Core  的    Middle Ware ,  只不过是  新瓶 装 旧酒,   仅此而已 。

把  “观察者”  变成  “职责链”,  这是 创新 还是 革命 ?

Web 开发模型 在  WebForm 时代 就已经 达到 完备 了,

Aspx 、 HttpHandler(.ashx)、HttpModule    可以做 任何事 。

实际上, 如果按照 上面提到的 《WebForm Anyway》,   WebForm 可以容易的和 各种 前端框架 结合起来 。

So  ……    Any Problem    ?

从 其它方面 来看,  WebForm 快速开发 的 特性 使得 WebForm 可以用于 科研教育 事业,  可以编写 Demo,  可以用于 软件工程 里的 原型开发(Prototype) 。

WebForm 应该 扬弃,  而不是 抛弃,   抛弃 WebForm 等于 “因噎废食” 。

MVC 是要 改良 WebForm 的 弊端, 但是 自己 又 搞了 一套 蹩脚 的 规则 把 自己 套了 起来, 还不如 Web Pages 。

首先, 强迫使用 所谓的 “显示(View) 控制(Control) 模型(Model)”  分离 又 对应 的 这个 架构 本身 就是 失败 的, 非常失败 。

WebForm 对 3 层 架构 的 支持 很好, 把 UI 和 BL 分离 的 很清楚, 前端 后端 也 分离 的 很清楚 。

WebForm 非常经典, 非常优秀 。

而 反过来 看,  相比于 WebForm 直观 清晰 易用 的 3 层架构,  MVC 的 什么 “View 和 模型”  简直 是 为设计而设计, 就是 所谓的 “过度设计” 。

什么 View 和 模型(Model), 根本 不需要 这些 概念 。

要 这些 概念 做什么?

Web -> BL -> DAL

这很清楚 。

MVC 把 Web 分成了 View, Control, Model ,,,,,这 光 Web 层 都 变成 3 层 架构 了 。

MVC 里 还有一个 更糟 的 地方 是,

Model 还会跟 View 挂钩,  意思是 “某某 页面 涉及到 的 业务实体 是 xx ,yy ……” ,

这 挂钩 简直 是 纯粹 是 设计人员 和 开发人员 的 负担, 累赘  。

有 网友 提到 MVVM,    MVVM 我也反对 。

MVC 是 破坏 3 层架构 的,   从 MVVM 上 更加 清楚 的 可以看出来 。

MVC 表面上 分层 ,实际上 把 BL 和 DAL 削弱了, 并 把 BL 和 DAL 的 职能 混杂 进 了 UI 层, 这 非常 糟糕 。

MVVM 用来 做控件 可以, 做架构 不行 。

WebForm 的 前后端 分离 的 很清楚,

WebForm 可以 自由 的 使用 前端 渲染, 没有问题 。

前后端 架构 很清楚 。

WebForm 提供了 清晰 的 架构 和 灵活性, 可以在 后台(服务器端) 处理 UI 逻辑, 也支持 纯前端, 也支持 前端 和 后台 结合处理 UI 逻辑 。

所以说, WebForm 的 架构 是 很清晰 和 灵活 的,

WebForm 可以 简化 轻量化, 并和 前端 结合起来,

我认为 这样 很 完美 。

其实 MVC 更像 cgi, 只是比 cgi 更高级, 可以 方便 的 和 静态资源 混合 渲染 。

还可以参考:

《WebForm AnyWay》  https://www.cnblogs.com/KSongKing/p/9455143.html  ,

《我发起并创立了一个 .Net 平台上的 Web 业务系统 基础库 开源项目 WebEasy》  https://www.cnblogs.com/KSongKing/p/10249997.html  ,

《我发起并创立了一个 Javascript 前端库 开源项目 jWebForm》  https://www.cnblogs.com/KSongKing/p/10326119.html  。

.Net Core 没有 WebForm 是 历史 的 退步, MVC 是一个 糟糕 的 设计的更多相关文章

  1. Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  2. ASP.NET Core 中文文档 第四章 MVC(4.6)Areas(区域)

    原文:Areas 作者:Dhananjay Kumar 和 Rick Anderson 翻译:耿晓亮(Blue) 校对:许登洋(Seay) Areas 是 ASP.NET MVC 用来将相关功能组织成 ...

  3. ASP.NET Core 中文文档 第四章 MVC(2.1)模型绑定

    原文:Model Binding 作者:Rachel Appel 翻译:娄宇(Lyrics) 校对:许登洋(Seay).何镇汐 模型绑定介绍 ASP.NET Core MVC 中的模型绑定从 HTTP ...

  4. Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  5. 002.Create a web API with ASP.NET Core MVC and Visual Studio for Windows -- 【在windows上用vs与asp.net core mvc 创建一个 web api 程序】

    Create a web API with ASP.NET Core MVC and Visual Studio for Windows 在windows上用vs与asp.net core mvc 创 ...

  6. .NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)

    一.前言 本篇开发环境?1.操作系统: Windows 10 X642.SDK: .NET Core 2.0 Preview 二.安装 .NET Core SDK 1.下载 .NET Core下载地址 ...

  7. .NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)

    一.前言 本篇开发环境?1.操作系统:CentOS7(因为ken比较偏爱CentOS7)2.SDK版本:.NET Core 2.0 Preview 你可能需要的前置知识1.了解如何通过Hyper-V安 ...

  8. .NET CORE学习笔记系列(2)——依赖注入[4]: 创建一个简易版的DI框架[上篇]

    原文https://www.cnblogs.com/artech/p/net-core-di-04.html 本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章从 ...

  9. 从ASP.Net Core Web Api模板中移除MVC Razor依赖项

    前言 :本篇文章,我将会介绍如何在不包括MVC / Razor功能和包的情况下,添加最少的依赖项到ASP.NET Core Web API项目中. 一.MVC   VS WebApi (1)在ASP. ...

随机推荐

  1. Beta冲刺 1

    前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10093150.html 作业博客:https://edu.cnblogs.com/campus ...

  2. UITableView section 圆角 阴影

      在UITableView实现图片上面的效果,百度一下看了别人的实现方案有下面2种: 1.UITableView section里面嵌套UITableView然后在上面实现圆角和阴影,  弊端代码超 ...

  3. 巧用std::shared_ptr全局对象释放单例内存

    巧用std::shared_ptr 单例的使用相对比较广泛,但是需要在程序退出前调用它的析构函数对数据进行释放,常规做法是在main函数末尾进行释放工作, 但是这样相对比较繁琐,因此便有了利用全局变量 ...

  4. .NET并行计算和并发11:并发接口 IProducerConsumerCollection

    using System; using System.Collections; using System.Collections.Generic; using System.Collections.C ...

  5. asp.net 获取 repeater checkbox 值

    webform中获取repeat控件列表下的checkbox选中的值: 码农上代码: public static string getSelectedIDs(Repeater Rpt_) { stri ...

  6. iOS .tbd

    http://stackoverflow.com/questions/31450690/why-xcode-7-shows-tbd-instead-of-dylib http://www.jiansh ...

  7. php 调用接口

    1.一般常用方法 file_get_contents(): 今天调用了一个反人类的接口,接口是get方式传输,里面有一个参数是当前时间,没错,不是时间戳,是当前格式化的时间:2017-8-9 11:1 ...

  8. Ubuntu下部分Java软件字体渲染问题解决方法

    On ubuntu or in general Linux OS, fonts in some Java software(like Geogebra, Arduino) looks terriabl ...

  9. 20155219付颖卓 Exp3 免杀原理与实践

    1.基础问题回答 (1)杀软是如何检测出恶意代码的? 杀毒软件有一个病毒的特征码库,通过识别恶意代码的特征码或者特征片段检测恶意代码 杀毒软件通过动态检测对象文件的行为来识别恶意代码,如果他的行为在一 ...

  10. String对象的属性和方法

    String对象的属性和方法   创建字符串的两种方法: 1.直接量:var str = ""; 2.字符串对象创建: new String(""); Stri ...