您的位置:首页 > 其它

ABP框架心得系列-1.本土化和ABP核心

2017-06-21 15:35 197 查看

ABP框架心得系列-1.本土化和ABP核心

ABP框架介绍:https://www.cnblogs.com/mienreal/p/4528641.html

系列导航帖:http://blog.csdn.net/hjkl950217/article/details/73549093

个人网站:https://www.afarsky.cn

ABP框架越来越火,正好我准备去实习的公司也在用这个框架我将我的学习心得记录下来,给大佬们的系列教程做一个辅助.框架的使用会涉及到一些,但主要是还是参考大佬们的教程,这个系列记录理解和使用心得.

阳光铭睿:https://www.cnblogs.com/mienreal/p/4528470.html (ABP系列教程)

角落的白板报:https://www.cnblogs.com/wer-ltm/ (ABP框架中的一些问题解决办法)

1.怎么注意到本土化?

abp框架有很多优点,其中之一就是对多语言支持比较好.今天以前我从来没有用过ABP框架,在下载ABP框架后按教程运行,但是提示:



一直很郁闷,我才下载的框架,什么都没改的情况下怎么就没不能运行呢?

而且这个错误页面没有提示是那一行代码出的错–>程序初始化期间出的错,而且这个错一看就不是asp.net mvc自带的错,查看下面的异常堆栈,果然是abpException.

请教了一下学长,他说让我查看一下migration的用法的.我一下就反应过来,怪不得白板报在开篇说到update-database这个词[链接],原来这里需要手动迁移数据库.在第一次项目运行时,报错说不能建立数据库,我就手动在电脑上建立了同名的数据库.此时进数据库查看,果然没有数据:



推测是EF在启动时,发现电脑里的数据库和项目中的不一样(ABP使用的是 core first方式),手动建立了这些表,但是没有调用种子方法或是调用失败.

现在切换到EF模块,再次执行update-database 然后启动 OK





2.本土化的实现逻辑推测

主要是两个地方提醒我这个东西,第一个是异常,居然提示没有语言定义,第二个是显示的这个页面里,有中文有英文..

首先是搜索Languages,找到了下面这个东西:



说明是有初始数据的,刚第二个错就是因为数据没有写到数据库里去

这个类叫DefaultLanguagesCreator,在InitialHostDbBuilder中被调用



可以看到,这里的初始化方法(不知道是那个初始化方法下面调用的),做了很多事:

1.默认初始化

2.默认语言初始化

3.主机和用户权限初始化

4.默认配置初始化

再点击上面的引用,终于找到了种子方法:



这个方法在Configurationg类下面



和我推测的一样,是Migrations功能里面的东西,但是和我之前的学习不同,土牛在这里修改了迁移配置,和自动生成的不一样.但从代码上看,非常简洁,没费多少时就看懂了.

现在得到

结论1:ABP框架确实做了本土化设计,默认考虑了11种语言,并且存在数据库中,方便配置

刚才找到的文件在这个位置:



3.怎么选择语言的?

下面继续解迷登录页面英文和中文共存的问题,我从网页源码上分别找了租户名称和下面提示的ID,



(这里的英文提示已经让我修改了)

但是网页上 内容和标签属性配置是可以修改的,但ID不变,在VS中全问搜索TenancyName,发现了这个东西:



噫?居然是样配置的?原来这些文字是通过配置来做的,这样我觉得非常好..修改配置还是得XML文件修改起来舒服呀..

然后看了一下文件结构:



原来这些文件是在Core层.确实,本土化功能算是基础功能,放在Core层也是非常好的设计(PS:表示之前没有用过这种框架,所以没什么框架思维)

但是我们知道ASP.NET MVC程序的页面是生成出来的,回到web的View下找成找到Login页面,看他是如何绑定数据的:



通过之前的ID:TenancyName,能确认这里就是生成的地方,他是用@L来取得本土化数据的



在刚才的XML配置文件中添加CanBeEmptyToLoginAsHost节,写上主机登录时可以为空,启动,本土化成功.

主要是这里Views后面的ABPWebViewPage,我特意回到自己用VS建立的简单MVC项目看了一下,用的是ViewPage,再次到NuGet里查看,没有微软的MVC框架引用..那么得到下总结了:

结论1:ABP框架确实做了本土化设计,默认考虑了11种语言,并且存在数据库中,方便配置

结论2:ABP框架是通过程序内部来从XML配置文件中取得本土化字符串,并且可以从配置文件和数据库中取值,配置文件和数据库中都没有写的情况下,用默认配置(英语)

结论3:ABP的框架作者重写了MVC逻辑,在MVC设计思想和微软MVC框架的基础上完成,在不改变C#人用MVC框架习惯的情况下,升级扩展了很多东西,不是基于微软MVC的整合框架

感悟:从这些能看出来,ABP作者是真的用心做的框架.大佬们的介绍中提到ABP框架代码的优雅,我在他的设计上感觉到了.初始化和和本土本两个功能在使用上都是很简单的,用着非常舒心.(不过还是得吐槽:为什么类里的成员字段或变量,不加this啊!!!!!)

——–更正——

1.框架中还是有引用了微软了的mvc库,至少现在来看,他俩是共存的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: