2021.08.24,我开始了C#入门教程的编写。以开发《私人日记》产品为例,基于.net 5,进行winform端的开发。到2021.10.10结束,一共做了26节,功能已初步完成,代码同步在gitee,感兴趣的可点 从零开始用C#做产品系列教程索引(.netcore winform)? 了解更多。
按原计划:
- 第一阶段用C# + .net core实现winform的开发;(已完成)
- 第二阶段用C# + .net core实现web网站的开发;
- 第三阶段用C# + .net core实现跨平台多端(Windows、苹果、安卓)的开发;
通过这三个阶段,让大家来体验一下C#的无所不能。
架构选型
在完成了第一阶段后,经过近半个月的休整,今天起开始第二阶段的教程,采用c#+.net5来实现。然而对技术架构的选型,说起来却是一波三折。
因为我是一名独立开发者,专门做自己的产品,我所做的web基本都是产品功能与网站的结合,并且也不需要团队配合,所以一直以来我的web应用都是用asp.net + framework + webform来开发,感觉webform方式没什么不好,单人开发起来很高效。
开始入手教程后,看到微软推出了blazor,感觉这个东西比较有趣,写前端可以像写后端一样,关键是可以不再用代码烂得要命的javascript,所以最初的计划是用blazor。但是实际用下来,感觉现在还是不大成熟,比如这个私人笔记项目,分类树控件没有,还可以勉强自己写一个;可是第三方文本编辑器自己写就不现实了,网上搜到的基本都是要付费的,所以blazor就只能暂时先放一放了。
以我个人观点来看,如果不用blazor,那用webform是最优方案:
- 1、webform比较成熟,服务端控件丰富,开发起来会很快;
- 2、我对webform比较熟悉,比较做了10多年了,有些经验可以分享给大家;
唯一不好的就是这个技术比较老,大家可能没什么兴趣学习。
现在流行的都是mvc开发模式,这种在我看来唯一的好处就是解耦,进而更适合团队开发,但对独立开发者并不是很友好:
- 1、明明一个页面能搞定的事情要拆分成几个步骤来完成;
- 2、没有了服务端控件,这就导致开发者要么需要自己写,要么使用第三方控件,增加了开发量;
- 3、需要大量使用javascript来实现服务端与客户端的交互,比较繁琐;
以上3点原因导致个人开发效率会降低很多,这也是我一直没有动力学习mvc模式的原因。
本来我是想继续用webform来继续做第二阶段教程的, 可是当我用vs2019新建网站应用时,发现.net5已经完全不支持webform的形式了,如果想用webform就必须选择framework,这就意味着我们第一阶段用.net5积累的类库就得重构了。
所以现在面临的问题是:
- 用framework:没人看、重构;
- 用mvc:对独立开发者并不高效、我个人对mvc开发没有积累,可能影响教程质量;
两难时刻,我想教程最终是给大家看的,还是把选择权交给大家吧。于是同时在QQ群和头条发起了投票。来看下大家的投票结果:
头条的投票结果:
QQ群的投票结果:
明显mvc的模式占优势,那就没什么可说的了,硬着头皮也要上了。
想想这样也好,逼着自己学习一些新的内容,并且之前写的类库不需要重构了,也基本能按照预定的计划顺利执行了。
另外,作为一个没学过mvc的写出的mvc教程,可能更接地气一些,至少能以一个初学者的角度让教程更容易理解。
不过话说回来,虽然采用的是mvc模式,但具体开发我仍然会以独立开发者的身份来看待,我讲究的是单兵作战,不是团队合作,所以我并不会完全遵从mvc的开发模式,这点需要大家有所了解。
好了,前因交待到此。我们正式开启新的教程。开始之前,需要提醒第一次看到此文的读者,此教程的一些类库需要第一阶段教程的积累,在此文开始之前,我们已经有了一部分的代码积累了:
刚刚刷到此文的,建议先从第一阶段教程看起。
项目名称
本阶段我把项目名称稍微调整了一下,由《私人日记》改成了《私人笔记》,感觉笔记比日记包含的内容更丰富些。
web开发的难点
winform相对来说更简单些,只需要关心windows系统就可以;
web开发相对来说就要复杂些了。需要考虑两方面:服务端和客户端。服务端就是服务器操作系统,客户端就是浏览器,也就是所谓的后端与前端。后端像我们这种小网站项目就相对简单些了,不需要考虑高并发的情况,只要处理好逻辑基本就够了;前端则稍微复杂些,基本的:html控制结构,css来控制效果,javascript来控制逻辑,然而最复杂的当属javascript。主要体现在以下:
1)复杂控件的使用
如树、表格、分页、编辑器等。自己编写需要花费相当长时间,效果也并不理想。一般都是使用第三方类库。然而这些类库的功能、使用方法、版权都不统一,给开发者造成了大量的困扰。
2)服务端与客户端的交互
比如在分类树上做一个添加操作,需要同时在前端和后端操作才可以,逻辑一般是先通过js提交到后端,通过返回值判断成功添加后再向前端插入节点。这一切都需要用javascript来控制。
相信以上两点因素,会让一些winform开发者们头痛不已。其实如果是商业开发,还是建议找个收费的第三方库,这样会大幅提高开发效率。但我们现在是做教程,不可能要每个同学都去买一份授权才能体验,所以就放弃这条路了。即便用到第三方库,也都会使用免费的,开发效率和效果放在次要位置,以大家能了解、掌握知识为主。
下面开始切入正题。由于今天是开篇,所以内容相对轻松,我们只需要创建一个Web应用,然后能跑起来就算过关。
1、新建web应用
打开vs2019,打开我们阔别已久的Diary解决方案
解决方案资源管理器视图:解决方案右键->添加->新建项目
过滤选项,依次选择c#、windows、web,然后选asp.net core web应用,这里一定不要选错了,不然我们说的可能就不是一个东西了。
然后下一步,我取名为Diary.Web,继续下一步
这里考虑到就是自己的小网站,没有https的要求,所以勾掉。
- 启用Docker暂时没这个需要,不需要勾选;
- Enable Razor runtime compilation,运行Razor运行时编译,就是类似动态脚本编译,暂不需要;
然后创建。
稍等片刻,当我们看到这个画面的时候,一个web应用就创建好了。
2、运行web应用
接下来我们需要运行看下效果。首先在解决方案资源管理器视图,Diary.Web项目上点鼠标右键,选设为启动项目。
这个意思就是默认我启动web应用,而不是之前的Diary.Win了。看到Diary.Web变成黑色,就是切换成功了。
然后这时,按F5,稍等片刻,你会看到这样的画面:
OK,我们的网站应用就创建成功了。
今天开篇,所以就先不多讲了。最近开始了新产品的研发,外加我本身对.net core开发web也处于摸索阶段,可能没有办法像之前一样两天一更,不过我会在尽可能的情况下抽出时间,请关注我以获得第一时间的更新。
----------------------------------------------------
本教程项目源码已作为开源项目加入到Gitee,代码内容会随教程实时更新,大家有兴趣的话可以关注我,以获得最及时的更新。私信:
私人日记 可以获取相关链接;
大家阅读过程中有哪些看不懂或未尽兴的地方,可以在评论区留言,我会先记下来在后续的教程中找机会再说。
教程有帮助的话请大家帮忙关注、转发、扩散,能不能开专栏还需要你们的支持!