一起谈.NET技术,DotNetNuke 5 C#版本解读之--架构介绍

简介: 整体上DNN5和其它比较大的企业级应用系统一样分为web服务器和数据库服务器。Web服务器包括表现层,商业逻辑层和数据访问层,而数据库服务器主要是数据层。如下图:         首先给大家介绍下DNN的表现层,上图中的Presentation部分:      表现层主要包含如下几个部分:      1.web forms : 整个DNN主要的就是哪个default.aspx页面来展示内容。

      整体上DNN5和其它比较大的企业级应用系统一样分为web服务器和数据库服务器。Web服务器包括表现层,商业逻辑层和数据访问层,而数据库服务器主要是数据层。如下图:

  

      首先给大家介绍下DNN的表现层,上图中的Presentation部分:

      表现层主要包含如下几个部分:

      1.web forms : 整个DNN主要的就是哪个default.aspx页面来展示内容。它是整个系统的入口点。当某个动作发生时,它会动态的加载表现层需要显示的内容。
      2.皮肤: default.aspx页面会为不同的页面加载它的皮肤。DNN皮肤更换非常灵活,这是它很大的一个优点。皮肤的基类是在DotNetNuke.UI.Skins这个命名空间。最基本的类是Skin.cs这个类,如下图:


  

 

      后面的文章里我将会和大家仔细来研究皮肤这部分的代码如何来加载html皮肤文件的。

      1.Panes: Pane这个类是在DNN 5加进来的。一个皮肤文件可以包含很多个pane。
      2.容器:每个Panel上面都会有来加载DNN模块,页面或者是portal的容器。容器的基类是在DotNetNuke.UI.Containers命名空间下,如下图:
  

      1.模块(Module):每个模块至少有一个用户控件(.ascx文件)。这个控件会被load在容器里面。DNN所有的模块都在文件夹DesktopModules/…下面。


 

      1.客户端js脚本:大部分的js脚本文件都放在js文件夹下,dnn允许一些模块去包含和引用js文件。比如DNNMenu控件就用到dnnmenu.js。皮肤用的js文件就需要放在皮肤的安装目录下,自定义模块用到的js文件放在自定义模块的目录下。

      下面我们来串一下DNN的表现层是如何工作的:

      当客户端访问DNN的portal时,会看到default.aspx页面,default.aspx页面的后台代码default.aspx.cs文件会加载当前页面的皮肤,皮肤必须是个继承了DotNetNuke.UI.Skins.Skin这个基类的用户自定义控件。

      首先皮肤这个对象会针对皮肤文件中每个文本区域创建一个Pane对象,并且把它们放在一个大的容器中。皮肤对象会迭代当前portal的所有module。接下来皮肤对象会把这些module传给适当的一个Pane来展现出来。如果一个Pane有两个或两个以上的module,那么这个pane将会生成一个大的容器来存放这些module。

      接下来每个Pane将会决定该给它的module使用哪种类型的container。Pane对象为每个module初始化一个Container对象.

      上面动作完成后,Container对象就开始查找是否自己的module继承了DotNetNuke.Entities.Modules.iActionable这个接口,如果是,Container将会找到继承的那些动作,并顺序的把它们放到contianer中。

      皮肤,容器和模块都能有自己的css文件。在加载它们时,它们都会在自己的目录下查找是否有一个css文件,有的话就加载到客户端。

      上面的过程如果你看着不是很清晰,你可以通过下面这个图解来理解:

 

      DNN的逻辑表现层介绍

      如文章开始的图示,逻辑表现层主要有如下几部分:

1.Localization :也就是传说中的区域化。可以选择不同的语言。
2.Caching: 通过使用缓存让页面在客户端的响应速度更快。
3.Exception management: 异常处理。一个好的系统异常处理也是必须。这样可以让用户更加舒服。
4.Event logging: 日志的记录。。。。
5.Personalization: 个性化的设定。
6.Search: 搜索
7.Installation and upgrades:很好的升级和安装模式。
8.Membership,roles and profile: 角色管理等。
9.Security permissions: 安全许可。

      所有的这些逻辑表现层的实现都是使用DNN中非常出色一个模式:CBO and CBO controller。(可能你对这个比较迷惑,没关系,我会在接下来的文章中着重介绍一下。这里你先理解大致的框架就行了)。

      CBO本质上是对整个应用程序中某个对象的一个展示。

      在DNN中,一个CBO是一个DotNetNuke.Service的实体。目前DNN5中所有的CBO如下:

 

 

      上面开始介绍逻辑表现层包含的那几部分,我们在CBO里都可以找得到。

      CBO就好比在MVC里德Model部分,它一般都会是一个只有属性的类,而对它执行操作的那个CBO control就好比MVC中的controller类。

       如果这么理解的话CBO模式其实算是老模式了,但是这里比较奇特的是一个CBO Hydrator的类。它的位置:

 

      仔细去看它的代码你会发现它的作用就是把用到的对象的属性放到缓存中,当某个对象被再次用到时,所有的属性值直接从缓存里得到,对服务器来说压力减少了。图示:

 

 

      DNN的数据访问层介绍

      数据访问层就是为了能够向商业逻辑层提供数据。DNN的数据访问层使用的是Provider Model模式。

      Data Provider是DNN中第一个成型的Provider Model模式的实例。当初DNN只是支持SQL Server数据库,但是很多人都要求它能够支持其它的数据存储,这样就需要一个扩展性非常好的数据访问层,也就引入了Provider Model模式。如下图:

 

 

      因为Provider Model能够让一些特性更加独体,不会依赖DNN的API,所以DNN大部分的CBO的数据提供都是Provider Model来进行的。主要包括如下一些Provider:

 

 

 

      以上基本上介绍了DNN的整体架构,当然由于我的表达能力和你本身可能刚接触DNN的缘故,你会很迷惑,甚至觉得没啥用,不过我希望我接下来拆开每一部分来介绍DNN能够让你更加的了解DNN。也希望你可以去codeplex上下载DNN的C#来体验下。接下来都会是结合代码来进行的,所以建议你去下载DNN 5.4.4 C#版本。

      这里再补充一下DNN的命名空间介绍:

DotNetNuke.Common: 整个应用程序中任何地方都可能用到的类的集合。

DotNetNuke.Data: 所有需要于数据库交互的地方都会用到的类的集合。

DotNetNuke.Entities: 所有显示和管理Host,Portals,TabsUsers和Modules的部分都会用到的类的集合。

DotNetNuke.FrameWork: 一些最基本的类的集合。例如Usercontrol的基类,Page的基类等

DotNetNuke.Security: 用户权限管理部分的类的集合。包括认证,以及页面的访问权限管理等。

DotNetNuke.UI:用户接口的类的集合。例如:DotNetNuke.UI.Skins.skin,DotNetNuke.UI.Containers.Container等等。

目录
相关文章
|
人工智能 运维 算法
基于 C# 深度优先搜索算法的局域网集中管理软件技术剖析
现代化办公环境中,局域网集中管理软件是保障企业网络高效运行、实现资源合理分配以及强化信息安全管控的核心工具。此类软件需应对复杂的网络拓扑结构、海量的设备信息及多样化的用户操作,而数据结构与算法正是支撑其强大功能的基石。本文将深入剖析深度优先搜索(Depth-First Search,DFS)算法,并结合 C# 语言特性,详细阐述其在局域网集中管理软件中的应用与实现。
281 3
|
8月前
|
监控 Cloud Native 测试技术
.NET技术深度解析:现代企业级开发指南
每日激励:“不要一直责怪过去的自己,他曾经站在雾里也很迷茫”。我是蒋星熠Jaxonic,一名在代码宇宙中探索的极客旅人。从.NET Framework到.NET 8,我深耕跨平台、高性能、云原生开发,践行领域驱动设计与微服务架构,用代码书写技术诗篇。分享架构演进、性能优化与AI融合前沿,助力开发者在二进制星河中逐光前行。关注我,共探技术无限可能!
.NET技术深度解析:现代企业级开发指南
|
8月前
|
人工智能 API 数据库
Semantic Kernel .NET 架构学习指南
本指南系统解析微软Semantic Kernel .NET架构,涵盖核心组件、设计模式与源码结构,结合实战路径与调试技巧,助你从入门到贡献开源,掌握AI编排开发全栈技能。
909 2
|
8月前
|
开发框架 安全 .NET
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
.NET Framework是Windows平台的开发框架,包含CLR和FCL,支持多种语言开发桌面、Web应用。常用版本有3.5、4.5.2、4.8.1,系统可同时安装多个版本,确保软件兼容运行。
1860 0
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
|
开发框架 前端开发 .NET
一个适用于 .NET 的开源整洁架构项目模板
一个适用于 .NET 的开源整洁架构项目模板
357 26
|
缓存 监控 算法
基于 C# 网络套接字算法的局域网实时监控技术探究
在数字化办公与网络安全需求增长的背景下,局域网实时监控成为企业管理和安全防护的关键。本文介绍C#网络套接字算法在局域网实时监控中的应用,涵盖套接字创建、绑定监听、连接建立和数据传输等操作,并通过代码示例展示其实现方式。服务端和客户端通过套接字进行屏幕截图等数据的实时传输,保障网络稳定与信息安全。同时,文章探讨了算法的优缺点及优化方向,如异步编程、数据压缩与缓存、错误处理与重传机制,以提升系统性能。
341 2
|
Web App开发 Linux C#
C# 网页截图全攻略:三种技术与 Chrome 路径查找指南
本文主要介绍了在 C# 中实现网页截图的几种技术及相关要点。涵盖了 PuppeteerSharp、Selenium 和 HtmlToImage 三种方式,分别阐述了它们的安装步骤及核心代码。同时,针对在 C# 中寻找 Windows 上 chrome.exe 路径这一问题,分析了未安装 Google Chrome 和已安装两种情况下的查找原因,并给出了相关参考链接,还列举了一系列与 C# 使用 Selenium、获取 chrome.exe 路径以及在 Linux 上部署相关的参考资料。
558 11
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
589 0
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
285 6