ImageVerifierCode 换一换
格式:DOCX , 页数:70 ,大小:406.86KB ,
资源ID:3265411      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3265411.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(软件开发架构知识体系个人积累.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

软件开发架构知识体系个人积累.docx

1、软件开发架构知识体系个人积累开发框架.C#语法委托委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch) 语句,同时使程序具有更好的可扩展性。使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。.Net 生命周期Asp.Net生命周期与Asp.Net页的生命周期是一个比较重要的话题,有时可能似乎知道一些,但又说不出个所以然,而且时常把这两个概念混淆。现在也是该好好理清思路,把这两个概念搞懂。Asp.

2、Net生命周期Asp.Net应用程序生命周期以浏览器向Web服务器(IIS)发送请求为起点。Web服务器接收到请求时,会对所请求文件的文件扩展名进行检查,确定应该由哪一个ISAPI扩展(Asp.Net是Web服务器下的一个ISAPI扩展)来处理请求,并传递给它(这里指Asp.Net)。Asp.Net处理已映射到其上的文件扩展名(.aspx,.ascx,ashx,asmx)。当Asp.Net接收到应用程序中任何资源的第一个请求时,ApplicationManager这个类会创建一个应用程序域,并创建HostingEnviroment这个类的实例来提供有关应用程序的信息。Asp.Net会为每个请求

3、创建并初始化核心对象(HttpContext,HttpRequest,HttpResponse)。Asp.Net初始化所有核心对象之后,将通过创建HttpApplication类的实例来启动应用程序,如果应用程序有Global.asax文件,则Asp.Net会创建Global.asax类的一个实例,并使用该派生类来表示应用程序。最后由HttpApplication管线来处理请求。总结Asp.Net生命周期大致由五大阶段构成:分别是:发出请求,接受请求,为每个请求创建核心对象,将HttpApplication对象分配给请求,由HttpApplication管线处理请求。应用程序域应用程序域是由C

4、LR强制的一个边界,用来保证应用程序不受其他程序的影响。Asp.Net页面的生命周期Asp.Net页面运行时,此页面也会经历一个生命周期,在生命周期中将会执行一系列处理步骤。了解页面生命周期是非常重要的,因为这么做你就能够在生命周期的合适阶段编码。此外,如果你要开发自定义控件,就必须熟悉页面的生命周期,以便正确进行控件的初始化。一般来说,一个Asp.Net页面要经历下面几个阶段:1.浏览器提出请求浏览器提出请求发生在页面生命周期开始之前。浏览器请求页,Asp.Net将确定是否需要分析和编译页,或者是否可以在不运行页的情况下发送页的缓存版本。2.页面框架初始化 Page.InitAsp.Net在

5、这个阶段开始创建页面,它产生你在.aspx页面里用标签定义的所有的控件。此外,如果页面是一次回送(POST),Asp.Net将反序列化视图状态信息并把它们应用到所有控件上。Page.Init事件被触发。3.用户代码初始化 Page.Load不管页面是Get请求还是POST请求,Page.Load事件会被触发。4.验证在验证期间,将调用所有控件的Validate方法,此方法将设置各个验证控件和页面的IsValid属性。5.事件处理在这个阶段,页面已经被完全装载且通过验证,Asp.Net将会触发在上次回发后发生的所有事件。6.呈现在呈现之前,会针对该页和所有控件保存视图状态。在呈现阶段中,会调用每

6、个控件的Render方法。在这个阶段,页面和控件对象任然可以用,因此可以执行一些最终步骤.7.清除在这个阶段,页面开始执行清除工作,并触发Page.UnLoad事件,此时页面对象虽然还可以使用,但是最终的HTML已经被呈现且不可以修改。技能要求前端思想:响应式布局、单页面应用、图标字体、MVVM、JS模块化、JS模板引擎技术/框架:HTML5、CSS3、LESS、Jquery、Bootstrap、Framework7组件:Webuploader、Ueditor/Umeditor、Highcharts、Jquery.dataTables、Jquery.form、Jquery.validate、J

7、query.Jcrop、Jquery.mCustomScrollbar、Spectrum、Toastr、BlockUI、SuperSlide,还有一大堆小的Jquery插件就省略了后端:思想:DDD(领域驱动设计)、TDD(测试驱动设计)、DI/AOP(依赖注入/面向切面编程)、模块化开发、异步编程、分布式架构、敏捷开发之SCRUM技术/框架:A MVC5、C# 5.0、Entity Framework 6、xUnit+NSubstitute+Shouldly、aspnetboilerplate工具:Git、VS2013、Sql Server、MongoDB、Redis开源组件:AspNet.

8、Identity、AutoMapper、Castle.Windsor、MiniProfilerEmitMapper权限验证、数据验证、异常处理、事务处理、数据转换等全在基础架构上完成,模块开发者不需要写这些代码。2015-3-16 16:00 补充:本来想单独写一系列文章来分享abp框架,但今天有朋友问到,就提前补充分享一下,先发个git上的链接顺便分享一些其他我认为有使用、学习和研究价值的项目:Orchard的vNext版 html5页面的样板 EntityFramework的功能增强 非常短小精悍的后台任务组件 监测.NET后端和Web前端每一个步骤的耗时毫秒数,可查看EF生成的SQL 微

9、信公众平台SDK的C#版,包括企业号的SDKORMALinq、ORMLite、Linq to SQL、Entity Framework吐嘈忙活了一个多月,XLinq总算能用了,BUG总算少点了,准备真正替代EF了,现在已经初步在自己的项目中使用了EF这家伙,优点不少,缺点也不少,我就扯几个最让我头大的缺点(或许这里面的缺点是因为我不会用)1. 必须将所有实体一次写完整,不能通过DbContext.Set方法动态加载实体2. NoLock,硬伤啊,貌似就算用事务然后配置成ReadUncommited也不行3. EF支持的LINQ各种坑,简单说几个1. .Where(x=x.LastLogin=D

10、ateTime.Now.Date),很简单很常用的代码么,但EF就是不支持2. .Where(x=x.Name=null),看起来好像没问题,但EF却翻译成了where name=null,坑货3. 左连接!不说实现左连接那郁闷的写法,郁闷的是EF不一定会给那种写法翻译成左连接4. 第三点吐嘈完毕4. 已删除5. 性能,其实性能这个好像也没那么差,测试过查询16万数据,近一百个字段,尼玛居然16秒就搞定了6. 暂时想不起来分享吐嘈EF的人也不少了,我再这么就吐嘈两下完事的话有点没事找事所以,针对上面这些坑,我找了很多的ORM(其实好像也不多),试过alinq、,alinq不说,收费的,用不起后

11、面这个的话,当时被坑多了,就没用过了,对了,还有SOD,大神深蓝医生写的然而我自己也曾写过支持LINQ的ORM,但那代码渣的够可以,不过总算写过,知道些原理,其实更多的是为了锻炼,毕竟要支持LINQ的话,难度是比较大的,所以这一次又再一次自己写,功能从简单起见,主要有以下功能1. 支持简单的LINQ查询,多表连接查询(不支持任意形式的嵌套查询)LINQ一旦写复杂了,确实要生成高性能的SQL非常难,因为就算生成能执行的sql都比较难。我更倾向于将业务拆分,变成简单的LINQ语句能完成的功能。嵌套查询或许以后会支持,但到时候估计就是一堆坑2. 支持动态加载实体不需要事先在DbContext里面把实

12、体写好,事实上什么都不写都行,主要是为了便于封装数据层,否则的话我每添加一张表都不得不去DbContext里面加一个实体3. 支持在LINQ中调用方法和属性,例如.Where(x=Convert.ToBoolean(x.IsEnabled)上面这个写法在EF中是绝对不支持的,另外还支持Date属性访问4. 多数据库支持目前只支持了sqlite和sql server 2008 r2,应该说只要sql server 2008 r2支持了,那就可以部分支持其他sql server数据库了5. 支持自己编写翻译成sql的代码(未测试)可以自定义生成自己想的sql6. 支持最小化配置,最小仅需要一个连接

13、字符串说这个我又要说java了,连hello world都没跑起来却搞了三天的配置,多麻烦!7. 基本兼容EF的使用方法降低学习成本8. 不需要查询,直接更新和删除数据调用的方式和EntityFramework Exnteded类似,这也算是EF的又一个硬伤9. 支持NOLock10. 其他我说漏掉的使用方法1. 配置文件这里只说最小化配置2. 建立数据库我随便建的xlinq数据库,建了一个Users表,有两个字段,Id和Username,其中Id为自增并且是主键3. 建立实体4. 测试插入终于到这儿了怎么的,这跟EF的写法不是一模一样的?运行结果:5. 测试查询为什么要把插入放前面?因为插入

14、了之后才有数据查询运行结果:6. 测试更新更新有两种方法,先查询再更新和直接更新第一种:运行结果:第二种:运行结果:7. 测试删除删除也有查询后删除和直接删除两种,这里只说直接删除8. NOLOCK后记看着挺简单的基本功能,但做起来真是一把辛酸泪。计划中还有性能测试的,不过先看有多少人关注吧!如果想讨论与此相关技术或者索取源码,请进QQ群74522853,答案XLinq测试源码:DTODTO即数据传输对象。之前不明白有些框架中为什么要专门定义DTO来绑定表现层中的数据,为什么不能直接用实体模型呢,有了DTO同时还要维护DTO与Model之间的映射关系,多麻烦。然后看了这篇文章中的讨论部分才恍然

15、大悟。摘两个比较有意义的段落。表现层与应用层之间是通过数据传输对象(DTO)进行交互的,数据传输对象是没有行为的POCO对象,它的目的只是为了对领域对象进行数据封装,实现层与层之间的数据传递。为何不能直接将领域对象用于数据传递?因为领域对象更注重领域,而DTO更注重数据。不仅如此,由于“富领域模型”的特点,这样做会直接将领域对象的行为暴露给表现层。需要了解的是,数据传输对象DTO本身并不是业务对象。数据传输对象是根据UI的需求进行设计的,而不是根据领域对象进行设计的。比如,Customer领域对象可能会包含一些诸如FirstName, LastName,Email, Address等信息。但如

16、果UI上不打算显示Address的信息,那么CustomerDTO中也无需包含这个Address的数据简单来说Model面向业务,我们是通过业务来定义Model的。而DTO是面向界面UI,是通过UI的需求来定义的。通过DTO我们实现了表现层与Model之间的解耦,表现层不引用Model,如果开发过程中我们的模型改变了,而界面没变,我们就只需要改Model而不需要去改表现层中的东西。POCOEntity Framework 4的特性介绍可看这篇文章.NET 4中Entity Framework简介,其中最感兴趣的一点就是对POCO的支持了:EF4为实体提供了简单传统CLR对象(Plain Old

17、 CLR Object / POCO)支持。您的实体对象可以独立于EF存在,由此EF更好地支持了测试驱动开发(test-driven development)和领域驱动设计(domain-driven design)。同时,EF仍旧可以帮助跟踪POCO实体的变化,允许延迟加载,也会自动修正对导航属性(navigation properties)和外键的改动。Entity Framework 1.0 发布了很长一段时间了,但感觉用的人很少。其中一个很大的原因,也许就是不支持POCO,至少我自己是这么想而不使用EF1的,Entity Framework 4.0版本(又称EF V2)将提供POCO支

18、持,对很多人来说,这是开始使用Entity Framework的时候了。学习最好的方式当然是动手练习了,今天花了大半天跟着这篇文章【翻译】在Entity Framework 4.0中使用 Repository 和 Unit of Work 模式,这篇文章里头有3篇POCO的系列,虽然文章是写于EF4 beta1的时候,现在已经是RC,一样有效:POCO in Entity Framework : Part 1 The Experience(【翻译】实体框架中的POCO支持 - 第一部分 - 体验)POCO in Entity Framework : Part 2 Complex Types,

19、Deferred Loading and Explicit Loading(【翻译】实体框架中的POCO支持 - 第二部分 - 复杂类型,延迟装载和显式装载)POCO in Entity Framework : Part 3 Change Tracking with POCO(【翻译】实体框架中的POCO支持 - 第三部分 - POCO的变动跟踪)还有这篇文章EF 4 Implementing POCO Objects,图文并茂的详细介绍了整个过程。这里整理一下学习过程中的注意点: 自动生成代码的功能要关掉 继承的ObjectContext的构造函数的参数其实就是指定数据库连接串Connect

20、ion String 工具生成的Edmx的Connection String的只保存在该程序集的app.config中,记得拷贝到相关的app.config或者web.config 因为没有CSDL和SSDL,所以Edmx中的Model上的Table Name和Column Name务必和你的POCO的名称一致。Entity Framework 4.0 引入了基于约定(convention)的映射,以允许不用显式的修饰,就可将实体类型,属性,复杂类型和关系映射到概念性模型。一个简单的规则是,在你的POCO类中使用的实体类型名称,属性名称,和复杂类型名称必须匹配那些在概念性模型中定义了的相应名称

21、。 代码的单元测试很重要 延迟加载的属性要设置成Virtual, ObjectContext上需要设置 ContextOptions.LazyLoadingEnabled = true 对于枚举类型的支持是通过复杂类型来实现的,可以参考文章TDD前言最近团队要尝试TDD(测试驱动开发)的实践,很多人习惯了先代码后测试的流程,对于TDD总心存恐惧,认为没有代码的情况下写测试代码时被架空了,没法写下来,其实,根据个人实践经验,TDD并不可怕,还很可爱,只要你真正去实践了几十个测试用例之后,你会爱上这种开发方式的。微软对于TDD的开发方式是大力支持和推荐的,新发布的VS2012的团队模板就是根据。新

22、的Visual Studio 2012给我们带来了Fakes框架,这是一个针对代码测试时对测试的外界依赖(如数据库,文件等)进行模拟的Mock框架,用上了之后,我立即从Moq的阵营中叛变了_。截止到写此文的时间,网上还没有一篇关于Fakes框架的文章(除了“VS11将拥有更好的单元测试工具和Fakes框架”这篇介绍性的之外),就让我们来慢慢摸索着用吧。废话少说,下面我们就来一步一步的使用Visual Studio 2012的Fakes框架来实战一把TDD。需求说明我们要做的是一个普通的用户注册中“检查用户名是否存在”的功能,需求如下:1. 用户名不能重复2. 可设置是否启用邮件激活,如果不启用

23、邮件激活,则直接在“正式用户信息表”中检查,反之则还要进入“未激活用户信息表”中进行查询项目结构先分解一下项目的结构,还是传统的三层结构,从底层到上层:1. Liuliu.Components.Tools:通用工具组件2. Liuliu.Components.Data:通用数据访问组件,目前只定义了一个数据访问接口的通用基接口IRepository3. Liuliu.Demo.Core.Models:数据实体类,分两个模块,账户模块(Account)与通用模块(Common)4. Liuliu.Demo.Core:业务核心层,里面包含Business与DataAccess两个子层,DataAc

24、cess实现实体类的数据访问,Business层实现模块的业务逻辑,因为测试的过程中数据访问层的数据库实现会用Fakes框架来模拟,所以数据访问层只提供了接口,不提供实现,Business只调用了DataAccess的接口。我们要做的工作就是用Fakes框架来模拟数据访问层,用TDD的方式来编写Business中的业务实现5. Liuliu.Demo.Core.Business.UnitTest:单元测试项目,存放着测试Business实现的测试用例。6. Liuliu.Demo.Consoles:用户操作控制台,功能实现后进行用户操作的UI项目其他的项目与测试无关,略过。开发准备应用代码准备

25、Entity:实体类的通用数据结构 1/ 2/ 数据实体类基类,定义数据库存储的数据结构的通用部分 3/4publicabstractclass Entity 5 6/ 7/ 编号 8/ 9publicint Id get; set; 1011/12/ 是否逻辑删除(相当于回收站,非物理删除)13/14publicbool IsDelete get; set; 1516/17/ 添加时间18/19public DateTime AddDate get; set; 20 IRepository:通用数据访问接口,简单起见,只写了几个增删改查的接口 1/ 2/ 定义仓储模式中的数据标准操作,其实现

26、类是仓储类型。 3/ 4/要实现仓储的类型 5publicinterface IRepositorywhereTEntity : Entity 6 7#region 公用方法 89/10/ 插入实体记录11/12/ 实体对象 13/ 是否执行保存 14/ 操作影响的行数 15intInsert(TEntity entity, bool isSave = true);1617/18/ 删除实体记录19/20/ 实体对象 21/ 是否执行保存 22/ 操作影响的行数 23intDelete(TEntity entity, bool isSave = true);2425/26/ 更新实体记录27/

27、28/ 实体对象 29/ 是否执行保存 30/ 操作影响的行数 31intUpdate(TEntity entity, bool isSave = true);3233/34/ 提交当前的Unit Of Work事务,作用与 IUnitOfWork.Commit() 相同。35/36/提交事务影响的行数37intCommit();3839/40/ 查找指定编号的实体记录41/42/ 指定编号 43/ 符合编号的记录,不存在返回null 44 TEntity GetById(object id);4546/47/ 查找指定名称的实体记录,注意:如实体无名称属性则不支持48/49/名称50/符合名称的记录,不存在则返回null51/exception cref=NotSupporte

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1