.NET Core实战项目之CMS 第十章 设计篇-系统开发框架设计
这两天比较忙,周末也在加班,所以更新的就慢了一点,不过没关系,今天我们就进行千呼万唤的系统开发框架的设计。不知道上篇关于架构设计的文章大家有没有阅读,如果阅读后相信一定对架构设计有了更近一部的理解,如果你没有阅读也希望大家能好好阅读一下!其实说白了,架构是为了应对软件系统复杂度而提出的一个解决方案,架构设计的最终目的也就是为了让复杂的问题简单化!今天我们就结合架构设计的思想来进行我们的CMS实战项目的架构设计,接着再设计下开发框架吧。如果你有其他看法或者见解欢迎加入我们的实战项目交流群637326624 跟大伙共同交流!
本文已收录至《》
作者:依乐祝
原文地址:
写在前面
仔细想想我们的这个极简CMS系统,可以说很简单,简单到都无须进行特殊的架构设计,只需按照你所熟悉的编码方式直接进行快速的编码实现即可,如果做得好的话,访问量上来了你再加一个缓存处理完全能够支撑一定的并发!如下图所示:我们前期先进行单体架构的实现,等后期分布式系列实战课程的时候再讲解如何进行分布式微服务架构的实现。
看到没有,标准的单体架构,只是在数据库层之前加了一个缓存的设计来应对一些并发的情况!既然架构设计确定了,那么我们就进行开发框架的搭建吧!如果架构的复杂点的话,可能涉及到数据库集群,站点集群及负载均衡,可是我们完全没必要那样玩!一个阶段设计一个阶段的架构,要知道天猫也不是刚开始就架构的这么完善支持这么高的并发的!而是经过这么多次双十一的考验之后慢慢完成到今天这个能够支持每秒这么次并发的!说白了,架构是一个演变的过程,而并非设计的越复杂,越完善就表示架构设计的就越好的(有点拗口,自己理解下),而要结合实际,让需求来驱动架构。在分析设计阶段,需要考虑一定的人力与时间去"跳出代码,总揽全局",为业务和IT技术之间搭建一座"桥梁"。
CMS系统开发框架
话不多数,先看下我的项目结构截图吧!
本来想进行很复杂的框架的实现的,仿照DDD的思想进行开发框架的搭建,后来想想何必呢,这么简单的系统搞得那么复杂,严重影响开发效率,反而得不偿失。后来经过深思熟虑后精简精简再精简,斟酌斟酌再斟酌后就有了上面这样的项目结构。乍一看10个项目,是不是吓得马上就要关闭网页了呢?下面我会给你详细讲解每一个项目的作用以及所要实现的功能。
其实明眼人一看这个结构就已经知道了每个模块所要实现的功能了,这样的分层设计可谓简单的都不需要我过多介绍,你都能明白每一个项目是用来干什么的(明白人也可以进行项目的再度融合,甚至简单粗暴的合并到一个项目里面,不过本人更喜欢这种分层的设计感觉结构更清晰)。可是我这里还是要啰嗦两句给你介绍下:
既然微软已经在前两天将正式版的.NET Core SDK升级到了2.2的版本,那么我们的CMS系统就用.NET Core2.2进行搭建吧!当然,你在练习的时候也可以使用2.1进行,没有强制要求。
注意:ASP.NET Core2.2对VisualStudio有一定的要求必须是2017的高版本才能用。其目前的版本是15.8.4 总之尽量不要低于我这个版本,我正准备升级呢!
-
UI
用户UI层:这个就是我们CMS系统所要呈现的用户界面,而我们得CMS系统又包含后台管理模块以及前台网站模块,因此这个解决方案文件夹下面有两个ASP.NET Core网站项目,留个思考题给你吧,猜猜看哪个项目是后台管理模块,哪个项目是前台网站模块呢?把你的答案写在留言区或者加群跟大伙讨论下吧!
-
Application
应用层:这个层提供对用户界面的接口访问,用户界面层的两个模块如果想跟数据库交互都需要通过这个层来进行。这个应用层起到用户界面跟数据库操作进行解耦的作用。
-
Repositonry
仓储层:这个层主要就是跟数据库的交互了,任何跟数据库有关的操作都在这层来进行实现,看了上面的图相信你已经猜到了,前期我只是实现SqlServer的仓储实现,至于其他数据库的实现你只需要再建一个Czar.Cms.Repository.数据库名 的仓储实现就可以了!这里我们也是采用依赖抽象而不依赖具体实现所以方便后期的扩展。
-
Entity
实体对象层:这个层感觉有点多余,完全可以把这个界面融合到其他层,但是我并没有这样做,目的也是让结构更清晰,更容易理解。这里有两个项目,相信一路看教程过来的朋友一定还记得我的第二篇文章《 》中用的是ViewModel而不是直接用实体对象了!因为实际引用中可能我们页面中需要的数据跟我们数据库中的数据并不完全一样的,而且,有时候我们页面中可能包含了更多地信息,这时候我们怎么往视图中传递数据呢?这时候我们就有了ViewModel的概念。比方说:我们的有一个订单详细页要同时显示订单的信息,以及订单对应的商品列表,这时候怎么办呢?我们用一个ViewModel包含了订单实体,并且包含了商品的列表就可以更方便的把数据传递到视图里面了!
-
Infrastructure
基础设施层:这个层也是我们代码的核心层了,我们会在这里实现很多我们通用的方法,比方说帮助类,对字符串String进行一些扩展,序列化与反序列化,HTTP请求,过滤器,日志功能,中间件的扩展等等。总之这个里面包含了Czar.Cms的所有核心。
-
Test
测试层:这个层不用多说了吧,就是对系统进行测试的!里面包含单元测试以及集成测试!
相信通过我上面的介绍你一定会感觉到这个CMS系统的开发框架的层次非常清晰了吧!其实作为新手时期的我也是,看到项目太多的话就从心里面害怕,其实大伙大可不必,看到让你害怕的事情就要勇敢的面对它,战胜它,一定要跳出自己的舒适区。
GitHub与码云上的项目开源地址
今天我们搭建的这个项目的结构我已经同步更新到Github以及码云上了,有兴趣的朋友可以下载查看!觉得不错的欢迎Star
GitHub:https://github.com/yilezhu/Czar.Cms
码云:https://gitee.com/yilezhu/Czar.Cms
如果你觉得这个系列对您有所帮助的话,欢迎以各种方式进行支持,最简单有效的就是博客园给个推荐,GitHub给个Star。同时今天我申请了一个DotNetCore实战的订阅号,有兴趣的朋友可以微信关注下:
总结
本文我首先带着大家理解了一下架构设计的目的,以及架构设计的演变性。接着对我们这个ASP.NET Core的CMS实战项目进行了开发框架的设计。并对每个项目的所要实现的功能以及各自的职责进行了相关的介绍!相信你已经能够清楚的明白了这个架构的思想!到此,设计篇已经结束,接下来就让我们进行真正的项目开发吧即开发篇的开始!