ASP.NET ZERO 学习 —— (7) 开发手册之基础架构

19 篇文章 5 订阅

#动态Web API层
SPA(单页面应用)和MPA(多页面应用)都使用AJAX来提供更好的用户体验,他们通过AJAX调用应用服务。因此有必要创建一个Web API Controller作为适配器(客户端通过AJAX调用Web API Controller的action,然后调用应用服务的方法)

ABP框架使用应用服务接口定义自动创建动态Web API层,这里实际上没有Web API Controller。在.WebApi项目的 WebApiMoudule中创建动态Web API Controller。见动态Web API 层文档了解更多。

当ABP动态创建Web API Controller时,你也可以创建regular Web API Controller。

#本地化
ASP.NET Zero 用户接口完全本地化。ASP.NET Zero 使用动态的,基于数据库的,每个租户的本地化。

xml文件用作所需语言的基础翻译:

这里写图片描述

你可以通过拷贝并翻译来添加更多的所需语言xml文件。需要注意的是xml文件应该是一个嵌入式资源。

当你在默认语言对应的xml文件中添加了一个新的本地化文本片段,那么也应该对其他语言版本的xml文件做相应的添加。没有必要将它添加到数据库迁移代码中,因为xml文件中的值将用作默认值。

应用语言在 DefaultLanguagesCreator 类中定义,这被作为Entity Framework 数据迁移的种子数据。所以,你想添加一种新的语言,只需要将他添加至 DefaultLanguagesCreator 类里即可。此外,您也可以添加相应的XML文件作为应用的默认语言。

本地化语言管理了解更多。

#EF框架整合
ASP.NET Zero使用了EF的code-firstmigrations。XXXXDbContext(XXXX为你的项目名字)定义了DbContext类。Migration文件夹包含了EF的Migrations。

XXXXRepositoryBase 类作为自定义仓储类的基类。见EF框架整合了解更多。
#授权
授权系统基于权限,AppPermissions 包含权限常量名,AppAuthorizationProvider 定义了系统中所有的权限。

授权了解如何配置权限。

#功能
AppFeatureProvider 为多租户应用定义功能。功能的名字作为常量在AppFeatures 中定义。

功能管理学习如何定义和使用功能。

#设置
所有的设置都有一个唯一的名字。AppSettings 类中定义了设置的常量名。所有设置和他们的默认值都在 AppSettingProvider 类中定义。

设置了解更多。

#导航
菜单是通过定义在AppNavigationProvider 类中自动生成的。你有两个菜单:Main(Angular应用中的主菜单)和FrontEnd(前端网站的主菜单)。

导航了解更多。

#缓存和Redis缓存
ASP.NET Zero 目前只使用到Redis来作为内存缓存。如果你想启用它,只需要在WebModule中将下面的代码取消注释即可(在.Web项目中的App_Start文件夹中)

Configuration.Caching.UseRedis();

缓存了解更多。

#后台任务和HANGFIRE
ABP框架包含background job system作为默认后台作业管理器。如果你想使用Hangfire作为后台作业管理器,你也可以很简单的启用它。

首先,在WebModule取消注释以下代码(在.Web项目中的App_Start文件夹中)

Configuration.BackgroundJobs.UseHangfire(configuration =>
{
    configuration.GlobalConfiguration.UseSqlServerStorage("Default");
});

如果要启用Hangfire仪表盘,在Startup.cs文件中取消注释以下代码(在.Web项目中的App_Start文件夹中)

app.UseHangfireDashboard();

注意:Hangfire在数据库中创建了独立的表。见后台任务Hangfire集成了解更多

#SignalR 集成
SignalR 在启动模板中已进行了配置和集成,即时通知系统将会用到它。你可以直接在应用中直接使用SignalR。见SignalR集成了解更多。

#日志
ASP.NET Zero用 log4net 作为默认的日志组件,配置信息在.Web项目的log4net.config文件中。它默认将所有的日志写入网站Logs文件夹中。当你发布你的项目时,记住将Logs文件夹配置写权限

日志文档了解如何注入ILogger和写日志。

#DTO映射
ASP.NET Zero使用AutoMapper作为DTO和实体类的映射(和其他类型对象到对象的映射)。使用Abp.AutoMapper类库就是使用了AutoMapper。

下面的DTO类被用来转换租户的编辑信息

[AutoMap(typeof (Tenant))]
public class TenantEditDto : EntityDto
{
    [Required]
    [StringLength(Tenant.MaxTenancyNameLength)]
    public string TenancyName { get; set; }

    [Required]
    [StringLength(Tenant.MaxNameLength)]
    public string Name { get; set; }

    public bool IsActive { get; set; }
}

这里,AutoMap属性动态的创建了TenantEditDto和Tenant的映射,然后你可以按下面的方式将Tenant对象转换成TenantEditDto对象。

[AbpAuthorize(AppPermissions.Pages_Tenants_Edit)]
public async Task<TenantEditDto> GetTenantForEdit(EntityRequestInput input)
{
    return (await TenantManager.GetByIdAsync(input.Id)).MapTo<TenantEditDto>();
}

MapTo方法执行映射。

##自定义对象映射
在某些情况下,基于属性的映射可能不够,你可以在CustomDtoMapper 类中直接使用AutoMapper API来配置你自己的映射。

数据传输对象了解更多DTOs信息。

#邮件发送
ASP.NET Zero在某些情况下会想用户发送邮件(例如,忘记密码和邮件确认)。邮件模板定义放在**.Core项目的Emailing/EmailTemplates**文件夹下(default.html),你可以通过编辑该文件来更改你的邮件模板。

邮件发送在调试模式下是被禁用的,这是因为在开发中可能不会配置邮件发送的相关属性。如果你需要你可以启用它。在发布模式下它是被启用的。如果你愿意,你可以在XXXXCoreModule 类的PreInitialize 方法里来更改它。

#二进制对象管理
用户头像被存放在数据库里,而不是存放在文件系统里。但是因为性能原因,它不是存放在用户表里(用户信息会很频繁的从数据库中检索,但用户头像很少需要)。

在ASP.NET Zero里构建了个通用的二进制文件存储机制:BinaryObject实体可以用于保存任何类型的二进制对象(byte数组)。由于用户头像可以被转换成byte数组,因此用户头像就被存放在这里。

IBinaryObjectManager 接口定义了Save, Get和Delete 二进制对象的方法。DbBinaryObjectManager 实现了将二进制对象保存进数据库。例如,ProfileController 使用了IBinaryObjectManager 接口来从数据库获取用户头像。

你也可以通过来实现IBinaryObjectManager接口,以另一种方式让文件存放在其他地方。

#软删除
从数据库中删除实体,一般都使用软删除模式,仅将其标记为“删除”。因此,一个实体被软删除,那么它不会被应用检索到。利用ABP的Data filters将其过滤。

ASP.NET Zero里,许多实体都可以被软删除。见ABP的数据过滤了解更多。

#打包和压缩
ASP.NET Zero使用ASP.NET Optimization来进行打包和压缩脚本和样式文件。打包定义在不同的文件里:

  • AppBundleConfig 用来对SPA文件进行打包
  • MpaBundleConfig 用来对MPA文件进行打包
  • FrontEndBundleConfig 用来对前台文件进行打包
  • CommonBundleConfig 用来一些通用资源文件进行打包

另外,参见 ScriptPaths 和 StylePaths 类,他们包含了JS和CSS文件的位置常量。

#基类
在应用里会用到许多有用的基类

  • XXXXAppServiceBaseapplication services 的基类
  • XXXXDomainServiceBasedomain services 的基类
  • XXXXControllerBaseASP.NET MVC Controllers 的基类
  • XXXXWebViewPageBaseASP.NET MVC Views的基类。实际上,所有视图将自动的继承该基类,你可以添加一些通用的属性或方法在所有视图中使用。
  • XXXXServiceBase : 其他服务类的基类。例如,UserEmailer 类。
  • XXXXRepositoryBase : 自定义仓储的基类
  • XXXXApiControllerBase : regular Web API Controllers 的基类

强烈建议继承这些类中的一个,因为它们确实使日志、本地化、授权等更容易

#CSRF/XSRF 保护
ABP框架尽可能多的提供了简单和自动化的CSRF保护。ASP.NET Zero模板预配置了CSRF保护。见ABP的CSRF/XSRF 保护了解更多。

#版本控制
AppVersionHelper 类用来定义应用的当前版本。当你在这里改变了版本,应用里的所有项目的版本都将被改变。此外,版本和发布日期将自动显示在应用程序页的左下角。这样,你总是可以看到当前运行的应用版本。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值