基础功能

基础功能

动态 WEB API 层

在SPA和MAP 高度使用Ajax请求服务来提供更高的用户体验。他们要求通过Ajax来调用应用层的方法。
因此,就需要创建一个Web Api控制器来作为适配器(用户访问webapi的控制器来处理ajax的请求,然后去调用服务端的方法)。

abp基础框架会自动创建 动态webapi层来定义程序的服务接口。因此,我们是没有webapi控制器的。

我们从WebApiModule模块中生成动态的webapi控制器。

想要了解更多的WebAPi层的详细信息,可以参阅文档“动态WEBAPI”

虽然ABP框架会动态的创建WebAPI控制器,但是如果想获得更好的性能,我们还是推荐定期的手动创建WEBAPI控制器。

本地化

ABP ZERO 的用户界面是纯本地化的。
ABPZERO的是动态的,每个租户可以基于数据库,设置自己的本地化信息。(具体看之前的本地化介绍。)

下图中的XML文件是用于所需语言作为基础的语言包

image

上图中的“PhoneBook”即你项目名称。这里的语言文件,你可以通过复制一个XML来制作更多的XML并且把他们翻译为你需要的语言。

请注意,这些XML文件的属性都必须为“嵌入的资源”。 请参阅文档valid culture codes

当你要添加一个新的语言文件时候,可以将它添加到XML文件中的默认语言,然后就可以在你的程序中使用了。不需要讲XML中的值放到数据库中的迁移代码。

DefaultLanguagesCreator 类中定义了Application languages 。它将作为种子数据在框架中迁移。所以当你想添加新的语言时,只要将其添加到

DefaultLanguagesCreator类中。
你还要添加上述语言的XML文件并且翻译好后,放到对应的XML文件中。

请参见本地化语言管理文件的详细信息。

ENTITYFRAMEWORK集成

ABPZERO 使用EntityFramework 的codefirst和迁移功能。
你项目中的“项目DbContext”集成自DbContext类,迁移文件夹包含了EF的迁移功能。

项目RepositoryBase类是基类为您自定义的存储库。请参阅更多的实体框架集成文档

提供授权服务

授权是基于权限。
AppPermissions 包含了权限名称的常量。

AppAuthorizationProvider 类是可以定义系统中所有的权限功能。

我们需要在使用它之前就需要先定义它。

具体看文档:授权

功能提供者

AppFeatureProvider类定义应用程序的功能。
功能名称作为接点AppFeatures类中定义。
在模板中有一些示例的特征。
你可以安全地删除所有和定义自己的功能。

请参阅功能管理文档,以了解如何定义和使用功能。

设置提供程序

每个设置具有唯一的名称。设置名称AppSettings类中定义的常量。

AppSettingProvider类中可以对所有设置进行管理和指定它们的默认值。

请参阅设置文档,以了解如何创建和使用设置。

导航提供程序

菜单是动态生成使用AppNavigationProvider类中的定义
。我们有两个菜单 ︰主要(Angularjs中的主菜单) 和前端(前端的 web 站点中的主菜单)。

请参阅导航文档的详细信息。

缓存和Redis缓存

ABPZERO 使用的是内存缓存,当你要讲服务器缓存替换为redis缓存的时候。
只需要在WebModule中将:

        //Uncomment this line to use Redis cache instead of in-memory cache.
            //Configuration.Caching.UseRedis();

取消掉注释就可以了。

关于Redis的使用,看文档“缓存说明”;

后台的作业和Hangfire

ABP框架中包含了后台作业任务,并且是默认的。
如果你要想要启用Hangfire作为你的作业任务,你可以启动它。

第一,取消WebModule(WEB项目在App_Start文件夹中)中的代码

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

如果你想要启用 HangFire仪表盘功能。你看看打开Startup.cs中的以下代码:

app.UseHangfireDashboard();

注意:HangFire需要创建属于它自己的表。请参阅后台任务HangFire集成文档的详细信息。

Signalr 集成文档

如何配置Signalr到项目中呢。答案就是点我传送门“Signalr集成文档

日志记录

ABPZERO 默认使用Log4Net作为默认的日志记录。

如何配置以及使用:“Log4Net文档”。

Dto映射

ABPZERO使用 AUTOMAPPER 来映射 Dto到实体的转换(也支持其他对象的object到object)搞不懂的就去学automapper的使用吧。

简单示例此为租户编辑DTO的类:

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

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

    public bool IsActive { get; set; }
}

在这里,automapper 会自动创建TeanantEditDto和Tenant直接的映射类。

然后我们可以自动转换Tenant到TenantEditDto对象(反之亦然),如下图所示:

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

更多信息推荐看 数据传输对象文档。

发送电子邮件

ABPZERO 在某些情况下会给用户发送邮件(如:忘记了密码,电子邮件确认。)电子邮件模板定义在“EmailTemplates”文件中。项目中(default.html)你可以在这里更改默认电子邮件模板。

Binary ObjectManager

用户 个人图片 是存在在数据库中,而不是存在文件夹中。
出于对性能的考虑,并没有把它存储在user表中,因为经常在用户表中查询资料,而头像资料一般很少用到。

在ABPZERO中是有一个通用的二进制内存保存机制。
BinaryObject实体可以用于保存任何类型的二进制对象(字节数组)。

由于个人图片可以转换为一个字节数组,因此在这里我们保存头像就使用了它。

IBinaryObjectManager 接口有保存、获取以及删除二进制对象的方法
DbBinaryObjectManager 主要是为了保存二进制对象到数据库中。

举个例子:
ProfileController 控制器就继承 IBinaryObjectManager 接口,然后从数据库中获取了当前用户的头像。

软删除

它是一个通用的软删除模式,用来不从数据库中删除一条数据,而仅将其标记为删除。所以如该条数据被标记为软删除,那么查询语句是不会把它从数据库中查询出来的。ABP的数据筛选机制默认支持。

捆绑与压缩

ABPZERO 使用了ASP.NET优化("ASP.NET Optimization") 将js和css文件进行了捆绑和压缩(BUNDLING & MINIFYING)

他们的定义在不同的文件中:

  • AppBundleConfig︰ 为 SPA 进行bundles
  • MpaBundleConfig︰ 为 MPA 进行bundles
  • FrontEndBundleConfig︰对前端的应用程序。
  • CommonBundleConfig︰ 对某些共同的资源。

此外,可以参见ScriptPaths和StylePaths类。他们包含了本地CSS和JS文档的路径。

基类

有一些很有用的基类,可以用于程序中:

  • 项目名称APPServiceBase可以作为所有application services(应用层)的基类。
  • 项目名称DomainServiceBase可以作为所有domain services(领域层)的基类。
  • 项目名称ControllerBase可以作为ASP.NET MVC的控制器基类。
  • 项目名称WebViewPageBase可以作为ASP.NET MVC视图的基类。
    实际上,所有的视图都是自动继承。因为他们都可以在web.config中定义。我们也可以添加一些常见的属性/方法在web.config中,然后在所有的视图中使用。
  • 项目名称ServiceBase 可以作为其他类似的服务类的基类。比如:UserEmailer类就继承它。
  • 项目名称RepositoryBase是作为仓储类的基类。
  • 项目名称ApiControllerBase可以用作普通的Webapi类的基类。

强烈建议你们使用上述的类作为基类,因为他们是拓展过的。他们在实现如:日志记录、本地化、授权上更加的轻松。

版本显示

AppVersionHelper类可以用来显示程序的当前版本。
当你在此处修改版本的时候,其他地方也会显示修改后的版本。
另外,版本和发布时间会自动显示在页面的左下方。他可以帮助我们了解运行程序的版本。

posted @ 2017-01-17 12:15  梁桐铭  阅读(1118)  评论(0编辑  收藏  举报