以ABP为基础架构的一个中等规模的OA开发日志

前言:

最近园子里ABP炒的火热。看了几篇对于ABP的介绍后,深感其设计精巧,实现优雅。个人感觉,ABP或ABP衍生品的架构设计,未来会成为中型Net项目的首选架构模式。如果您还不了解ABP是什么,有什么特色,请移步:《ABP集合帖》——http://www.cnblogs.com/kebinet/p/5341663.html


 项目背景介绍:

  作者自参加工作以来,一直在法律圈打转。09-12年间,作者曾带团队用WebForm+N层架构实现了一个律师事务所的OA系统。时过境迁,现在在维护此系统时,发现了当初很多设计不合理的地方。所以本项目延续原OA系统的设计思路,以ABP为基础架构,进行彻底重构。

  注意:本系列文章定位为开发笔记,不代表ABP的最佳实践。


 一、ABP是什么,ABP.Zero又是什么?从哪里下载ABP项目模板?

  ABP全称为:“ASP.NET Boilerplate Project (ASP.NET样板项目)”。顾名思义,ABP实质上是一个.Net开发的分层示例+各种开发辅助类库。ABP是一个以DDD设计模式为原则的Net项目分层示例+一大堆作者写的辅助类库。

  ABP.Zero则是ABP的作者配合ABP框架写的一套用户模块。其本质是对ASP.NET Identity的二次封装。

  ABP.Zero是一个独立模块。可用可不用。如果您的程序中,用户模块非常独特,建议您不要使用ABP.Zero模块,而是独立实现一套用户系统。在我们的示例项目中,用户模块也是非常独特的,作者会尽可能尝试用ABP.Zero去解决,如果实在无法适用,那么我们将做一套独立的用户模块去替代。

  •  ABP作者官网:http://www.aspnetboilerplate.com/

  • GitHub地址:  https://github.com/aspnetboilerplate/

 

(请默默感谢这两位主要维护人员。如此优秀的开源项目,值得32个赞)

 

 

 如图所示,登录官网首页后,即可以下载ABP项目模板。这里,我们选择了使用.net framework4.5.2+mvc5的多页面实现。ORM我们选择了EntityFramework,并且选择使用ABP.Zero模块。(此处也可不选,日后需要时再安装)。注意最底部的【EasyFast】,此处是你的解决方案名称。下载并解压后,我们得到了如下文件:

我们将解决方案名称换成了中文【易迅律师事务所OA系统】。(作者手里有多份OA实现,为了防止歧义,才换了中文名称,此处改不改不会对项目本身造成任何影响)

 

 

二、ABP使用前的基本设置

2.1、程序包的还原与更新(必须)

   我们下载回来的ABP不包含对应packages(例如Newtonsoft.Json、EntityFramework、Log4net等等)。所以在使用前,请先在解决方案上右键,然后选【还原NuGet包】,等全部包下载完成后,再在解决方案上右键,选择【管理解决方案的NuGet程序包】,看看是否有更新,如果有,请同步更新。

请注意:上图所示的包无法更新,会提示有冲突,请忽略,不用更新此包。

 

 

2.2、修改数据库连接字符串(非必须)

  解决完包的问题后,我们来修改下数据库连接字符串ABP默认的数据库连接字符串名字叫【Default】。嗯,不够高大上,另此字符串的部分参数也不够合适,我们同步修改。此步骤一共需要修改三个文件:

  1. EasyFast.Web =>Web.config。——修改数据库连接字符串。name改为【AppDbContext】,内容改为用户名+密码连接方式

  2. EasyFast.EntityFramework=>EasyFastDataModule.cs 。——修改为:Configuration.DefaultNameOrConnectionString = "AppDbContext";

  3. EasyFast.EntityFramework.EntityFramework=>EasyFastDbContext.cs。——修改为:public EasyFastDbContext() : base("AppDbContext")

web.config修改前:

1
2
3
< connectionStrings >
   < add  name="Default" connectionString="Server=localhost; Database=EasyFast; Trusted_Connection=True;" providerName="System.Data.SqlClient" />
</ connectionStrings >

web.config修改后:

1
2
3
4
5
6
7
8
<connectionStrings>
     <add name= "AppDbContext"  connectionString="data source=(local);
          initial catalog=oa.easyfast.cn;
          user id=sa;
          password=info@123;
          MultipleActiveResultSets=True;
          App=EntityFramework " providerName=" System.Data.SqlClient" />
   </connectionStrings>

小知识——MultipleActiveResultSets=True & Trusted_Connection=True

  当在数据库连接字符串中指定MultipleActiveResultSets=True时。可以在一个连接上执行多次查询。这样可大大减轻数据库压力,提高程序负载能力。强烈推荐开启。

  当在数据库连接字符串中指定Trusted_Connection=True时,意味着这是一个可信连接。不需要输入用户名密码就可以登录数据库。在正式的生产服务器上,不推荐这么做。(启用该属性,实质上是使用windows账户进行数据库连接。在生产服务器上,windows账户和SQLServer账户应该设置为不同的账户以降低安全风险)

 

 

2.3、修改程序命名空间(非必须)

  ABP默认使用了简化的命名空间。对于本项目来说,EasyFast.Application、EasyFast.Core、Easyfast.EntityFramework三个层统一使用了EasyFast作为命名空间。EasyFast.WebApi则使用了EasyFast.Api作为命名空间。对于Application、Core、EntityFramework三个层来说,随着项目越来越大,使用相同的命名空间容易引起歧义。所以我们做如下修改:

  • EasyFast.Application——命名空间修改为EasyFast.Application

  • EasyFast.Core——命名空间修改为EasyFast.Core

  • Easyfast.EntityFramework——命名空间修改为Easyfast.EntityFramework

  • EasyFast.Api——暂时保持不变

图示:在Application、Core、EntityFramework三个项目上右键,选择属性,将对应的默认命名空间分别修改为EasyFast.Application、EasyFast.Core、EasyFast.EntityFramework

  注意:修改命名空间后,需同步修改相应的代码引用。否则程序无法编译通过。请慎重考虑此处是否修改。 

2.4、修改启动项目(必须)

  ABP的默认启动项目是Core层,这样每次调试时非常麻烦,我们将启动项目修改为【当前选定项】,这样我们在编辑完view页面时,直接按Ctrl+F5就可以直接查看效果。而不用每次都在页面上选择【使用浏览器查看】。修改方法:在解决方案上右键,选择属性,在新打开的窗口中将通用属性中的启动项目选项修改为【当前选定内容】

 

2.5、初始化数据库(必须)

  ABP项目模板中,默认保留了大量model修改记录。在SQL2014环境下,初始化数据库可能会失败。解决办法:删除所有的model修改记录,重新初始化。请删除下图中数字开头的类文件。然后载程序包管理控制台执行【Add-Migration Init】、【Update-DataBase】。注意,在程序包管理控制台中,默认项目需选中EasyFast.EntityFramework。且在执行命令前,鼠标需先选中EasyFast.Web项目。

  在执行Add和Update两个命令时,程序需先连接至数据库以确定到底需要更新什么(需要建立、更新、删除哪些表)。但是,在EasyFast.EntityFramework项目中,没有数据库连接字符串。所以程序会卡死一段时间。

  解决办法1:在执行命令前,在【解决方案资源管理器】选中web项目(此项前提是上一步中,在解决方案属性中,将启动项目修改为【当前选中项目】)。如此操作,可以让VS知道通过web项目中web.config中的数据库连接字符串去连接数据库。

  解决办法2:EasyFast.EntityFramework层中,修改App.config文件,将Web项目中web.config中的连接字符串复制到【<configuration>】节点后。

 

三、本章节所使用的源码

  项目已开源,GitHub地址:https://github.com/easyfast/LawfirmOA

原文地址:http://www.cnblogs.com/brucelee/p/6009879.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 指令基本使用大全

转载自 vue 指令基本使用大全 指令 解释&#xff1a;指令 (Directives) 是带有 v- 前缀的特殊属性作用&#xff1a;当表达式的值改变时&#xff0c;将其产生的连带影响&#xff0c;响应式地作用于 DOM 常用指令 v-textv-htmlv-bindv-text 解释&#xff1a;更新元素的 textCon…

JAVA基础学习---Markdown

这里写自定义目录标题Markdown学习标题字体引用分割线图片超链接列表有序列表无序列表表格代码进退源代码模式Markdown学习 标题 加上空格是一级标题&#xff0c;二级标题是两个#加上空格&#xff0c;以此类推 字体 hello&#xff0c;world 前后各加两个*是粗体 hello&…

opencv立方体的画法_用opengl立方体的画法

/*** &#xff01; 使用该程序前须知 &#xff01;1.首先下载 glut-3[1].7.6.rar 压缩包2.解压后里面会有如下三个文件&#xff0c;把这三个文件分别放入 to 后的文件夹glut32.dll to C:\windows\System32glut32.lib to ..\..\VC98\lib 这个目录在VC6.0安装目录中可以找到glut.…

oracle基本笔记整理及案例分析1

/* Oracle数据库的应用 */--创建一个自动增长的表空间worktbs create tablespace worktbs datafile E:\E盘\worktbs01.dbf size 10M autoextend on;--删除表空间 --drop tablespace worktbs;--在表空间里面创建一个新用户 create user martin --用户名 identified b…

使用 JavaScriptService 在.NET Core 里实现DES加密算法

文章《ASP.NET Core loves JavaScript》和《跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题》为我们扩展.NET Core的API提供了一套解决方案&#xff0c;上周在看.NET的加解密算法发现目前为止没有包括DES算法&#xff0c;github上在才刚刚加入&am…

电脑基本快捷键的使用

电脑快捷键 Tab键 等于六个空格 Alt键 Alt加上F4关闭当前窗口 Ctrl键 Ctrl加S保存 shift键 shift加delete永久性的删除(不会出现在回收站中) win win加E打开我的电脑 win加tab桌面多窗口预览,切换 其他 cmd打开命令行窗口 任务管理器结束进程后 cmd输入explorer可…

IDEA把Springboot打成可执行jar包,内嵌tomcat 这个可以用

IDEA把Springboot打成可执行jar包&#xff0c;内嵌tomcat 2018年11月23日 18:36:30 ta山之石可以攻玉 阅读数 3061 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。https://blog.csdn.net/qq_30264689/article/details/84401995 IDEA把spring-boo…

axios使用说明

转载自 axios使用说明安装 使用 npm: $ npm install axios使用 bower: $ bower install axios使用 cdn: <script src"https://unpkg.com/axios/dist/axios.min.js"></script>Example 执行 GET 请求 // 为给定 ID 的 user 创建请求 axios.get(/user?ID1…

keras优化算法_自然场景文本识别(OCR),keras-yolo3-densenet-ocr

自然场景文本识别我之前是做自然语言的&#xff0c;但公司有个ocr的项目必须要做&#xff0c;因此开始学习ocr相关知识&#xff0c;边学边做两个多月&#xff0c;还有很多不太明白的地方&#xff0c;只能大概讲一讲经验教训。自然场景文本分类包括两个步骤&#xff0c;1、文本检…

JAVA---DOS命令学习

DOS命令学习 打开方式 1.开始加系统加命令行提示符 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aUOHads9-1608564937227)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201221231009813.png)] 2.在搜索框中搜索cmd 3…

Google发布用于Google Cloud的.Net API

Google近期宣布针对Google Cloud API的.Net支持。这包括C#绑定和PowerShell cmdlet。还有一个Visual Studio扩展&#xff0c;它允许在Google Compute Engine上浏览Google Cloud 资源和部署Asp.Net 应用。 针对Google Cloud API的C#绑定 该C#绑定提供对以下Google Cloud服务的访…

Vue.js2.0开发环境搭建(一)

转载自 Vue.js2.0从入门到放弃---入门实例&#xff08;一&#xff09;最近&#xff0c;vue.js越来越火。在这样的大浪潮下&#xff0c;我也开始进入vue的学习行列中&#xff0c;在网上也搜了很多教程&#xff0c;按着教程来做&#xff0c;也总会出现这样那样的问题&#xff08…

联通培训 老师教的 bootstrap row 里面都是12行不断的分割成小格子

<!DOCTYPE html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>欢迎页</title><meta content"widthdevice-width, initial-scale1, maximu…

numpy 数组抽取_清晰易懂的Numpy入门教程

原标题&#xff1a;清晰易懂的Numpy入门教程翻译 | 石头来源 | Machine Learning PlusNumpy是python语言中最基础和最强大的科学计算和数据处理的工具包&#xff0c;如数据分析工具pandas也是基于numpy构建的&#xff0c;机器学习包scikit-learn也大量使用了numpy方法。本文介绍…

oracle基本笔记整理及案例分析2

/**//* tp_orders表空间&#xff0c;大小10M&#xff0c;文件大小可自动增长&#xff0c;允许文件扩展&#xff0c;最大限度为无限制 创建A_oe用户的默认表空间为tp_orders 密码 bdqn 授予connect,resource权限党文a_hr用户的employee */ --创建表空间和用户&#xff0c;并授予…

Debugging into .NET Core源代码的两种方式

一、前言 .NET开源时间还不长&#xff0c;因为一直在做YOYOFx的关系&#xff0c;所似我常常有更深入的了解.NET Core和ASP.NET Core内容的需求&#xff0c;并且.NET Core平台与之前版本的变化太大&#xff0c;这也导致我经常要去查看源代码中&#xff0c;来了解ASP.NET Core和.…

JAVA基础学习大全(笔记)

JAVASE和JAVAEE的区别 JDK的安装路径 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-perPRPgq-1608641067105)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20201222001641906.png)] 卸载和安装JDK [外链图片转存失败,源站…

Vue.js2.0开发环境搭建(二)

转载自 Vue.js 2.0从入门到放弃---入门实例&#xff08;二&#xff09;前面一篇博客介绍了从零开始准备Vue.js所需的一些环境和工具。这片博客就来跟大家探讨一下Vue.js 2.0中的一些特性&#xff0c;以及一个小实例&#xff0c;通过实例来跟大家分享&#xff0c;想必更容易理解…

工程打包是什么意思_太生动形象了!500个建筑施工3D动画演示,施工工艺一目了然,零基础工程人也能看懂...

在建筑行业干了这么多年&#xff0c;老杨深知其中的艰辛。刚毕业的时候去了中建&#xff0c;那时候带我的老师傅很忙&#xff0c;天天都让看书&#xff0c;看得头晕眼花&#xff0c;不懂的地方也不好意思去问&#xff0c;后来还是一个同事给了这500个建筑施工3D动画演示&#x…

使用 dotnet watch 开发 ASP.NET Core 应用程序

原文&#xff1a;Developing ASP.NET Core applications using dotnet watch作者&#xff1a;Victor Hurdugaci翻译&#xff1a;谢炀(Kiler)校对&#xff1a;刘怡(AlexLEWIS)、许登洋(Seay) 介绍 dotnet watch 是一个开发阶段在源文件发生变动的情况下使用 dotnet 命令的工具。…