zoukankan      html  css  js  c++  java
  • ABP .NET corej 版本 第一篇

    ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。

    ABP使用以下技术:

    服务器端:

    1. l ASP.NET MVC 5Web API 2C# 5.0
    2. l DDD领域驱动设计 (EntitiesRepositoriesDomain ServicesDomain EventsApplication ServicesDTOs等)
    3. l Castle windsor (依赖注入容器)
    4. l Entity Framework 6 NHibernate,数据迁移
    5. l Log4Net(日志记录)
    6. l AutoMapper(实现Dto类与实体类的双向自动转换)

    客户端:

    1. l Bootstrap
    2. l Less
    3. l AngularJs
    4. l jQuery
    5. l Modernizr
    6. 其他JS: jQuery.validatejQuery.formjQuery.blockUIjson2

     

    ABP的优势:

     

    1.  多语言/本地化支持
    2. l 多租户支持(每个租户的数据自动隔离,业务模块开发者不需要在保存和查询数时写相应代码)
    3. l 软删除支持(继承相应的基类或实现相应接口,会自动实现软删除)
    4. l 统一的异常处理(应用层几乎不需要处理自己写异常处理代码)
    5. l 数据有效性验证(Asp.NET MVC只能做到Action方法的参数验证,ABP实现了Application层方法的参数有效性验证)
    6. l 日志记录(自动记录程序异常)
    7. l 模块化开发(每个模块有独立的EF DbContext,可单独指定数据库)
    8. l Repository仓储模式(已实现了Entity Framework、NHibernate、MangoDB、内存数据库)
    9. l Unit Of Work工作单元模式(为应用层和仓储层的方法自动实现数据库事务)
    10. l EventBus实现领域事件(Domain Events)
    11. l DLL嵌入资源管理
    12. l 通过Application Services自动创建Web Api层(不需要写ApiController层了)
    13. l 自动创建Javascript 的代理层来更方便使用Web Api
    14. 封装一些Javascript 函数,更方便地使用ajax、消息框、通知组件、忙状态的遮罩层

    ABP的体系架构

    为了减少复杂性和提高代码的可重用性,采用分层架构是一种被广泛接受的技术。为了实现分层的体系结构,ABP遵循DDD(领域驱动设计)的原则,将工程分为四个层:

    • 展现层(Presentation:提供一个用户界面,实现用户交互操作。
    • 应用层(Application:进行展现层与领域层之间的协调,协调业务对象来执行特定的应用程序的任务。它不包含业务逻辑。
    • 领域层(Domain:包括业务对象和业务规则,这是应用程序的核心层。
    • 基础设施层(Infrastructure:提供通用技术来支持更高的层。例如基础设施层的仓储(Repository)可通过ORM来实现数据库交互。
    • 根据实际需要,可能会有额外添加的层。例如:
    • 分布式服务层(Distributed Service:用于公开应用程序接口供远程客户端调用。比如通过ASP.NET Web API或WCF来实现。这些都是常见的以领域为中心的分层体系结构。不同的项目在实现上可能会有细微的差别。

    代码分布:

     

     

     领域层

    领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现。

    实体(Entity

    实体代表业务领域的数据和操作,在实践中,通过用来映射成数据库表。

    仓储(Repository

    仓储用来操作数据库进行数据存取。仓储接口在领域层定义,而仓储的实现类应该写在基础设施层。

    领域服务(Domain service

    当处理的业务规则跨越两个(及以上)实体时,应该写在领域服务方法里面。

    领域事件(Domain Event

    在领域层有些特定情况发生时可以触发领域事件,并且在相应地方捕获并处理它们。

    工作单元(Unit of Work

    工作单元是一种设计模式,用于维护一个由已经被修改(如增加、删除和更新等)的业务对象组成的列表。它负责协调这些业务对象的持久化工作及并发问题。

    应用层

    应用层提供一些应用服务(Application Services)方法供展现层调用。一个应用服务方法接收一个DTO(数据传输对象)作为输入参数,使用这个输入参数执行特定的领域层操作,并根据需要可返回另一个DTO。在展现层到领域层之间,不应该接收或返回实体(Entity)对象,应该进行DTO映射。一个应用服务方法通常被认为是一个工作单元(Unit of Work)。用户输入参数的验证工作也应该在应用层实现。ABP提供了一个基础架构让我们很容易地实现输入参数有效性验证。建议使用一种像AutoMapper这样的工具来进行实体与DTO之间的映射。

     基础设施层

    当在领域层中为定义了仓储接口,应该在基础设施层中实现这些接口。可以使用ORM工具,例如EntityFrameworkNHibernateABP的基类已经提供了对这两种ORM工具的支持。数据库迁移也被用于这一层。

     WEB与展现层

    Web层使用ASP.NET MVCWeb API来实现。可分别用于多页面应用程序(MPA)和单页面应用程序(SPA)

    SPA中,所有资源被一次加载到客户端浏览器中(或者先只加载核心资源,其他资源懒加载),然后通过AJAX调用服务端WebApi接口获取数据,再根据数据生成HTML代码。不会整个页面刷新。现在已经有很多SPAJS框架,例如: AngularJsDurandalJsBackboneJsEmberJsABP可以使用任何类似的前端框架,但是ABP提供了一些帮助类,让我们更方便地使用AngularJsDurandalJs

    在经典的多页面应用(MPA)中,客户端向服务器端发出请求,服务器端代码(ASP.NET MVC控制器)从数据库获得数据,并且使用Razor视图生成HTML。这些被生成后的HTML页面被发送回客户端显示。每显示一个新的页面都会整页刷新。

    SPAMPA涉及到完全不同的体系结构,也有不同的应用场景。一个管理后台适合用SPA,博客就更适合用MPA,因为它更利于被搜索引擎抓取。

    SignalR是一种从服务器到客户端发送推送通知的完美工具。它能给用户提供丰富的实时的体验。

    已经有很多客户端的Javascript框架或库,JQuery是其中最流行的,并且它有成千上万免费的插件。使用Bootstrap可以让我们更轻松地完成写HtmlCSS的工作。

    ABP也实现了根据Web API接口自动创建 Javascript的代码函数,来简化JSWeb Api的调用。还有把服务器端的菜单、语言、设置等生成到JS端。(但是在我自己的项目中,我是把这些自动生成功能关闭的,因为必要性不是很大,而这些又会比较影响性能)。

    ABP会自动处理服务器端返回的异常,并以友好的界面提示用户。

     其它

    ABP使用Castle Windsor为整个程序框架提供依赖注入的功能。使用Log4Net日志记录组件,提供给其他各层调用以进行日志记录。

    来自:

    来自该作者

  • 相关阅读:
    HDU 2116 Has the sum exceeded
    HDU 1233 还是畅通工程
    HDU 1234 开门人和关门人
    HDU 1283 最简单的计算机
    HDU 2552 三足鼎立
    HDU 1202 The calculation of GPA
    HDU 1248 寒冰王座
    HDU 1863 畅通工程
    HDU 1879 继续畅通工程
    颜色对话框CColorDialog,字体对话框CFontDialog使用实例
  • 原文地址:https://www.cnblogs.com/topguntopgun/p/9575880.html
Copyright © 2011-2022 走看看