这两天比较忙,周末也在加班,因此更新的就慢了一点,不过不要紧,今天咱们就进行千呼万唤的系统开发框架的设计。不知道上篇关于架构设计的文章你们有没有阅读,若是阅读后相信必定对架构设计有了更近一部的理解,若是你没有阅读也但愿你们能好好阅读一下!其实说白了,架构是为了应对软件系统复杂度而提出的一个解决方案,架构设计的最终目的也就是为了让复杂的问题简单化!今天咱们就结合架构设计的思想来进行咱们的CMS实战项目的架构设计,接着再设计下开发框架吧。若是你有其余见解或者看法欢迎加入咱们的实战项目交流群637326624 跟大伙共同交流!html
本文已收录至《.NET Core实战项目之CMS 第一章 入门篇-开篇及整体规划》git
做者:依乐祝github
仔细想一想咱们的这个极简CMS系统,能够说很简单,简单到都无须进行特殊的架构设计,只需按照你所熟悉的编码方式直接进行快速的编码实现便可,若是作得好的话,访问量上来了你再加一个缓存处理彻底可以支撑必定的并发!以下图所示:咱们前期先进行单体架构的实现,等后期分布式系列实战课程的时候再讲解如何进行分布式微服务架构的实现。缓存
看到没有,标准的单体架构,只是在数据库层以前加了一个缓存的设计来应对一些并发的状况!既然架构设计肯定了,那么咱们就进行开发框架的搭建吧!若是架构的复杂点的话,可能涉及到数据库集群,站点集群及负载均衡,但是咱们彻底不必那样玩!一个阶段设计一个阶段的架构,要知道天猫也不是刚开始就架构的这么完善支持这么高的并发的!而是通过这么屡次双十一的考验以后慢慢完成到今天这个可以支持每秒这么次并发的!说白了,架构是一个演变的过程,而并不是设计的越复杂,越完善就表示架构设计的就越好的(有点拗口,本身理解下),而要结合实际,让需求来驱动架构。在分析设计阶段,须要考虑必定的人力与时间去"跳出代码,总揽全局",为业务和IT技术之间搭建一座"桥梁"。微信
话很少数,先看下个人项目结构截图吧!架构
原本想进行很复杂的框架的实现的,仿照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
实体对象层:这个层感受有点多余,彻底能够把这个界面融合到其余层,可是我并无这样作,目的也是让结构更清晰,更容易理解。这里有两个项目,相信一路看教程过来的朋友必定还记得个人第二篇文章《.NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了 》中用的是ViewModel而不是直接用实体对象了!由于实际引用中可能咱们页面中须要的数据跟咱们数据库中的数据并不彻底同样的,并且,有时候咱们页面中可能包含了更多地信息,这时候咱们怎么往视图中传递数据呢?这时候咱们就有了ViewModel的概念。比方说:咱们的有一个订单详细页要同时显示订单的信息,以及订单对应的商品列表,这时候怎么办呢?咱们用一个ViewModel包含了订单实体,而且包含了商品的列表就能够更方便的把数据传递到视图里面了!
Infrastructure
基础设施层:这个层也是咱们代码的核心层了,咱们会在这里实现不少咱们通用的方法,比方说帮助类,对字符串String进行一些扩展,序列化与反序列化,HTTP请求,过滤器,日志功能,中间件的扩展等等。总之这个里面包含了Czar.Cms的全部核心。
Test
测试层:这个层不用多说了吧,就是对系统进行测试的!里面包含单元测试以及集成测试!
相信经过我上面的介绍你必定会感受到这个CMS系统的开发框架的层次很是清晰了吧!其实做为新手时期的我也是,看到项目太多的话就从内心面惧怕,其实大伙大可没必要,看到让你惧怕的事情就要勇敢的面对它,打败它,必定要跳出本身的温馨区。
今天咱们搭建的这个项目的结构我已经同步更新到Github以及码云上了,有兴趣的朋友能够下载查看!以为不错的欢迎Star
GitHub:https://github.com/yilezhu/Czar.Cms
码云:https://gitee.com/yilezhu/Czar.Cms
若是你以为这个系列对您有所帮助的话,欢迎以各类方式进行支持,最简单有效的就是博客园给个推荐,GitHub给个Star。同时今天我申请了一个DotNetCore实战的订阅号,有兴趣的朋友能够微信关注下:
本文我首先带着你们理解了一下架构设计的目的,以及架构设计的演变性。接着对咱们这个ASP.NET Core的CMS实战项目进行了开发框架的设计。并对每一个项目的所要实现的功能以及各自的职责进行了相关的介绍!相信你已经可以清楚的明白了这个架构的思想!到此,设计篇已经结束,接下来就让咱们进行真正的项目开发吧即开发篇的开始!