模块架构

  • 平台
  • Evoq内容
  • Evoq参与

尽管每个模块都提供一组不同的特性和功能,但模块之间有一些体系结构元素是共同的。大多数DNN模块是使用n层架构开发的。无论您构建的是Web Forms模块、MVC模块还是SPA模块,您都可以在您的模块中实现这些层中的大多数。


模块架构

数据访问层

DNN支持三种数据访问层(DAL)框架:DAL、DAL+和DAL2。这三种都基于相同的底层提供者模型,这使得DNN可以用于不同的数据库管理系统。

注意:DNN附带SQL Server数据库提供商。其他第三方数据库提供商可用于Oracle, MySQL和MS Access;然而,MySQL和MS Access提供商不再维护或支持。
DAL是一个完全抽象的实现,需要以下条件:
  • 定义数据层API的抽象数据提供程序类。
  • 对于您希望支持的每种数据库类型(通常只是SQL Server),这个抽象类的具体实现。
  • 数据库脚本,用于创建模块所需的存储过程、表和视图。

DAL+向核心平台添加了通用数据访问方法,以消除对抽象和具体数据提供程序类的需求。您仍然可以使用备用数据库,并且仍然必须提供必要的数据库脚本。

DAL2使用PetaPOCO Micro-ORM,这消除了编写存储过程的需要。DAL2提供了其他特性,包括集成缓存管理,这进一步简化了代码。

您可以使用任何数据访问方法,即使是DNN不直接支持的方法。您还可以在单个模块中使用多个DAL技术。

提示:对于大多数标准CRUD查询使用DAL2,对于可能需要性能调优的更复杂的查询使用DAL+。这种方法简化了开发,使您能够集中精力进行性能调优。

缓存层

数据库访问是web应用程序执行的最慢的操作之一。在许多系统中,数据以不同于它将被使用的格式存储。应用程序经常执行复杂的查询来过滤数据集,然后在使用之前更改结果的格式。如果数据库不是本地的,查询需要更长的时间,这取决于网络速度。数据库查询比使用内存缓存慢几个数量级。

缓存是理想的:
  • 任何计算成本高且在一段时间内产生相同结果的数据。
  • 对于用户子集或特定URL不变的任何数据段。

DNN通过缓存API提供内置缓存。如果使用DNN的DAL或DAL+ api,则实现Cache-Aside模式为了获得最佳性能。您可以使用代码中的属性来配置DAL2的内置缓存。

可以扩展缓存API以使用不同的缓存存储。缓存API提供的抽象确保模块无缝执行,而不管站点管理员安装了什么缓存提供程序。

提示:如果一个类将存储在缓存中,请标记它(序列化)以确保它被进程外缓存提供者正确地存储。
[Serializable]公共类MyInfoClass{//属性声明…}

业务逻辑层

大多数业务规则在业务逻辑层中实现。这些规则可以简单到验证数据,也可以复杂到跨多个后端系统编排工作流。该层还负责协调对缓存层和数据访问层的调用。

DNN提供了用于处理常见任务的api,如应用程序安全、文件存储、列表管理、事件日志记录和全文搜索。这些api是完全抽象和可扩展的,因此您可以只关注特定于模块的业务规则。

服务层

DNN提供了服务框架,您可以使用该框架快速定义web服务。服务框架提供了对服务方法中常见DNN实体的集成访问,以便您的服务可以确定正在调用哪个站点、发出请求的用户以及促进请求的模块。您还可以通过指定哪些应用程序和哪些用户可以访问您的服务端点来保护web服务。

表示层

表示层中的核心组件是模块控制.模块的每个惟一视图都注册为模块控件款清单

DNN api可以方便地访问任何模块控件,从而简化了模块内的视图管理。

或者,模块可以实现自己的视图调度方法来控制何时显示特定视图或模块如何在页面上显示。

对于Web Forms模块,主要的视图组件是一个ASP。NET用户控件,称为模块控制款。对于MVC和SPA模块,DNN扩展了模块控件的定义,以适应它们的替代视图渲染管道。