.NET Core实战项目之CMS 第十章 设计篇-系统开发框架设计

简介: 这两天比较忙,周末也在加班,所以更新的就慢了一点,不过没关系,今天我们就进行千呼万唤的系统开发框架的设计。不知道上篇关于架构设计的文章大家有没有阅读,如果阅读后相信一定对架构设计有了更近一部的理解,如果你没有阅读也希望大家能好好阅读一下!其实说白了,架构是为了应对软件系统复杂度而提出的一个解决方案,架构设计的最终目的也就是为了让复杂的问题简单化!今天我们就结合架构设计的思想来进行我们的CMS实战项目的架构设计,接着再设计下开发框架吧。

这两天比较忙,周末也在加班,所以更新的就慢了一点,不过没关系,今天我们就进行千呼万唤的系统开发框架的设计。不知道上篇关于架构设计的文章大家有没有阅读,如果阅读后相信一定对架构设计有了更近一部的理解,如果你没有阅读也希望大家能好好阅读一下!其实说白了,架构是为了应对软件系统复杂度而提出的一个解决方案,架构设计的最终目的也就是为了让复杂的问题简单化!今天我们就结合架构设计的思想来进行我们的CMS实战项目的架构设计,接着再设计下开发框架吧。如果你有其他看法或者见解欢迎加入我们的实战项目交流群637326624 跟大伙共同交流!

本文已收录至《.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

作者:依乐祝

原文地址:https://www.cnblogs.com/yilezhu/p/10094357.html

写在前面

仔细想想我们的这个极简CMS系统,可以说很简单,简单到都无须进行特殊的架构设计,只需按照你所熟悉的编码方式直接进行快速的编码实现即可,如果做得好的话,访问量上来了你再加一个缓存处理完全能够支撑一定的并发!如下图所示:我们前期先进行单体架构的实现,等后期分布式系列实战课程的时候再讲解如何进行分布式微服务架构的实现。

1544359198075

看到没有,标准的单体架构,只是在数据库层之前加了一个缓存的设计来应对一些并发的情况!既然架构设计确定了,那么我们就进行开发框架的搭建吧!如果架构的复杂点的话,可能涉及到数据库集群,站点集群及负载均衡,可是我们完全没必要那样玩!一个阶段设计一个阶段的架构,要知道天猫也不是刚开始就架构的这么完善支持这么高的并发的!而是经过这么多次双十一的考验之后慢慢完成到今天这个能够支持每秒这么次并发的!说白了,架构是一个演变的过程,而并非设计的越复杂,越完善就表示架构设计的就越好的(有点拗口,自己理解下),而要结合实际,让需求来驱动架构。在分析设计阶段,需要考虑一定的人力与时间去"跳出代码,总揽全局",为业务和IT技术之间搭建一座"桥梁"。

CMS系统开发框架

话不多数,先看下我的项目结构截图吧!

1544368326507

本来想进行很复杂的框架的实现的,仿照DDD的思想进行开发框架的搭建,后来想想何必呢,这么简单的系统搞得那么复杂,严重影响开发效率,反而得不偿失。后来经过深思熟虑后精简精简再精简,斟酌斟酌再斟酌后就有了上面这样的项目结构。乍一看10个项目,是不是吓得马上就要关闭网页了呢?下面我会给你详细讲解每一个项目的作用以及所要实现的功能。

其实明眼人一看这个结构就已经知道了每个模块所要实现的功能了,这样的分层设计可谓简单的都不需要我过多介绍,你都能明白每一个项目是用来干什么的(明白人也可以进行项目的再度融合,甚至简单粗暴的合并到一个项目里面,不过本人更喜欢这种分层的设计感觉结构更清晰)。可是我这里还是要啰嗦两句给你介绍下:

既然微软已经在前两天将正式版的.NET Core SDK升级到了2.2的版本,那么我们的CMS系统就用.NET Core2.2进行搭建吧!当然,你在练习的时候也可以使用2.1进行,没有强制要求。

注意:ASP.NET Core2.2对VisualStudio有一定的要求必须是2017的高版本才能用。其目前的版本是15.8.4 总之尽量不要低于我这个版本,我正准备升级呢!

  1. UI

用户UI层:这个就是我们CMS系统所要呈现的用户界面,而我们得CMS系统又包含后台管理模块以及前台网站模块,因此这个解决方案文件夹下面有两个ASP.NET Core网站项目,留个思考题给你吧,猜猜看哪个项目是后台管理模块,哪个项目是前台网站模块呢?把你的答案写在留言区或者加群跟大伙讨论下吧!

  1. Application

应用层:这个层提供对用户界面的接口访问,用户界面层的两个模块如果想跟数据库交互都需要通过这个层来进行。这个应用层起到用户界面跟数据库操作进行解耦的作用。

  1. Repositonry

仓储层:这个层主要就是跟数据库的交互了,任何跟数据库有关的操作都在这层来进行实现,看了上面的图相信你已经猜到了,前期我只是实现SqlServer的仓储实现,至于其他数据库的实现你只需要再建一个Czar.Cms.Repository.数据库名 的仓储实现就可以了!这里我们也是采用依赖抽象而不依赖具体实现所以方便后期的扩展。

  1. Entity

实体对象层:这个层感觉有点多余,完全可以把这个界面融合到其他层,但是我并没有这样做,目的也是让结构更清晰,更容易理解。这里有两个项目,相信一路看教程过来的朋友一定还记得我的第二篇文章《.NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了 》中用的是ViewModel而不是直接用实体对象了!因为实际引用中可能我们页面中需要的数据跟我们数据库中的数据并不完全一样的,而且,有时候我们页面中可能包含了更多地信息,这时候我们怎么往视图中传递数据呢?这时候我们就有了ViewModel的概念。比方说:我们的有一个订单详细页要同时显示订单的信息,以及订单对应的商品列表,这时候怎么办呢?我们用一个ViewModel包含了订单实体,并且包含了商品的列表就可以更方便的把数据传递到视图里面了!

  1. Infrastructure

基础设施层:这个层也是我们代码的核心层了,我们会在这里实现很多我们通用的方法,比方说帮助类,对字符串String进行一些扩展,序列化与反序列化,HTTP请求,过滤器,日志功能,中间件的扩展等等。总之这个里面包含了Czar.Cms的所有核心。

  1. Test

测试层:这个层不用多说了吧,就是对系统进行测试的!里面包含单元测试以及集成测试!

相信通过我上面的介绍你一定会感觉到这个CMS系统的开发框架的层次非常清晰了吧!其实作为新手时期的我也是,看到项目太多的话就从心里面害怕,其实大伙大可不必,看到让你害怕的事情就要勇敢的面对它,战胜它,一定要跳出自己的舒适区。

GitHub与码云上的项目开源地址

今天我们搭建的这个项目的结构我已经同步更新到Github以及码云上了,有兴趣的朋友可以下载查看!觉得不错的欢迎Star
GitHub:https://github.com/yilezhu/Czar.Cms
码云:https://gitee.com/yilezhu/Czar.Cms
如果你觉得这个系列对您有所帮助的话,欢迎以各种方式进行支持,最简单有效的就是博客园给个推荐,GitHub给个Star。

总结

本文我首先带着大家理解了一下架构设计的目的,以及架构设计的演变性。接着对我们这个ASP.NET Core的CMS实战项目进行了开发框架的设计。并对每个项目的所要实现的功能以及各自的职责进行了相关的介绍!相信你已经能够清楚的明白了这个架构的思想!到此,设计篇已经结束,接下来就让我们进行真正的项目开发吧即开发篇的开始!

目录
相关文章
|
10天前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
10天前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
29 3
|
15天前
|
JSON 安全 数据安全/隐私保护
从0到1搭建权限管理系统系列三 .net8 JWT创建Token并使用
【9月更文挑战第22天】在.NET 8中,从零开始搭建权限管理系统并使用JWT(JSON Web Tokens)创建Token是关键步骤。JWT是一种开放标准(RFC 7519),用于安全传输信息,由头部、载荷和签名三部分组成。首先需安装`Microsoft.AspNetCore.Authentication.JwtBearer`包,并在`Program.cs`中配置JWT服务。接着,创建一个静态方法`GenerateToken`生成包含用户名和角色的Token。最后,在控制器中使用`[Authorize]`属性验证和解析Token,从而实现身份验证和授权功能。
|
1月前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
|
1月前
|
Linux C# Android开发
一个开源、跨平台的.NET UI框架 - Avalonia UI
一个开源、跨平台的.NET UI框架 - Avalonia UI
|
1月前
|
机器学习/深度学习 人工智能 算法
ML.NET:一个.NET开源、免费、跨平台的机器学习框架
ML.NET:一个.NET开源、免费、跨平台的机器学习框架
|
1月前
|
消息中间件 开发框架 前端开发
YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架
YuebonCore:基于.NET8开源、免费的权限管理及快速开发框架
|
1月前
|
JSON 测试技术 C#
C#/.NET/.NET Core优秀项目框架推荐榜单
C#/.NET/.NET Core优秀项目框架推荐榜单
|
2月前
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
74 0
|
1月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
28 7