首页 > 其他分享 >实战设计模式解耦项目网络层框架

实战设计模式解耦项目网络层框架

时间:2023-06-22 14:38:49浏览次数:39  
标签:实战 架构 项目 数据库 网络层 NET 设计模式 CMS 我们



作者:依乐祝


写在前面

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

实战设计模式解耦项目网络层框架_编程语言

1544359198075

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

CMS系统开发框架

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

实战设计模式解耦项目网络层框架_java_02

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网站项目,留个思考题给你吧,猜猜看哪个项目是后台管理模块,哪个项目是前台网站模块呢?把你的答案写在留言区或者加群跟大伙讨论下吧!
  2. Application
    应用层:这个层提供对用户界面的接口访问,用户界面层的两个模块如果想跟数据库交互都需要通过这个层来进行。这个应用层起到用户界面跟数据库操作进行解耦的作用。
  3. Repositonry
    仓储层:这个层主要就是跟数据库的交互了,任何跟数据库有关的操作都在这层来进行实现,看了上面的图相信你已经猜到了,前期我只是实现SqlServer的仓储实现,至于其他数据库的实现你只需要再建一个Czar.Cms.Repository.数据库名 的仓储实现就可以了!这里我们也是采用依赖抽象而不依赖具体实现所以方便后期的扩展。
  4. Entity
    实体对象层:这个层感觉有点多余,完全可以把这个界面融合到其他层,但是我并没有这样做,目的也是让结构更清晰,更容易理解。这里有两个项目,相信一路看教程过来的朋友一定还记得我的第二篇文章《.NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了 》中用的是ViewModel而不是直接用实体对象了!因为实际引用中可能我们页面中需要的数据跟我们数据库中的数据并不完全一样的,而且,有时候我们页面中可能包含了更多地信息,这时候我们怎么往视图中传递数据呢?这时候我们就有了ViewModel的概念。比方说:我们的有一个订单详细页要同时显示订单的信息,以及订单对应的商品列表,这时候怎么办呢?我们用一个ViewModel包含了订单实体,并且包含了商品的列表就可以更方便的把数据传递到视图里面了!
  5. Infrastructure
    基础设施层:这个层也是我们代码的核心层了,我们会在这里实现很多我们通用的方法,比方说帮助类,对字符串String进行一些扩展,序列化与反序列化,HTTP请求,过滤器,日志功能,中间件的扩展等等。总之这个里面包含了Czar.Cms的所有核心。
  6. Test
    测试层:这个层不用多说了吧,就是对系统进行测试的!里面包含单元测试以及集成测试!

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

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

今天我们搭建的这个项目的结构我已经同步更新到Github以及码云上了,有兴趣的朋友可以下载查看!觉得不错的欢迎Star
GitHub:https://github.com/yilezhu/Czar.Cms
码云:https://gitee.com/yilezhu/Czar.Cms

总结

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


标签:实战,架构,项目,数据库,网络层,NET,设计模式,CMS,我们
From: https://blog.51cto.com/u_16163480/6534845

相关文章

  • web开发实战(1)
    目录hello,world打招呼当前日期hello,world<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>hello,world</title></head><body><div><p>你好,世界</p><......
  • Scala最新书籍-《函数式编程科学之Scala实战》pdf级随书代码分享
        这本书对函数式编程所需要的理论知识的系统性的阐述。本书从基本原理讲起,包含了所有详细地解释、推导和证明。读者需要通过长时间的精神集中和努力学习困难的概念。这本书需要一定的数学基础,至少对基础代数比较了解。        文末附本书最新pdf及随书代码下载地址......
  • 北京市政百姓信件分析实战
    目录北京市政百姓信件分析实战1.爬虫2.数据清洗3.导入数据4.导出到本地mysql5.可视化展示北京市政百姓信件分析实战1.爬虫importjsonimportrequestsimportdemjsonfrombs4importBeautifulSoupimportjiebaimportjieba.analyseasanalyseimportcsvkv={'H......
  • 完事后再聊应用场景,K8S调度实战:Node Affinity
    写在开篇NodeAffinity(节点亲和性)允许在节点级别上指定一些条件来控制Pod被调度到哪些节点上。它还有两种策略,本篇通过实战演示如何使用两种策略来控制Pod的调度。测试环境还是老样子,本次实战继续使用以下K8S集群环境进行:节点主机名IPMaster节点k8s-b-master192......
  • K8S调度:实战完nodeSelector后,再谈应用场景。
    Part1写在开篇nodeSelector是什么鬼?这么说吧,假设有一个K8S集群,其中有多个节点,并且想将一个特定的应用程序只部署在具有特定标签的节点上。这时候就可以在Pod的定义中添加nodeSelector字段,指定一个键值对,例如app:my-app。然后,K8S调度器将查找具有app=my-app标签的节点,并将该Pod调......
  • 性能提升30%!袋鼠云数栈基于 Apache Hudi 的性能优化实战解析
    ApacheHudi是一款开源的数据湖解决方案,它能够帮助企业更好地管理和分析海量数据,支持高效的数据更新和查询。并提供多种数据压缩和存储格式以及索引功能,从而为企业数据仓库实践提供更加灵活和高效的数据处理方式。在金融领域,企业可以使用Hudi来处理大量需要实时查询和更新的金......
  • 《LINQ实战》译者感言
    《LINQ实战》译者感言此刻您手中这本沉甸甸的书,虽然来得晚了一些,但仍旧是不可多得LINQ权威学习指南。在最近一年的工作中,我会经常用到LINQ。毫不夸张地说,我无法想象再回到没有LINQ的.NET日子会是怎样,我深深地折服于其给每个开发人员带来的方便和简化——LINQ在程序世......
  • 活学活用流行的JavaScript库——《JavaScript实战》
    媒体评论“本书并不像一本教材,畅读之后,你会觉得它就是一位讲课生动的老师,带领你遨游JavaScript海洋,把你推向技术风浪的前沿,同时又给了你一个功能完备的冲浪板,接下来就是你在风口浪尖上享受JavaScript高潮的时候了。”                  ......
  • Prototype和Scriptaculous圣经——《Ajax实战:Prototype与Scriptaculous篇》
    媒体评论“本书全面展示如何使用Prototype和Scriptaculous,让你可以专注于真正重要的事情:实现你的创意!”                  ——ThomasFuchs,Scriptaculous创始人,Wollzelle公司CTO “在Prototype和Scriptaculous方面的图书中,......
  • PHP Web 2.0开发实战
    如何使用ZendFramework、Smarty、Ajax创建一流的网站 “读完本书后,我发现自己对Web开发和MVC模式的理解都已经今非昔比……强烈推荐此书!”——Amazon.com “……一部极富启发性的PHP实战指导书,业界专家充分演示了如何使用ZendFramework、Smarty、A......