.Net BP框架开发手册

合集下载

AbpvNext项目学习(1)项目搭建及初始化

AbpvNext项目学习(1)项目搭建及初始化

AbpvNext项⽬学习(1)项⽬搭建及初始化
找了好久ABP vNext的学习笔记,结果都没有⼼仪的博客,⼲脆⾃⼰研究ABP vNext官⽅⽂档。

⾸先是开发⼯具,⽂档上⾯要求:
1.VS2019
2. .Net Core
3.1
3.Node v12或v14
4.Yarn V1.20+ or npm v6+ (installed with Node)
当然,⽤其他编辑器也是可以的,看个⼈喜好
然后他提供了两种获取源码的⽅式:
1.安装Abp Cli,和Vue脚⼿架⼀样的东西,是⽤命令⾏安装(太⿇烦)
2.直接官⽹下载(简单直接)
唯⼀想吐槽的是,为什么它不⽀持Vue前端框架使⽤的是Angular。

我选择的是:Angular,EntityFramework Core,下载完成解压会有两个⽂件夹:
angular aspnet-core
⼀个前端,⼀个后台源码
运⾏后台项⽬后,需要⾸先⽣成类库,引进包,然后进⾏数据迁移
⽅法也有两种:
1.直接运⾏类库
2.包管理器控制台输⼊命令
官⽅⽀持第⼀种,也最简单粗暴
本⽂主要讲第⼀种
⾸先找到.DbMigrator类库,修改⾥⾯的appsetting.json,将连接字符串改成你⾃⼰的,并将其设成启动项(直接右键选择) 直接F5就可以⾃动进⾏数据迁移,完成后可以在数据库中看到你命名的数据库(注意:数据库可以⾃动⽣成,不需要新建)
然后将HttpApi.Host类库设成启动项,按Ctrl+F5运⾏项⽬,就可以看到Swagger界⾯了。

基于DDD的.NET开发框架-ABP模块设计

基于DDD的.NET开发框架-ABP模块设计

基于DDD的.NET开发框架-ABP模块设计ABP是“ Boilerplate Project (样板项⽬)”的简称。

Boilerplate是⼀个⽤最佳实践和流⾏技术开发现代WEB应⽤程序的新起点,它旨在成为⼀个通⽤的WEB应⽤程序框架和项⽬模板。

研究过orchard和nopcommerce的都应该知道模块概念,ABP的模块也和他们是⼀回事。

实现原理也都⼀样:应⽤程序⼀般都是先定义模块接⼝,然后把模块编译的dll放到固定的⽬录中(ABP只能放到bin下),应⽤程序主程序通过加载那些实现了插件接⼝的dll来实现插件的使⽤。

ABP 框架提供了创建和组装模块的基础,⼀个模块能够依赖于另⼀个模块。

在通常情况下,⼀个程序集就可以看成是⼀个模块。

在 ABP 框架中,⼀个模块通过⼀个类来定义,⽽这个类要继承⾃ AbpModule。

nopcommerce插件实现可以到:了解下。

下⾯的例⼦,我们开发⼀个可以在多个不同应⽤中被调⽤MybolgApplication模块,代码如下:public class MyBlogApplicationModule : AbpModule //定义{public override void Initialize() //初始化{IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());//这⾏代码的写法基本上是不变的。

它的作⽤是把当前程序集的特定类或接⼝注册到依赖注⼊容器中。

}}ABP框架会扫描所有的程序集,并且发现AbpModule类中所有已经导⼊的所有类,如果你已经创建了包含多个程序集的应⽤,对于ABP,我们的建议是为每⼀个程序集创建⼀个Module(模块)。

⽣命周期:在⼀个应⽤中,abp框架调⽤了Module模块的⼀些指定的⽅法来进⾏启动和关闭模块的操作。

我们可以重载这些⽅法来完成我们⾃⼰的任务。

ABP开发教程范文

ABP开发教程范文

ABP开发教程范文1.ABP基本概念ABP的核心概念是模块化和领域驱动设计。

在ABP中,应用程序被组织成多个模块,每个模块负责一个特定的功能或领域。

每个模块可以包含实体、服务、仓储、应用程序服务等组件。

2.ABP开发环境搭建3.创建模块在ABP中,可以通过使用命令行工具(ABPCLI)来创建新的模块。

首先,打开命令行窗口,导航到项目的根目录下。

然后运行以下命令来创建一个新的模块:dotnet abp create-module MyModule这将在项目中创建一个名为“MyModule”的新模块。

创建模块后,可以添加实体、服务、仓储等组件来实现模块的功能。

4.定义实体在ABP中,实体是应用程序的核心组件。

可以使用EF Core或Dapper等ORM工具来定义和操作实体。

在模块中,创建一个新的实体类,并定义其属性和关联关系。

例如,我们可以创建一个名为“Product”的实体类:public class Product : Entity<Guid>public string Name { get; set; }public decimal Price { get; set; }5.创建应用程序服务应用程序服务是用于实现业务逻辑的组件。

在ABP中,可以通过继承ApplicationService类来创建应用程序服务。

在模块中,创建一个新的应用程序服务类,并实现其方法。

例如,我们可以创建一个名为“ProductAppService”的应用程序服务:public class ProductAppService : ApplicationServiceprivate readonly IRepository<Product, Guid>_productRepository;public ProductAppService(IRepository<Product, Guid> productRepository)_productRepository = productRepository;}public async Task<List<ProductDto>> GetAllvar products = await _productRepository.GetAllListAsync(;return ObjectMapper.Map<List<ProductDto>>(products);}6.创建API控制器使用ABP创建一个API控制器非常简单。

ABPvNext微服务架构详细教程——分布式权限框架

ABPvNext微服务架构详细教程——分布式权限框架

ABPvNext微服务架构详细教程——分布式权限框架1.简介但是我们使⽤时会发现,对于正常的单体应⽤,ABP vNext框架提供的权限系统没有问题,但是在微服务架构下,这种权限系统并不是⾮常的友好。

我希望我的权限系统可以满⾜以下要求:1. 每个聚合服务持有独⽴的权限集合2. 每个聚合服务可以独⽴声明、使⽤其接⼝访问所需的权限。

3. 提供统⼀接⼝负责管理、存储所有服务权限并实现对⾓⾊的授权。

4. 每个接⼝可以灵活组合使⽤⼀个或多个权限码。

5. 权限框架使⽤尽量简单,减少额外编码量。

在ABP vNext框架基础上,重新编写了⼀套分布式权限框架,⼤体规则如下:使⽤ABP vNext框架中提供的⽤户、⾓⾊模型不做改变,替代重新定义权限模型,重新定义权限的实体及相关服务接⼝。

在⾝份管理服务中,实现权限的统⼀管理、⾓⾊授权和权限认证。

在聚合服务中定义其具有的权限信息、权限关系并通过特性声明各接⼝所需要的权限。

在聚合服务启动时,⾃动将其权限信息注册到⾝份管理服务。

客户端访问聚合服务层服务时在聚合服务层中间件中验证当前⽤户是否具有该接⼝权限,验证过程需调⽤⾝份管理服务对应接⼝。

权限系统具体实现见下⽂。

2. ⾝份认证服务在之前的⽂章中我们已经搭建了⾝份认证服务的基础框架,这⾥我们直接在此基础上新增代码。

在Demo.Identity.Domain项⽬中添加Permissions⽂件夹,并添加Entities⼦⽂件夹。

在此⽂件夹下添加实体类SysPermission和RolePermissions如下:using System;using ponentModel.DataAnnotations;using Volo.Abp.Domain.Entities;namespace Demo.Identity.Permissions.Entities;///<summary>///权限实体类///</summary>public class SysPermission : Entity<Guid>{///<summary>///服务名称///</summary>[MaxLength(64)]public string ServiceName { get; set; }///<summary>///权限编码///</summary>[MaxLength(128)]public string Code { get; set; }///<summary>///权限名称///</summary>[MaxLength(64)]public string Name { get; set; }///<summary>///上级权限ID///</summary>[MaxLength(128)]public string ParentCode { get; set; }///<summary>///判断两个权限是否相同///</summary>///<param name="obj"></param>///<returns></returns>public override bool Equals(object? obj){return obj is SysPermission permission&& permission.ServiceName == ServiceName&& == Name&& permission.Code == Code&& permission.ParentCode == ParentCode;}///<summary>///设置ID的值///</summary>///<param name="id"></param>public void SetId(Guid id){Id = id;}}using System;using Volo.Abp.Domain.Entities;namespace Demo.Identity.Permissions.Entities;///<summary>///⾓⾊权限对应关系///</summary>public class RolePermissions : Entity<Guid>{///<summary>///⾓⾊编号///</summary>public Guid RoleId { get; set; }///<summary>///权限编号///</summary>public Guid PermissionId { get; set; }}将Demo.Identity.Application.Contracts项⽬中原有Permissions⽂件夹中所有类删除,并添加⼦⽂件夹Dto。

ABP开发框架前后端开发系列---(1)框架的总体介绍

ABP开发框架前后端开发系列---(1)框架的总体介绍

ABP开发框架前后端开发系列---(1)框架的总体介绍ABP是 Boilerplate的简称,ABP是⼀个开源且⽂档友好的应⽤程序框架。

ABP不仅仅是⼀个框架,它还提供了⼀个最徍实践的基于领域驱动设计(DDD)的体系结构模型。

学习使⽤ABP框架也有⼀段时间了,⼀直想全⾯了解下这个框架的整个来龙去脉,并把想把它使⽤历程整理成⼀个系列出来,不过⼀直没有下笔来写这篇⽂章的开篇,就是希望能够深⼊了解,再深⼊了解⼀些,希望⾃⼰能够理解透彻⼀些,不能误⼈⼦弟,也不想和⽹上千篇⼀律的翻译官⽹的内容,官⽹的英⽂介绍也已经很详细了,于是我觉得还是以实际使⽤的过程进⾏⼀定的整理会更好。

初次了解ABP框架,对它还是⾮常惊艳的,它基本上是.NET 领域架构的集⼤成者,⼏乎囊括了我们.NET领域排的上名的各种技术应⽤,⽽且它本⾝可以⽀持.net framework和.net core两种技术流派,对它的介绍也是⾮常感兴趣。

1)ABP框架的特点我们来⼤概了解下ABP框架涉及到的内容。

依赖注⼊,这个部分使⽤ Castle windsor (依赖注⼊容器)来实现依赖注⼊,这个也是我们经常使⽤IOC来处理的⽅式;Repository仓储模式,已实现了Entity Framework、NHibernate、MangoDB、内存数据库等,仓储模式可以快速实现对数据接⼝的调⽤;⾝份验证与授权管理,可以使⽤声明特性的⽅式对⽤户是否登录,或者接⼝的权限进⾏验证,可以通过⼀个很细粒度的⽅式,对各个接⼝的调⽤权限进⾏设置;数据有效性验证,ABP⾃动对接⼝的输⼊参数对象进⾏⾮空判断,并且可以根据属性的申请信息对属性的有效性进⾏校验;审计⽇志记录,也就是记录我们对每个接⼝的调⽤记录,以及对记录的创建、修改、删除⼈员进⾏记录等处理;Unit Of Work⼯作单元模式,为应⽤层和仓储层的⽅法⾃动实现数据库事务,默认所有应⽤服务层的接⼝,都是以⼯作单元⽅式运⾏,即使它们调⽤了不同的存储对象处理,都是处于⼀个事务的逻辑⾥⾯;异常处理,ABP框架提供了⼀整套⽐较完善的流程处理操作,可以很⽅便的对异常进⾏进⾏记录和传递;⽇志记录,我么可以利⽤Log4Net进⾏常规的⽇志记录,⽅便我们跟踪程序处理信息和错误信息;多语⾔/本地化⽀持,ABP框架对多语⾔的处理也是⽐较友好的,提供了对XML、JSON语⾔信息的配置处理;Auto Mapping⾃动映射,这个是ABP的很重要的对象隔离概念,通过使⽤AutoMaper来实现域对象和DTO对象的属性映射,可以隔离两者的逻辑关系,但是⼜能轻松实现属性信息的赋值;动态Web API层,利⽤这个动态处理,可以把Application Service 直接发布为Web API层,⽽不需要在累赘的为每个业务对象⼿⼯创建⼀个Web API的控制器,⾮常⽅便;动态JavaScript的AJax代理处理,可以⾃动创建Javascript 的代理层来更⽅便使⽤Web Api,这个在Web层使⽤。

abp框架常见增删改查实例

abp框架常见增删改查实例

abp框架常见增删改查实例ABP( Boilerplate)是一种流行的开发框架,它提供了一套完整的解决方案,用于快速构建现代化的企业级应用程序。

在ABP 框架中,常见的操作包括增加(Create)、删除(Delete)、修改(Update)和查询(Retrieve)数据。

本文将通过几个实例来演示如何使用ABP框架进行常见的增删改查操作。

首先,我们来看一个简单的示例,演示如何使用ABP框架进行数据的增加操作。

假设我们有一个名为“Student”的实体类,包含学生的姓名、年龄和性别等信息。

我们可以通过以下代码来创建一个新的学生对象并将其保存到数据库中:```csharppublic async Task CreateStudent(string name, int age, string gender) {var student = new Student{Name = name,Age = age,Gender = gender};await _studentRepository.InsertAsync(student);}```在上述代码中,我们首先创建了一个新的学生对象,并设置其属性值。

然后,我们使用ABP框架提供的`InsertAsync`方法将学生对象插入到数据库中。

接下来,我们来看一个删除数据的示例。

假设我们要删除一个指定ID的学生对象。

我们可以通过以下代码来实现:```csharppublic async Task DeleteStudent(int id){var student = await _studentRepository.GetAsync(id);if (student != null){await _studentRepository.DeleteAsync(student);}}```在上述代码中,我们首先通过ID从数据库中获取到要删除的学生对象。

然后,我们使用ABP框架提供的`DeleteAsync`方法将学生对象从数据库中删除。

ABP框架使用(版本3.3.1)-EntityFramework

ABP框架使用(版本3.3.1)-EntityFramework

ABP框架使⽤(版本3.3.1)-EntityFrameworkpublic class Test : FullAuditedAggregateRootWithUser<Guid, AppUser>{public string TransactionNumber { get; set; }public virtual List<TestItem> TestItems { get; set; }}public class TestItem : AuditedEntity{public Guid TestId { get; set; }public Guid ItemId { get; set; }[ForeignKey("ItemId")]public Item Item { get; set; }public int Quantity { get; set; }public virtual List<TestSubItem> TestSubItems { get; set; }public override object[] GetKeys(){return new object[] { TestId,ItemId };}}public class TestSubItem : AuditedEntity{public Guid TestId { get; set; }public Guid ItemId { get; set; }[ForeignKey("TierId")]public Tier Tier { get; set; }public Guid TierId { get; set; }public int Quantity { get; set; }public override object[] GetKeys(){return new object[] { TestId, ItemId , TierId };}}1.当update TestItem的值,使⽤updateaync会报错2021-03-27 18:51:43.422 +08:00 [ERR] The instance of entity type 'TestSubItem' cannot be tracked because another instance with the same key value for {'TestId', 'ItemId', 'SubItemId'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.研究了好久,找不到⽅法override 这个类 StateManager.⽤下⾯改变 EntityState 的⽅法是有时凑效有时不凑效_context.Attach(modelPostedToController);IEnumerable<EntityEntry> unchangedEntities = _context.ChangeTracker.Entries().Where(x => x.State == EntityState.Unchanged);foreach(EntityEntry ee in unchangedEntities){ee.State = EntityState.Modified;}await _context.SaveChangesAsync();最后的解决⽅案是先 remove 再 update, ⽽且⼀定不能⽤ DbContext.SaveChangesAsync()要是⽤aynchu会报错public class TestItemRepository : EfCoreRepository<DRSDbContext, TestItem>, ITestItemRepository{public TestItemRepository(IDbContextProvider<DRSDbContext> dbContextProvider) : base(dbContextProvider){}public Task Save(List<TestItem> entities){DbContext.AttachRange(entities);DbContext.UpdateRange(entities);DbContext.SaveChanges();return pletedTask;}public Task Remove(List<TestItem> entities){DbContext.AttachRange(entities);DbContext.RemoveRange(entities);DbContext.SaveChanges();return pletedTask;}}2.当update sub entity的时候,如果sub entity有soft delete的话就会报duplicate key错。

ABP框架模板开发手册

ABP框架模板开发手册

ABP框架模板开发手册杭州蒙特信息技术有限公司2018年1月目录1ABP框架介绍 (3)1.1ABP简介 (3)1.2ABP多层结构 (3)1.3ABP环境 (5)1.4开发环境 (5)2搭建网站 (5)2.1获取源码 (5)2.2搭建数据库 (6)2.3搭建站点 (8)3模块开发 (9)3.1领域层 (9)3.2应用层 (18)4后台页面 (22)5前台页面 (27)6后台配置....................................................................................................错误!未定义书签。

1ABP框架介绍1.1ABP简介我们总是对不同的需求开发不同的应用。

但至少在某些层面上,一次又一次地重复实现通用的和类似的功能。

如:授权,验证,异常处理,日志,本地化,数据库连接管理,设置管理,审核日志等功能。

所以我们创建架构和最佳实践,如分层和模块架构,DDD,依赖注入等,并尝试开发应用时基于一些约定。

由于所有这些是非常耗时而且很难单独创建并可适用于每个项目,许多公司创建自己的框架,他们用自己的框架能快速开发新应用而且不出错。

但不是所有的公司都是幸运的,大部分公司没有时间,预算和团队来开发好的框架。

他们甚至都没有可能创建一个框架,因为编写文档,培训开发人员和维护框架都是非常困难的。

Boilerplate (ABP) 是一个开源并且有丰富文档的应用框架,开发宗旨是:“为所有公司,所有开发人员,开发出一个通用框架!”,而且不只是一个框架,同时提供一个强大的基于DDD的构架模型和最佳实践。

1.2ABP多层结构一个应用的代码库的分层是一个广为接受的技术,用来减少复杂度和提高代码复用性。

ABP依照DDD理念来分层,在DDD里有4个基本的层:•表示层:为用户提供一个界面。

使用应用层来完成用户交互。

•应用层:表示层与领域层的媒介。

ABP快速开发框架教程整理

ABP快速开发框架教程整理

ABP快速开发框架教程整理
ABP是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板,基于DDD的经典分层架构思想,实现了众多DDD的概念,诞生的主要目的就是为了让.NET程序员秒变架构师,将.NET企业级项目的主流开发技术、最先进的架构整合起来,让.NET工程师能够更快的开发出更好的项目。

Boilerplate是一个用最佳实践和流行技术开发现代WEB 应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板。

ABP是基于最新的 CORE, MVC和 Web API 技术的应用程序框架。

并使用流行的框架和库,它提供了便于使用的授权,依赖注入,验证,异常处理,本地化,日志记录,缓存等常用功能。

ABP实现了多层架构(领域层,应用层,基础设施层和表示层),以及领域驱动设计(实体,存储库,领域服务,应用程序服务,DTO 等)。

还实现和提供了良好的基础设施来实现最佳实践,如依赖注入。

ABP轻松地为您的项目创建启动模板。

它默认包括最常用的框架和库。

还允许您选择单页(Angularjs)或多页架构,EntityFramework或NHibernate作为ORM。

关于ABP框架高质量学习资料整理汇总「持续更新」
ABP入门系列目录-学习ABP框架之实操演练系列
Boilerplate 博客系列
ABP框架理论研究总结系列
ABP理论基础篇系列博客
基于DDD的现代开发框架-ABP系列文章总目录
ABP源码分析系列文章目录。

abp系列总结

abp系列总结

ABP系列总结简介ABP( Boilerplate)是一个开源的应用程序框架,旨在帮助开发人员快速构建和开发企业级应用程序。

它提供了一套先进的架构和常用功能,使开发人员能够专注于核心业务逻辑而不必花费太多时间处理基础架构。

本文将对ABP系列进行总结,介绍其主要特点、框架架构以及使用方法等内容。

主要特点ABP框架具有以下主要特点:1.模块化设计:ABP采用了模块化设计,开发人员可以根据需求添加或移除所需功能模块,以满足不同应用程序的特定要求。

2.多层架构:ABP采用三层(应用层、领域层和基础设施层)架构,使应用程序的各个部分分离独立,易于维护和测试。

3.领域驱动设计:ABP鼓励开发人员使用领域驱动设计(DDD)的思想,将业务逻辑和领域模型紧密结合,并按照业务需求进行设计。

4.通用功能:ABP提供了大量通用功能,如权限管理、用户角色管理、登录验证、多语言支持、缓存管理等,开发人员可以直接使用这些功能,省去重复编写代码的时间和精力。

5.跨平台支持:ABP支持多种平台,包括 Core、MVC、Xamarin、Angular等,开发人员可以选择适合自己的平台进行开发。

框架架构ABP框架采用三层架构,分为应用层、领域层和基础设施层。

1.应用层:应用层是应用程序的最高层,负责处理用户请求和调用领域层的服务。

它可以包含一系列应用服务,每个应用服务都是一个应用程序的特定功能。

开发人员可以在应用层实现业务逻辑,调用相应的领域服务来处理数据和状态。

2.领域层:领域层是应用程序的核心层,包含了业务逻辑和领域模型。

它定义了应用程序的行为和规则,并提供了一组领域服务供应用层调用。

开发人员可以在领域层实现具体的业务逻辑,并通过领域模型来处理和操作数据。

3.基础设施层:基础设施层是应用程序的最底层,提供了一些通用的功能和服务,使应用程序更易于开发和部署。

它包含了持久化层、外部服务和一些常用的工具类。

开发人员可以在基础设施层集成第三方库、管理数据库、处理日志记录和缓存等。

ABPvNext框架学习教程

ABPvNext框架学习教程

ABPvNext框架学习教程APB vNext 框架⼊门快速⼊门案例.NET Core 控制台应⽤1. 安装 ABP 框架核⼼依赖Install-Package Volo.Abp.Core -Version 3.3.22. 新建 ABP 应⽤的启动模块HelloAbpModule.csusing Volo.Abp.Modularity;namespace HelloAbp{/// <summary>/// 启动模块/// </summary>public class HelloAbpModule : AbpModule{}}3. 新建服务,并注册到启动模块中HelloWorldService.csusing System;using Volo.Abp.DependencyInjection;namespace HelloAbp{/// <summary>/// TODO: ABP 注册服务⽅式⼀:继承接⼝/// ISingletonDependency、IScopedDependency、ITransientDependency/// </summary>public class HelloWorldService : ITransientDependency{public void Run(){Console.WriteLine($"{nameof(HelloAbpModule)}-{nameof(HelloWorldService)}: Hello World!");}}}4. 根据启动模块创建 ABP应⽤,调⽤应⽤中注册的服务⽅法Program.csusing System;using Microsoft.Extensions.DependencyInjection;using Volo.Abp;namespace HelloAbp{class Program{static void Main(string[] args){// 根据启动模块创建 abp 应⽤var application = AbpApplicationFactory.Create<HelloAbpModule>();// 初始化 abp 应⽤application.Initialize();// 获取应⽤中注册的服务var service = application.ServiceProvider.GetService<HelloWorldService>();// 调⽤应⽤中的服务⽅法service.Run();Console.ReadKey();}} Core Web 应⽤程序1. 安装 ABP 框架核⼼依赖Install-Package Volo.Abp.Core -Version 3.3.2Install-Package Volo.Abp.AspNetCore.Mvc -Version 3.3.22.新建 ABP 应⽤的启动模块AppModule.csusing System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Http;using Microsoft.Extensions.Hosting;using Volo.Abp;using Volo.Abp.AspNetCore.Mvc;using Volo.Abp.Modularity;namespace HelloWebAbp{/// <summary>/// 启动模块/// TODO: 1.在启动模块中配置 Core Web 程序的管道,就需要定义对 Core Mvc模块的依赖 /// </summary>[DependsOn(typeof(AbpAspNetCoreMvcModule))]public class AppModule : AbpModule{/// <summary>/// 应⽤初始化⽅法/// TODO: 2.重写 ABP 应⽤的初始化⽅法,⽤来构建 Core 应⽤程序的中间件管道/// </summary>/// <param name="context"></param>public override void OnApplicationInitialization(ApplicationInitializationContext context){// base.OnApplicationInitialization(context);var app = context.GetApplicationBuilder();var env = context.GetEnvironment();if (env.IsDevelopment()){eDeveloperExceptionPage();}eRouting();// TODO: 5.将程序应⽤的端点配置修改为 ABP 应⽤的端点配置eConfiguredEndpoints();}}}3. 注册 ABP 启动模块,并初始化 ABP 应⽤Startup.csusing Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Microsoft.AspNetCore.Http;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;namespace HelloWebAbp{/// <summary>/// 程序启动类/// TODO: 3. 在 Startup 类中,完成对 ABP 应⽤的初始化/// </summary>public class Startup// This method gets called by the runtime. Use this method to add services to the container.// For more information on how to configure your application, visit https:///fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services){services.AddApplication<AppModule>();}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.InitializeApplication();}}}4. 新建控制器,测试 ABP 应⽤运⾏状态HomeController.csusing Microsoft.AspNetCore.Mvc;using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Volo.Abp.AspNetCore.Mvc;namespace HelloWebAbp.Controllers{/// <summary>/// 控制器/// TODO: 4. 继承 Abp 框架中的基类控制器(提供了⼀些便捷的服务和⽅法)/// </summary>public class HomeController : AbpController{public IActionResult Index(){return Content("Hello world!");}}}各个击破案例ABP应⽤中的模块可以有很多个,但是启动模块只能有⼀个;ABP应⽤中的每个模块之间没有必然的联系;ABP应⽤中每个模块注册的服务,都注册到了ABP应⽤的全局容器中;ABP应⽤中的模块也分为两种类型:应⽤程序模块(业务实现)和框架模块(技术实现);ABP应⽤中最顶层的模块是启动模块,最后被加载的也是启动模块。

ABP框架的基础配置及依靠注入讲解_

ABP框架的基础配置及依靠注入讲解_

ABP框架的基础配置及依靠注入讲解_ 这篇文章主要介绍了ABP框架的基础配置及依靠注入讲解,是ABP框架上手用法的基本,要的伴侣可以参考下配置ABP配置是通过在自己模块的PreInitialize方法中来实现的代码示例如下:public class SimpleTaskSystemModule : AbpModule{public override void PreInitialize(){//在你的应用中添加语言包,这个是英语和的土耳其语。

nguages.Add(new LanguageInfo("en", "English", "famfamfam-flag-england", true));nguages.Add(new LanguageInfo("tr", "Türke", "famfamfam-flag-tr")); Configuration.Localization.Sources.Add(new XmlLocalizationSource("SimpleTaskSystem",HttpContext.Current.Server.MapPath("~/Localization/ SimpleTaskSystem")));//配置导航和菜单Configuration.Navigation.Providers.AddSimpleTaskSys temNavigationProvider();}public override void Initialize(){IocManager.RegisterAssemblyByConvention(Assembly.Ge tExecutingAssembly());}}和orchard类似,abp框架一开头就被设计成模块化的,不同的模块可以通过abp框架来进行配置。

ABP框架介绍

ABP框架介绍

ABP框架介绍1.1 ABP总体介绍 - ⼊门介绍⽬前.NET上有不少开源框架。

⽐如Apworks和ABP。

其中Apworks是中国⼈写的⼀套开源框架。

它是⼀个全功能的,不仅可以写分布式应⽤,也可以写桌⾯应⽤。

ABP的全称是 boilerplate project(样板⼯程)。

是github上⾮常活跃的⼀个开源项⽬。

它并没有使⽤任何新的技术,只是由两名架构师将开发中常⽤的⼀些⼯具整合到了⼀起,并且部分实现了DDD的概念。

是⼀个开箱即⽤的框架,可以作为分布式应⽤的⼀个良好起点。

ABP是“ Boilerplate Project (样板项⽬)”的简称。

Boilerplate是⼀个⽤最佳实践和流⾏技术开发现代WEB应⽤程序的新起点,它旨在成为⼀个通⽤的WEB应⽤程序基础框架和项⽬模板ABP是“ Boilerplate Project (样板项⽬)”的简称。

Boilerplate是⼀个⽤最佳实践和流⾏技术开发现代WEB应⽤程序的新起点,它旨在成为⼀个通⽤的WEB应⽤程序基础框架和项⽬模板。

Boilerplate 基于DDD的经典分层架构思想,实现了众多DDD的概念(但没有实现所有DDD的概念)。

ABP的官⽅⽹站:ABP在Github上的开源项⽬:ABP框架于2014年5⽉4⽇⾸次在Github开源,截⽌到2015年5⽉25⽇,总共进⾏了1271次代码提交,49次版本发布,现在的版本号是0.6.1.1。

1.1.1 ABP采⽤了以下技术服务器端: MVC 5、Web API 2、C# 5.0DDD领域驱动设计(Entities、Repositories、Domain Services、Domain Events、Application Services、DTOs等)Castle windsor (依赖注⼊容器)Entity Framework 6 \ NHibernate,数据迁移Log4Net(⽇志记录)AutoMapper(实现Dto类与实体类的双向⾃动转换)客户端:BootstrapLessAngularJsjQueryModernizr其他JS库: jQuery.validate、jQuery.form、jQuery.blockUI、json21.1.2 ABP框架已实现了以下特性多语⾔/本地化⽀持多租户⽀持(每个租户的数据⾃动隔离,业务模块开发者不需要在保存和查询数时写相应代码)软删除⽀持(继承相应的基类或实现相应接⼝,会⾃动实现软删除)统⼀的异常处理(应⽤层⼏乎不需要处理⾃⼰写异常处理代码)数据有效性验证( MVC只能做到Action⽅法的参数验证,ABP实现了Application层⽅法的参数有效性验证)⽇志记录(⾃动记录程序异常)模块化开发(每个模块有独⽴的EF DbContext,可单独指定数据库)Repository仓储模式(已实现了Entity Framework、NHibernate、MangoDB、内存数据库)Unit Of Work⼯作单元模式(为应⽤层和仓储层的⽅法⾃动实现数据库事务)EventBus实现领域事件(Domain Events)DLL嵌⼊资源管理通过Application Services⾃动创建Web Api层(不需要写ApiController层了)⾃动创建Javascript 的代理层来更⽅便使⽤Web Api封装⼀些Javascript 函数,更⽅便地使⽤ajax、消息框、通知组件、忙状态的遮罩层“Zero”的模块,实现了以下功能:⾝份验证与授权管理(通过 Identity实现的)⽤户&⾓⾊管理系统设置存取管理(系统级、租户级、⽤户级,作⽤范围⾃动管理)审计⽇志(⾃动记录每⼀次接⼝的调⽤者和参数)在其他项⽬中的很多优秀设计,在ABP项⽬中也已存在,⽽且可能实现得更好。

【Net】ABP框架学习之它并不那么好用

【Net】ABP框架学习之它并不那么好用

【Net】ABP框架学习之它并不那么好⽤上⼀篇⽂章介绍了ABP的Web API,本⽂在继续介绍ABP的其他内容。

在ABP中,WEBAPI是⼀个值得⽤的东西。

但其他东西,就不⼀定是那么好⽤了。

因为越深⼊的学习ABP,你就越会发现,它⾃⾝有着⾮常强的设计约束,⽽⽽微软的框架已经有⼀定的约束了,再使⽤⼀套附加约束,显然会更⾟苦。

下⾯我们看⼀下ABP的Controller。

⾸先,我们创建⼀个MVC项⽬,AbpMvcController。

然后引⽤Abp.Web.Mvc。

使⽤了ABP后,必须修改WebApiApplication的继承类,所以,原来的初始化的路由等等信息,要换个地⽅写了,下⾯我们看看变化。

将WebApiApplication改为继承Abp.Web.AbpWebApplication;Global.asax修改如下:using Abp.Web;using AbpMvcController;using System;using System.Web;[assembly: PreApplicationStartMethod(typeof(PreStarter), "Start")]namespace AbpMvcController{public class WebApiApplication : Abp.Web.AbpWebApplication<StartServiceModule>{protected override void Application_Start(object sender, EventArgs e){base.Application_Start(sender, e);}}public static class PreStarter{public static void Start(){WebApiApplication.AbpBootstrapper.PlugInSources.AddToBuildManager();}}}然后在App_Start⽂件夹新建StartModule,StartModule继承 AbpModule。

ABP实践(一)创建ABP项目

ABP实践(一)创建ABP项目

ABP实践(⼀)创建ABP项⽬ABP是⼀个开源应⽤程序框架,专注于基于 Core的Web应⽤程序开发,但也⽀持开发其他类型的应⽤程序.ABP整合了.net开发中的各种技术新版的ABP需要依赖.NET 6的环境,需要先安装对应的SDK⼀.安装ABPdotnet tool install -g Volo.Abp.Cli⼆.创建项⽬这⾥使⽤ABP CLI来进⾏创建abp new ABP.Demo -u mvc -d ef -dbms MySQL -o "D:\ABPDemo"new的常⽤命令--output-folder或者-o: 指定输出⽂件夹,默认是当前⽬录.--ui或者-u: 指定ui框架.默认mvc框架.其他选项 (mvc、angular、blazor、none)--database-provider或者-d: 指定数据库提供程序.默认是ef.其他选项(ef、mongodb)-dbms:指定数据库类型三.⽣成的代码结构项⽬结构项⽬组织在src和test⽂件夹中. src⽂件夹包含实际应⽤程序,该应⽤程序基于前⾯提到的原则进⾏分层. 下图展⽰了解决⽅案的层和项⽬的依赖关系:Domain.Shared 项⽬项⽬包含常量,枚举和其他对象,这些对象实际上是领域层的⼀部分,但是解决⽅案中所有的层/项⽬中都会使⽤到.该项⽬不依赖解决⽅案中的其他项⽬. 其他项⽬直接或间接依赖该项⽬Domain 项⽬解决⽅案的领域层. 它主要包含实体, 集合根, 领域服务, 值类型, 仓储接⼝和解决⽅案的其他领域对象. 它依赖.Domain.Shared项⽬,因为项⽬中会⽤到它的⼀些常量,枚举和定义其他对象.Application.Contracts 项⽬项⽬主要包含应⽤服务 interfaces 和应⽤层的数据传输对象 (DTO). 它⽤于分离应⽤层的接⼝和实现. 这种⽅式可以将接⼝项⽬做为约定包共享给客户端.它依赖.Domain.Shared因为它可能会在应⽤接⼝和DTO中使⽤常量,枚举和其他的共享对象.Application 项⽬项⽬包含.Application.Contracts项⽬的应⽤服务接⼝实现.它依赖.Application.Contracts项⽬, 因为它需要实现接⼝与使⽤DTO.它依赖.Domain项⽬,因为它需要使⽤领域对象(实体,仓储接⼝等)执⾏应⽤程序逻辑..EntityFrameworkCore 项⽬这是集成EF Core的项⽬. 它定义了DbContext并实现.Domain项⽬中定义的仓储接⼝.它依赖.Domain项⽬,因为它需要引⽤实体和仓储接⼝..EntityFrameworkCore.DbMigrations 项⽬包含解决⽅案的EF Core数据库迁移. 它有独⽴的DbContext来专门管理迁移.(ABP是⼀个模块化的框架,理想的设计是让每个模块都有⾃⼰的DbContext类. 这时⽤于迁移的DbContext就会发挥作⽤. 它将所有的DbContext配置统⼀到单个模型中以维护单个数据库的模式. 对于更⾼级的场景,可以程序可以拥有多个数据库(每个数据库有⼀个或多个模块表)和多个迁移DbContext(每个都维护不同的数据库模式))它依赖.EntityFrameworkCore项⽬,因为它重⽤了应⽤程序的DbContext配置 ..DbMigrator 项⽬必要时创建数据库(没有数据库时).应⽤未迁移的数据库迁移.初始化种⼦数据(当你需要时).它依赖.EntityFrameworkCore.DbMigrations项⽬ (针对EF Core),因为它需要访问迁移⽂件.它依赖.Application.Contracts项⽬,因为它需要访问权限定义在初始化种⼦数据时为管理员⽤户赋予所有权限..HttpApi 项⽬⽤于定义API控制器.它依赖.Application.Contracts项⽬,因为它需要注⼊应⽤服务接⼝..HttpApi.Client 项⽬定义C#客户端代理使⽤解决⽅案的HTTP API项⽬. 可以将上编辑共享给第三⽅客户端,使其轻松的在DotNet应⽤程序中使⽤你的HTTP API(其他类型的应⽤程序可以⼿动或使⽤其平台的⼯具来使⽤你的API).它依赖.Application.Contracts项⽬,因为它需要使⽤应⽤服务接⼝和DTO..Web 项⽬包含应⽤程序的⽤户界⾯(UI).如果使⽤ Core MVC UI, 它包括Razor页⾯,javascript⽂件,样式⽂件,图⽚等...包含应⽤程序主要的appsettings.json配置⽂件,⽤于配置数据库连接字符串和应⽤程序的其他配置依赖.HttpApi项⽬,因为UI层需要使⽤解决⽅案的API和应⽤服务接⼝.Test 项⽬.Domain.Tests⽤于测试领域层. .Application.Tests⽤于测试应⽤层. .EntityFrameworkCore.Tests⽤于测试EF Core配置与⾃定义仓储. .Web.Tests⽤于测试UI(适⽤于 Core MVC UI). .TestBase所有测试项⽬的基础(共享)项⽬. 。

[置顶]ABP框架系列总目录(持续更新)

[置顶]ABP框架系列总目录(持续更新)

[置顶]ABP框架系列总⽬录(持续更新)Articles & TutorialsIntroduction & Step by Step..Advanced.MiscellaneousABP FrameworkOverall(整体)(介绍)(多层架构)(模块系统)(启动配置)(多租户)(OWIN集成)(调试)Common Structures(普通结构)(依赖注⼊)(会话)(缓存)(⽇志)(设置管理)(定时)(对象映射)(邮件发送)Domain Layer(领域层)(实体)(值类型)(仓库)(领域服务)(规格)(⼯作单元)(领域事件)(数据过滤)Application Layer(应⽤层)(应⽤服务)(数据转换对象)(验证数据转换对象)(授权)(特征管理)(审计⽇志)Distributed Service Layer(分布式服务层) Web API(Web API 控制器)(动态Web API 层)(OData集成)(Swagger UI 集成)Presentation Layer(表⽰层) MVC(MVC控制器)(MVC视图)(异常处理) Core( CORE集成)(本地化)(导航)(嵌⼊的资源)(JavaScript API)(CSRF/XSRF 保护)Background Services(背后的服务)(背后⼯作)(延迟集成)(Quartz集成)Real Time Services(实时服务)(通知系统)(SignalR 集成)Object-Relational Mapping(对象关系映射)(EF集成)(EF CORE集成)(Nhibernate 集成)NEW(Dapper集成)Releases(Nuget集成)Module ZeroStartup TemplatesFeaturesNEWReleasesOtherChinese translations of ABP's documentation (thanks to all contributors) Source 1:Source 2:Github:。

abpvnext快速搭建项目框架

abpvnext快速搭建项目框架

abpvnext快速搭建项⽬框架abp vnext 快速搭建项⽬框架刚发现图⽚不可看,https://shimo.im/docs/tHRDPcxw88rr6pgg/ 《abp vnext 快速搭建项⽬框架》,这是⽯墨笔记原⽂安装.net core develop 环境请查阅.net core 环境安装,也可以从VS 2019中安装,版本3.1.10(暂时项⽬不考虑.net5)安装 abp VNext clidotnet tool install -g Volo.Abp.Cli --version 3.3.2如果安装了最新版本,创建项⽬的时候需要指定为3.3.2安装时如意外终⽌,再进⾏安装时会报错,abp 与已有命令冲突,解决⽅法,在其他电脑安装好,将报错⽬录的⽂件拷贝过来就可以创建项⽬abp new Dx.Csp.VerificationCode -t app --tiered --no-ui --version 3.3.2-t 是模板默认是app,创建项⽬是可以不使⽤-t,另外⼀个选项为module,创建模块⽤--tiered 创建前后分离的项⽬--no-ui是忽略ui--version abp 版本项⽬结构如下依赖关系去除⽣成时⾃带模块1.Application2.Application.Contracts3.注释租户相关的服务4.删除或者注释掉IdentityServer相关服务如下5.注释Domian中不需要的模块6.注释租户配置7.注释Domian.Shared中不需要的模块8.注释掉⾃带⽤户相关配置包括DbSet<AppUser>9.注释EFCore中不需要的模块10.注释EfCore不使⽤的模块数据迁移11.删除创建项⽬⾃带的Migrations⽬录,执⾏数据迁移的时候⾃动⽣成12.注释HttpApi中不需要的模块13.注释Client模块中不需要的模块14.注释租户、认证、授权中间件(⽹关鉴权)修改配置1.修改Dx.Csp.Examples.DbMigrator,Dx.Csp.Examples.HttpApi.Host中appsettings.json数据库配置2.也可以⾃定义名称和DbContext中注解处相同即可3.修改使⽤mysql数据库,替换sqlserver引⽤4.配置使⽤MySQL新建实体配置数据库映射关系,Domain中新建⽬录可以将命名空间改短⼀些1.新建实体2.配置数据库映射创建服务接⼝,注意继承的接⼝不要丢了创建服务实现服务接⼝,注意箭头指的⽗类,和接⼝执⾏数据命令⽣成迁移脚本1.打开程序包管理控制器,选择DbMigrations类库2.设置控制台项⽬DbMigrator为启动项⽬3.Dx.Csp.Examples.Application中应⽤迁移依赖类库,直接复制过来就可以了在DbMigrations那个类库项⽬中有4.Add-Migration "init",看到To undo this action,use Remove-Migration 就成功了执⾏数据迁移,直接启动Dx.Csp.Examples.DbMigrator控制台项⽬就可以了,会提⽰迁移成功数据验证参阅⽂档命令⽣成最新版本没有问题,但是⽣成3.3.2这个版本是有问题的,可以⽣成最新版本然后改回去。

ABP框架开发-消息通知

ABP框架开发-消息通知

ABP框架开发-消息通知 业务型⽹站使⽤过程中,消息通知是⼀个不可或缺的功能,采⽤站内通知、短信通知、邮件通知、微信通知等等各种⽅式都有,ABP框架对这部分⼯作已经封装的很好了,站在巨⼈的肩膀上,⼀览全貌,带来的就是⼼情舒畅。

ABP官⽹地址:⼀、明确概念及设计 ⼀次完整的消息发送/接收过程中,会存在⼏个必要的点,也正如同现实⽣活中的场景,有⼈发送,有⼈接收,发送的消息本⾝也有类型。

1、消息类型定义 在ABP中已经提供了消息类型定义的相关类,但是需要我们去实现,在领域层新建⼀个Notifications⽂件夹并添加⼀个定义常⽤消息类型名称的静态类如AppNotificationNames(名称可随意),在其中开始定义消息类型名称。

///<summary>///设置应⽤程序中常⽤通知唯⼀的名称常量///</summary>public static class AppNotificationNames{#region新的任务public const string NewTask = "App.NewTask";#endregion#region简单消息public const string SimpleMessage = "App.SimpleMessage";#endregion} 其次,开始消息类型定义,新建⼀个NotificationProvider的类,完成消息类型定义,管理消息类型时,可以针对消息设置权限,这样⽅便不同的⾓⾊拥有不同的消息通知。

///<summary>///消息类型定义///</summary>public class AppNotificationProvider : NotificationProvider{///<summary>///设置消息类型///</summary>///<param name="context"></param>public override void SetNotifications(INotificationDefinitionContext context){#region任务提醒context.Manager.Add(new NotificationDefinition(AppNotificationNames.NewTask,displayName: L("NewTask"),permissionDependency: new SimplePermissionDependency(PermissionNames.Pages_TaskManage)));#endregion}private static ILocalizableString L(string name){return new LocalizableString(name, SurroundConsts.LocalizationSourceName);}} 最后在领域层的Module.PreInitialize()中完成加⼊。

ABP框架-动态WebApi层

ABP框架-动态WebApi层

ABP框架-动态WebApi层本节内容:创建动态Web Api 控制器这个⽂档是关于 Web Api的,如果你对 Core感兴趣,可查看⽂档。

ABP可为你的应⽤层⾃动创建 Web Api层,假设我们有⼀个如下所⽰的:public interface ITaskAppService : IApplicationService{GetTasksOutput GetTasks(GetTasksInput input);void UpdateTask(UpdateTaskInput input);void CreateTask(CreateTaskInput input);}我们想把这个服务作为⼀个Web Api控制器暴露给客户端,ABP可通过⼀⾏配置为这个应⽤服务,⾃动动态创建⼀个Web Api控制器:Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder.For<ITaskAppService>("tasksystem/task").Build();这就完事了。

⼀个api控制器被创建在地址“/api/services/tasksystem/task”下,所有的⽅法客户端都可以使⽤。

这个配置应当在你的的⽅法⾥完成。

ITaskAppService是想要⽤⼀个api控制器来包装的应⽤服务接⼝,它对于应⽤服务不是必需,但这是⼀种约定和建议的做法。

“tasksystem/task”是这个api控制器的名称和⼀个任意的命名空间,你应当定义⾄少⼀级的命名空间,但你可以定义更深的命名空间,如“myCompany/myApplication/myNamespace1/myNamespace2/myServiceName”。

“/api/services”是所有动态Web Api控制器的前缀,所以这个Api控制器的地址形如“/api/services/tasksystem/task”,GetTasks⽅法的地址将是“/api/services/tasksystem/task/getTasks”,⽅法名被转换成驼峰形式,因为在Javascript世界⾥就是这样约定俗成。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

BPFrameWork框架技术手册济南驰骋信息技术有限公司2012/5/5目录1总体说明 (3)1.1 总体说明 (3)1.2映射机制 (3)1.3架构图 (5)1.3.1应用程序架构 (5)1.3.2 BP架构案例图 (5)2底层类库BP.En30.dll (7)2.1数据访问层BP.DA (7)2.1.1运行SQL与存储过程 (7)2.1.3写入日志 (9)2.1.4其它 (9)2.2实体层BP.En (10)2.2.1实体继承图 (10)2.2.2实体基础操作 (15)2.2.3实体集合操作 (17)2.3系统类库BP.Sys (19)2.4组织结构类库BP.Port (20)2.4.1组织结构表 (20)2.4.2组织结构相关操作 (21)3 控件层类库BP.Web.Contral.dll (22)4 前台Web应用 (22)4.1前台类库App_Coder (22)4.2通用组件Comm (22)4.2.1查询模式 (22)4.2.2批处理模式 (23)4.2.3增删改查模式 (23)4.2.4分组分析模式 (23)4.2.5对比分析模式 (24)4.3其它系统文件夹 (24)4.3.1系统数据文件夹Data (24)4.3.2用户数据文件夹DataUser (24)4.3.3图片文件夹Images (24)5演示案例说明 (24)3.1映射机制: (24)3.2组件研究( M-4): (24)第1类:抽象组件 (24)第2类:抽象业务组件(多应用于web网站类的项目) (27)第3类:机制类组件(多应用于web网站类的项目) (27)第4类:控件(多应用于web网站类的项目) (28)1总体说明1.1总体说明BP框架是一个简单、简洁、灵活的开源框架。

利用BP框架可以方便的书写表单你的业务逻辑。

目前复杂的ccflow就是建立在BP框架上。

BP框架目前来说,善于处理MIS系统上的复杂业务逻辑表述与MIS系统的开发。

使用BP框架可以节省大量重复劳动。

BP框架的核心基础是映射。

在映射的基础上创建出来各种抽象模块的应用,可以为我们的项目开发奠定基础。

1.2映射机制这里提出的映射概念已经不单单是类的属性与表结构的映射。

它涉及UI层的映射(查询条件,数据显示顺序与方式)、外键与枚举类型的映射、实体与实体的映射(包含两种:明细与多对多的映射)、方法的映射。

以及基础信息映射设置。

本人认为映射是实现可复用的基础。

对于映射的机制有如下三种:以上三种各有优缺点,大家通常认为,1,2两种方式常被人所理解。

但是在我看来第三种方式最值得提倡。

因为它的表达方式很灵活。

第2种经常被用在属性变长属性应用里。

比如工作流表单设计,商品属性设计中。

把2,3两种方式的优点结合,这方面的功能还没有开发。

map.AddTBStringPK(StuAttr.No, null, "学号", true, false, 4, 4, 4); //增加一个主键 map.AddTBString(, null, "名称", true, false, 0, 50, 300);map.AddDDLSysEnum(StuAttr.XB, 0, "性别", true, true, "XB", "@0=女@1=男"); //增加一个枚举。

map.AddTBString(StuAttr.Tel, null, "电话", true, false, 0, 200, 300);map.AddTBString(StuAttr.Addr, null, "地址", true, false, 0, 50, 300,true); //让这个TextBox 占正行显示。

map.AddTBDate(StuAttr.BDT, null, "出生日期", true, false);map.AddDDLEntities(StuAttr.FK_BJ, null, "班级", new BJs(), true); //增加一个外键。

map.AddTBStringDoc(StuAttr.Doc, null, "介绍", true, false);map.AddMyFile("照片"); //增加一个附件,可以增加多个附件。

map.AddSearchAttr(StuAttr.FK_BJ); //查询条件映射map.AddSearchAttr(StuAttr.XB); //查询条件映射map.AddDtl(new StuDtls(), StuDtlAttr.FK_Stu); //明细表的映射map.AttrsOfOneVSM.Add(new StuKMs(), new KMXXs(), StuKMAttr.FK_Stu,StuKMAttr.FK_KM,, KMAttr.No, "选修科目");//多对多的关系映射#region方式映射。

RefMethod rm = new RefMethod();rm.Title = "一户式资料";rm.ClassMethodName = this.ToString() + ".DoOpen";map.AddRefMethod(rm);rm = new RefMethod();rm.Title = "导入\\导出";rm.Warning = "确定要执行吗?";rm.IsForEns = false;rm.IsCanBatch = true;rm.ClassMethodName = this.ToString() + ".DoDataIO";map.AddRefMethod(rm);//带有参数的方法。

rm = new RefMethod();rm.Title = "分班";rm.IsForEns = false;rm.IsCanBatch = true;rm.HisAttrs.AddDDLEntities("FK_BJ", null, "选择班级", new BJs(),true);rm.HisAttrs.AddTBString("Note",null,"说明",true,false,0,20,20);rm.ClassMethodName = this.ToString() + ".DoFB";map.AddRefMethod(rm);以上的映射包含了6个方面:1,实体类与物理表字段的映射。

2,实体类的属性在组件中显示方式的映射。

3,实体类属性关系的映射。

4,实体类查询条件映射。

5,多对多的关系映射。

6,方法的映射(带有参数与没有参数的)。

1.3架构图1.3.1应用程序架构1.3.2 BP架构案例图以下两个案例图就是CC开源的产品。

1.4类设计与数据库设计命名规则总体规则1,以英文命名,每一个字母大写,提倡用简写。

比如Emp 人员Dept 部门Station 岗位。

2,如果英文名称太长,或者不常用可考虑用中文命名,建议用中文的缩写。

比如管理机关GLJG。

3,对于类与表的命名必须有前缀,比如BP.Port.Dept 类名,表名为Port_Dept.。

4,前缀命名尽量简单。

比如考核命名空间英文名称为Check 空间可以命名为CH。

共用的类英文名称为Public 可简写为Pub.类库设计规则:1,格式为BP+前缀+类名。

比如:BP.Port.Emp 人员类。

2,属性命名与字段命名相同。

特殊属性可以遵守总体命名规则。

3,类库的倒数第一个命名空间要与要与物理表的前缀一致。

比如:物理表考核项目。

BP.CH.CheckIiems。

物理表为CH_CheckItem。

4,如果一个属性是外部实体或者枚举类型,以His 开头。

比如在类人员中的部门类HisDept. 5,方法命名规则,遵守总体命名规则的第1,2条。

6,变量的命名规则,字母小写,以下划线开头。

比如:age 年龄。

addr 地址。

要求每一行都要有注释。

数据库设计命名规则:1, 物理表命名格式前缀+“_”+对应的类名。

部门操作员Port_Emp, Port_Dept ,CH_CheckItem. WF_Flow。

2,视图命名格式。

“V_”+ 前缀+ “_”+对应的类名。

V_CH_CheckItemExt。

3, 存储过程命名规则“Pro_”+ 前缀+ “_”+过程名称. 比如Pro_Sys_Init.4,函数命名规则“Fun”+ 前缀+ “_”+函数名. 比如:Fun_Sys_GenerOID.5, 外键字段命名规则“FK_”+对应的物理表类名. 比如:在人员表(Port_Emp)中表示部门的字段FK_Dept. 同事一看就知道,这个字段是外键,并且它的对应到Dept这个类的物理表上。

6, 取消日期与日期时间类型的字段,用string类型字段表示日期类型,日期格式为yyyy-MM-dd HH:mm 时间格式为: yyyy-MM-dd HH:mm.7, 取消boolen类型字段应int类型表示1表示true,0表示false. Boolen类型必须以Is开头比如:IsPass是否通过。

IsEnable 是否禁用。

8, 对于枚举类型的字段用int类型表示,分别存储在Sys_Enum 与Sys_EnumMain表里。

9, 新设计的主键表必须以MyPK,OID,No 三种名称命名(多对多的实体除外)。

2底层类库BP.En30.dllBP.En30.dl 是一个基层的开源类库,CC所有的项目都把这个层放在最底部。

2.1数据访问层BP.DADA 是data access 的缩写,在这个命名空间里的类担负着执行与数据库交互的使命。

开发人员在前台书写业务逻辑时直接按照定义的来调用。

除此之外一些通用性的函数与放在这个命名空间下了。

比如:访问excel 文件,字符集的处理,人民币大写的转换,汉字到拼音的转换。

日志类库的记录等等,字串的转换。

2.1.1运行SQL与存储过程2.1.3写入日志BP会按日期日期生成一个文件放在D:\ccflow\VisualFlow\DataUser\Log目录下根据写入日志的内容我们分如下几种类型:提示信息:比如: 14日12时35分26秒Info:System');"成功[BP.Port.Emp-13]放入缓存。

相关文档
最新文档