企业级(例如ERP)应用, 一遍一遍的在重复:认证、验证、异常处理、日志、国际化和本地化、数据库连接管理、配置管理、 审计记录等,同时.NET有很多最佳实践:分层、模块化、DDD领域驱动、DI依赖倒置等,采用ABP就是基于这些惯例,来避免重复劳动,并且提供高质量、高效率的.NET开发。对于没有专职架构师的小型公司来说,选择ABP,可能是比较好的方案。万事都有利有弊,使用框架带来好处的同时,也有诸如学习曲线、踩坑等问题,本人使用ABP有3年多时间,实践了几个项目,踩过的坑有很多;想通过这个系列,把这些经历分享给大家,希望给同志们带来一些帮助。 
  诚如ABP的作者所说:We are creating different applications based on different needs. But implementing common and similar structures over and over again, at least in some level. Authorization, Validation, Exception Handling, Logging, Localization, Database Connection Management, Setting Management, Audit Logging are some of these common structures. Also, we are building architectural structures and best practices likeLayered and Modular Architecture, Domain Driven Design, Dependency Injection and so on. And trying to develop applications based on some conventions.    
 
   这张AbpLayers图,实际上就是一个分层的最佳实践,其实和通常的三层:UI界面层、BusinessLayer业务逻辑层、DAL数据访问层,是相通的,只是把UI界面层分为PresentationLayer(Client)客户展示层、WebLayer(server)服务器端的Web层,有些人把这分别叫前台、中台,DAL数据访问层的抽象叫Infrastructure Layer基础架构层,DAL数据访问层的实现可以有多种实现,例如:EntityFramework、NHibernate、Dapper; BusinessLayer业务逻辑层,在DDD(领域驱动开发)中是核心,要用好ABP框架,了解DDD的一些核心概念是必须的,否则没法得心应手的来使用,Enity、Repository是最起码要了解的,如果还停留在Table和crud的舒适区层次,那建议您不要使用ABP。
public virtual void Initialize()
        {
            ResolveLogger();

            try
            {
                RegisterBootstrapper();
                IocManager.IocContainer.Install(new AbpCoreInstaller());

                IocManager.Resolve<AbpPlugInManager>().PlugInSources.AddRange(PlugInSources);
                IocManager.Resolve<AbpStartupConfiguration>().Initialize();

                _moduleManager = IocManager.Resolve<AbpModuleManager>();
                _moduleManager.Initialize(StartupModule);
                _moduleManager.StartModules();
            }
            catch (Exception ex)
            {
                _logger.Fatal(ex.ToString(), ex);
                throw;
            }
        }

以上就是ABP的初始化,如果你认可DDD, 如果你认可SOLID, 如果你认可DRY, 如果你使用.NET或.NetCore, 如果你使用ASP.NET或ASP.NETCORE,  那说明你选到了最好的框架,没有之一。

使用ABP框架踩过的坑系列1的更多相关文章

  1. ABP框架踩过的坑系列6

    ABP框架踩过的坑系列6 应是无事.齐侯方才的确到了吴纠庭院https://www.mixcloud.com/ltTFvU888smi8jS/几日行军劳顿其实齐侯本应该睡下了https://www.m ...

  2. 使用ABP框架踩过的坑系列4

    数据库连接和事务管理,是数据库应用中的最重要概念之一.做过的人,都会头疼:何时Open一个连接?何时Start一个事务?何时Dispose这个连接?... ABP框架试图用一个叫做UnitOfWork ...

  3. 使用ABP框架踩过的坑系列5

    DDD领域驱动开发,实际是为复杂的业务场景而生的,为了让开发人员专注于业务,而操作系统.数据库.网络之类的技术细节,必须要持久透明化:实际就是数据库系统DBMS的ORM抽象,目标就是业务不需要考虑数据 ...

  4. 使用ABP框架踩过的坑系列3

    从架构角度来讲,ApplicationService究竟应该如何定位,一种说法是直接对应用例UseCase, 也就是直接对应UI, 这个UI是广义的,不仅仅是浏览器的页面,也包括API调用.还是从我曾 ...

  5. 使用ABP框架踩过的坑系列2

    ABP中有很多惯例,如果使用得当,可以事半功倍,如果使用不当,也会有很大的麻烦,是否适当其实还是要看Need需求 ASP.NET Boilerplate (ABP) is an open source ...

  6. ABP框架踩坑记录

    ABP框架踩坑记录 ASP.NET Boilerplate是一个专用于现代Web应用程序的通用应用程序框架. 它使用了你已经熟悉的工具,并根据它们实现最佳实践. 文章目录 使用MySQL 配置User ...

  7. Abp框架之执行Update-Database 命令系列错误

    废话不多说,直接开门见山.首先的 第一个错误:一般都是,碰到这个问题不要慌,先不要急着去查看sql服务是否开启,首先按F5启动项目,报错之后直接终止项目,然后再执行Update-Database命令 ...

  8. 谈谈出入React框架踩过的坑

    1 在JSX的元素中写入内联样式,例如<div style={"color:blue"}></div> 报错:warning:Style prop valu ...

  9. 踩过的坑系列之InputStream.read(byte[])方法

    项目之前都是好好的,最近现场那边出现一个问题,报错不是合法的json字符串,这个json字符串是通过http请求访问获得的. 通过直接在浏览器上直接访问http这个请求,发现返回的json也是完全正确 ...

随机推荐

  1. POJ1950----DFS

    Dessert Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6193   Accepted: 2299 Descripti ...

  2. MyEclipse/eclipse 添加作者、注释、版本、时间等

    preferences>>java>>code style>>code templates>>comments>>找到相应的编辑即可

  3. centos 系统下彻底删除mysql

    yum remove mysql mysql-server mysql-libs compat-mysql51 rm -rf /var/lib/mysql (删除数据库) rm /etc/my.cnf ...

  4. 复杂度分析 quick sort&merge sort

    空间复杂度看新开了什么数据结构就够了 公式=几个点*每个点执行了多少次 二叉树都是n次 二分法查找:lgn 全部查找:n n:找一个数,但是两边都要找.相当于遍历.类似于rotated sorted ...

  5. OC -网络请求 - NSURLConnection - GET

    #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> ...

  6. Message: u'$ is not defined' ; Stacktrace

    status.html <html> <head> <meta http-equiv="content-type" content="tex ...

  7. 开发中常遇到的Python陷阱和注意点-乾颐堂

    最近使用Python的过程中遇到了一些坑,例如用datetime.datetime.now()这个可变对象作为函数的默认参数,模块循环依赖等等. 在此记录一下,方便以后查询和补充. 避免可变对象作为默 ...

  8. This page contains the following error

    解决办法:将header头注释掉 header("content-type:text/xml; charset=UTF-8");

  9. 针对程序员的podcast

    身为程序员们,必须要懂得合理的利用琐碎时间来提炼自身,或许上下班途中或骑行或徒步或...时,以下这些Podcasts对你有些许作用: The Hanselminutes podcast by Scot ...

  10. Devexpress VCL Build v2014 vol 14.2.5 发布

    和xe8 几乎同一天出来,但是目前官方不支持xe8. The following sections list all minor and major changes in DevExpress VCL ...