基于.NET平台常用的框架整理

自从学习.NET以来,优雅的编程风格,杰出简单的可扩大性,丰硕强大开发工具,极小的求学曲线,让我对这几个平台爆发了深厚的兴趣,在做事和读书中也积累了有的开源的零件,就当前想到的先整理于此,要是再想到,就屡次三番补充那篇日记,雨后春笋,就能形成一个自己的机件经验库。

正文转自:http://www.cnblogs.com/hegezhou\_hot/archive/2010/09/18/1830306.html

分布式缓存框架:

Microsoft Velocity:微软自身分布式缓存服务框架。

Memcahed:一套分布式的高速缓存系统,近日被不少网站采纳以升级网站的访问速度。

Redis:是一个高质量的KV数据库。 它的出现很大程度补偿了Memcached在好几方面的供不应求。

EnyimMemcached:访问Memcached最理想的.NET客户端,集成不错的分布式均衡算法。

一、上章回看

      
在上篇中大家讲课了几类UML2.0言语新推出的建模图形,总体来说通过那些图片能更详实的将某类新闻表明出来。在那里大家大概回想上篇讲解的情节。

       图片 1

      
上图中一度简单介绍了上章讲述的始末,具体内容请看:系统架构师-基础到集团应用架构-系统建模[下篇]

开源的.NET系统推荐:

OXITE:微软ASP.NET MVC案例演示框架。

PetShop:微软ASP.NET宠物商店。

Orchard:国外一个MVC开源的博客系统。

SSCLI:微软在NET Framework 2.0时日的开源代码。

DasBlog:海外一个依据ASP.NET的博客系统。

BlogEngine.NET:海外一款免费开源的博客系统。

Dotnetnuke.NET:一套非常了不起的依照ASP.NET的开源门户网站程序。

Discuz.NET:国内开源的论坛社区连串。

nopCommerce和Aspxcommerce:国外一套高质量的开源B2C网站系统。

JumboTCMS和DTCMS:国内七款开源的网站管理种类:

二、摘要

      
本章将紧要的简练介绍在系统架构中的设计方式及相应标准轨道。并结成相应的代码来验证什么依据系统架构中的一些主导的设计规范及轨道。而我辈将在本文介

绍几类常用的设计规范,大家先来看看结构化设计的二个基本原则:

       图片 2

      
当然既然提议了主导的守则,那么大家怎样来知足准则呢,并且能更好的筹划呢?大家得以经过如下手段来达到那样的需要:

       图片 3 当然图中示范了职能分其他国策,通过把须求根据分化的效应详细的细分开来,每个成效都是独自

的,当然大家那边也得以变成是关切点。上面大家将本着那一个原则举办详细的教学。

日记记录极度处理:

Log4Net.dll:轻量级的免费开源.NET日志记录框架。

Enterprise Library Log Application Black:微软集团库日志记录。

Elmah:完结最风靡的ASP.NET应用更加日志记录框架。

NLog:是一个概括利落的日志记录类库,品质比Log4Net高,使用和保安难度低。

三、本章内容

       1、上章回看。

       2、摘要。

       3、本章内容。

       4、设计规范及标准。

       5、如何知足设计必要。

       6、本章总结。

       7、序列进度。

       8、下篇预先报告。

关于NoSQL数据库:

Mongodb:分布式文件存储数据库。

Membase:家族的一个新的重量级的成员。

四、设计规范及轨道。

自动职务调度框架

Quartz.NET:开源的学业调度和电动职分框架。

Topshelf:另一种创制Windows服务的开源框架

      1、高内聚

       
首先大家来探视内聚的含义:软件含义上的内聚其实是从化学中的分子的内聚衍生和变化过来的,化学中的分子间的功出力,效用力强则显现为内聚程度高。在软件中内

聚程度的轻重,标识着软件设计的优劣。

       
大家在举行架构设计时的内聚高低是指,设计某个模块或者关切点时,模块或关心点内部的一层层有关职能的连带程度的轻重。

        例如:下单模块:

        图片 4 一般意况下,下单模块都会有如下的新闻,订单的新闻,产品的新闻及哪个人下的单(买家新闻)。那是基

本的,那么我们统筹的时候将要把有关的功效内聚到共同。当然那是从大功效(下单管理)上的话,当然那些模块还足以再细化分成产品、订单、会员等子模块。

        例如大家在规划数据库操作支持类提供的法门有:

        图片 5 通过如此的艺术,那么那一个组件只负责数据库操作。那样拉动的益处也是明显的。高内

聚提供了更好的可维护性和可复用性。而低内聚的模块则表超级模特块直接的看重性程度高,那么一旦修改了该模块依赖的目的则无从选择该模块,必须也进展相应的修改才

能够继续行使。

       
低内聚的模块设计的流弊有:首先模块的功能不纯粹,模块的任务不明了,相比松散,更有甚者是瓜熟蒂落不相干的功用。那样的布署性反复是不可取的。可以通过重

构来完善。

       
下边大家来说下高内聚的不难解释:什么样的模块算是高内聚,并且可以在系统中很好的选拔。

        图片 6

        那么大家在设计的长河中怎么着去做到高内聚呢?

        图片 7

       
以上基本上讲述了高内聚的好处,并且演讲了怎么促成高内聚的手续和原则。上面大家的话说或者高内聚带来的坏处。

       
高内聚有时候也不是说富有的情景都施用那样的条件,当然高内聚照旧要方便的,上面来举例表达:例如内聚性要求强的话就如Windows32中系统提供的

API,里面的函数太多了,都放在一个Dll中,那么每个函数完结一个成效。那样强劲的功用,会比较复杂,所以并不是全然的高内聚越高越好,照旧要看其实的必要。

当然维护起来也不是特意的便宜。

看重注入IOC容器框架:

Unity:微软patterns&practicest团队开发的IOC看重注入框架,协理AOP横切关怀点。

MEF(Managed Extensibility
Framework):是一个用来增加.NET应用程序的框架,可支付插件系统。

Spring.NET:依赖注入、面向方面编程(AOP)、数据访问抽象,、以及ASP.NET集成。

Autofac:最盛行的依赖注入和IOC框架,轻量且高质量,对品种代码大致无任何侵入性。

PostSharp:落成静态AOP横切关怀点,使用简便,成效强大,对目的拦截的方法无需任何变更。

Ninject:基于.NET轻量级开源的看重性注入IOC框架

      2、低耦合

        
首先大家来探望低耦合的定义:低耦合是用来度量模块与模块直接的看重性关系。耦合当然也可以这样简单的明亮,我想懂电脑的应有都通晓,CPU与主板之间的

波及,CPU假如是突出的CPU必须利用万分的主板来支撑,那么如若说那个CPU不唯一依赖唯一主板,那么就觉得那个CPU与主板的关系是低耦合的涉嫌。

         下边大家来举例表明低耦合的筹划与高耦合的规划:

          图片 8 那是一个概括的低耦合的宏图,电器与插座之间是低耦合的涉嫌,即使我替换了分歧的插座,电器依

然可以正常的劳作。因而简单的叙述如下,就是A模块与B模块存在依靠关系,那么当B暴发变动时,A模块仍旧可以健康办事,那么就觉着A与B是低耦合的。

         图片 9

         1、台式机接音响可以健康的选用。

         2、台式机接专配耳麦正常的行使。       

        
对应一般的音响来说,台式机是通用的,音响和台式机间接的涉嫌是低耦合的,不过台式机和动铁耳机却是高耦合的,唯有专配的耳麦才能和笔记本互联使用,而不

是通用的,所以说台式机和专配耳麦存在着较强的依赖性关系。当然最不难易行的格局就是笔记本提供联合的耳麦接口,可以满意普通的须求。

         下边大家未来分析怎么着创设低耦合的宏图。

         图片 10

常用的多少个ORM框架:

EF(ADO.NET Entity Framework):微软根据ADO.NET开发的ORM框架。

Nhibernate:面向.NET环境的轻量级的ORM框架。

SqlMapper.cs:用于小品种的通用的C#数据库访问类。

AutoMapper:流行的对象映射框架,可减弱大气硬编码,很精美灵活,质量表现也可承受。

SubSonic:非凡的开源的ORM映射框架,同时提供符合本人需求的代码生成器。

FluentData:开源的基于Fluent API的链式查询ORM轻量级框架。

Dapper:轻量级高品质基于EMIT生成的ORM框架。

EmitMapper:品质较高的ORM框架,运行时经过EMIT动态生成IL代码,并非接纳反射机制。

        总结

         
下面我们早就讲解了低耦合和高内聚的二个规范,通过那2个规范大家精通,餍足那2个条件是衡量一个架构设计好坏的一个参阅标准。上边大家未来上课通过

效益分其他不二法门来满意上边的2个规范。

格式和数据类型转换

Newtonsoft.Json:方今.NET开发中最盛行的JSON体系化库,为新版的WebApi库提供基础。

System.JSON.dll:微软温馨费用的JSON连串化组件(需要独自下载)

DataContractJsonSerializer 和
DataContractXmlSerializer
:微软在WCF中利用的系列化器。

JavaScriptSerializer:微软默许针对WEB开发者提供的JSON格式化器。

iTextSharp、PDFsharp 和 PDF.NET:通过.NET处理和生成PDF文档的组件。

SharpZipLib.dll:免费开源的ZIP和GZIP文件解压缩组件。

Math.NET:强大的数学运算、微积分、解方程和正确运算。

DocX:不必要安装word软件,通过C#操作word文件。

SharpSerializer:开源XML和、二进制、JSON、压缩和优化框架。

五、怎样满足设计必要

       1、怎样按作用进行模块化的离别。

       大家在将一个种类开展职能区划时,我们一般如下来进行:

       首先、我们先把职能职责分开成独立的单元。

       例如现在有个B2C系统,那么我们根据B2C的须求,如下分析:

       图片 11 大家那边大约的剖析下B2C应该有着的功用模块,当然这个模块的撤并中,有些模

块仍能继续的分离,当然我那边只是实例分析出来。

      2、对分离出来的模块化进行抽象,例如我们以支出为例。

          图片 12 这里经过付出接口向外提供服务。那么外界模块不体贴支付序列模块的浮动,只必要调用接口

即可,假设具体的开支形式,比如支付宝的方法暴发变动,在调用支付服务的模块中也不必要做任何的修改就可以正常的提供劳动。分明那样的点子是毋庸置疑的贯彻方

式。

      
经常意况下大家在系统分离式只是以接口的格局提供服务,供其余的模块举行利用。在模块内部有大气的信息是绝不向外部揭示的,所以模块在设计时访问域的定

义就要划分好,防止因为访问域的概念而对模块的新闻造成损坏。

       上面大家来看下功用分离在分化的宏图意见下都是哪些的突显:

       图片 13

      
上边只是实体性的分析了成效分其他补益及运用的广度,当然大家在持续会构成实例来讲学怎样来已毕如此的软件设计情势。当然那只是软件的架构设计,那么如

果细化到现实的完结呢?我们什么样去设计每个成效点吧?那就是下章大家要上课的情节了,那么本文先列出二种普遍的法门。

        图片 14

       
下篇大家将针对设计原则中的落成方式,举办详尽的剖析与具体落到实处举行举例讲解,希望我们多提意见。

反射和动态语言

Clay dynamic:开源的动态语言dynamic框架让你形如javascript的措施创制对象。

ExposedObject:在类的外部通过动态语言dynamic的方式访问私有成员。

PrivateObject:微软单元测试框架中便捷在表面调用类内部私有成员的一个类。

六、本章总括。

        本章中举足轻重概括的叙述了软件设计的二个基本的正儿八经与规则:

        
1、高内聚:描述了模块内部的一连串作用的连锁程度,对于功效之间相关度不高照旧根本未曾相关性的功力包括在模块中的做法是不可取的。

        
2、低耦合:描述了模块直接的依赖、感知程度,耦合的衡量标准是从低到高,一般的话耦合度越低越好。

        
当然有些异样景况下,可能那二个条件也有龃龉的地点,当然大家如故要根据项目标骨子里须求及气象展开选用,当然那二个标准化是为着设计提供更好的增加性、

可读性、可维护性、极高的可复用性,所以须要我们在安插时尽量去满意那二个中央标准。而帮我去达到那二个准则的路子就是通过效率分别及细化来促成如此的准

则。下一篇大家将深入的解析与举例来表明落成那二个标准化的种种专业及轨道。

跨平台和运作时解决方案

MONO.NET:跨平台的.NET运行条件,让.NET跨平台运行成为可能。

DotGnu Portable.NET:类似于MONO.NET的跨平台运行时。

Phalanger:将PHP编译成.NET,可实现PHP与.NET互操作。

VMDotNet:中国联通飞信所运用过的.NET运行时。

Unity3D:微软努力辅助的机遇C#和JavaScript的跨平台游戏开发框架。

Cassini、IIS Express和Cassinidev:开源的ASP.NET执行环境。

Katana:微软按照OWIN规范落到实处的非IIS寄宿ASP.NET和MVC等。

IKVM.NET:基于.NET的JAVA虚拟机,让JAVA运行在.NET之上。

七、连串进度

WEB开发和安排性

Jumony Core:基于.NET开发的HTML引擎。

Microsoft.mshtml.dll、Winista.HtmlParser.dll 和
HtmlAgilityPack.dll
:解析处理HTML文档的框架。

JavaScript.NET和ClearScript(微软出品):基于.NET开发的JavaScript引擎。

NCrawler:其HTML处理引擎htmlagilitypack的的开源网络爬虫软件。

AntiXSS:微软官方预防跨站XSS脚本入侵攻击的开源类库,它通过白名单机制进行内容编码。

YUICompressor.NET、Microsoft Ajax Minifier 和 Google Closure
Compiler
:JavaScrip和CSS压缩器。

NancyFx:是一个不利的轻量级开源.NET
WEB框架。假若想飞快做个简易的WEB应用。

AspNetPager:国内盛名的ASP.NET分页控件,接济二种分页形式。

NOPI.dll:导出Excel报表的插件(基于微软OpenXml完毕)(nopi.css.dl通过css设置样式)

Enterprise Library:微软本着公司级应用开发的最佳实践组件。

PowerCollections:国外一个牛人写的高级开源集合。

      前篇

     
1、系统架构师-基础到公司应用架构种类之–开卷有益

     
2、系统架构师-基础到集团应用架构-系统建模[上篇]

     
3、系统架构师-基础到公司应用架构-系统建模[中篇](上)

     
4、系统架构师-基础到集团应用架构-系统建模[中篇](下)

     
5、系统架构师-基础到集团应用架构-系统建模[下篇]

     
6、系统架构师-基础到集团应用架构-系统设计规范与规则[上篇]

      7、系统架构师-基础到集团应用架构-系统设计规范与规则[下篇]

      8、系统架构师-基础到公司应用架构-设计格局[上篇]

      9、系统架构师-基础到公司应用架构-设计格局[中篇]

      10、系统架构师-基础到公司应用架构-设计形式[下篇]

举手投足网络和云总结

PushSharp:通过.NET向各样运动平台推送信息。

mono for android:用.NET语言开发安卓应用:

MonoTouch:用.NET语言开发IOS应用。

PhoneGap和AppCan:跨平台基于HTML5的活动支付平台。

Cordova:PhoneGap进献给Apache后的开源项目,是驱动PhoneGap的为主引擎。

     中篇

      11、系统架构师-基础到公司应用架构-企业应用架构

      12、系统架构师-基础到集团应用架构-分层[上篇]

      13、系统架构师-基础到公司应用架构-分层[中篇]

      14、系统架构师-基础到集团应用架构-分层[下篇]

      15、系统架构师-基础到公司应用架构-表现层

      16、系统架构师-基础到集团应用架构-服务层

      17、系统架构师-基础到集团应用架构-业务逻辑层

      18、系统架构师-基础到集团应用架构-数据访问层

      19、系统架构师-基础到集团应用架构-组件服务

      20、系统架构师-基础到集团应用架构-安全机制

互联网通讯和网络协议

SuperSocket:基于.NET轻量级的可扩充的Socket开发框架。

SuperWebSocket:通过.NET实现TML5 WebSocket框架。

XProxy:帮衬插件的基础代理程序集,内置NAT、加解密、反向、间接和直接代理。

     后篇

      21、单机应用、客户端/服务器、多服务、集团数量总线全分析

      22、系统架构师-基础到企业应用架构-单机应用(实例及demo)

      23、系统架构师-基础到公司应用架构-客户端/服务器(实例及demo)

      24、系统架构师-基础到集团应用架构-多服务(实例及demo)

      25、系统架构师-基础到集团应用架构-集团数量总线(实例及demo)

      26、系统架构师-基础到集团应用架构-品质优化(架构瓶颈)

      27、系统架构师-基础到集团应用架构-完整的架构方案实例[上篇]

      28、系统架构师-基础到集团应用架构-完整的架构方案实例[中篇]

      29、系统架构师-基础到公司应用架构-完整的架构方案实例[下篇]

      30、系统架构师-基础到公司应用架构-计算及后续

图片和图像处理框架

Paint.NET:基于.NET小巧灵活有力的图形处理开源项目。

Imagemagick.NET:用C#对开源图像处理组件Imagemagick的包装。

Skimpt:基于.NET开源的显示器截图软件。

ImageGlue.NET:商业的图像处理组件,辅助的格式列了一大堆。

Sprite and Image Optimization
Framework
:微软CSS天使,多图合成一张大图和CSS样式。

八、下篇预先报告。

      
下一篇将会已咱们将深切的执教功效分其他布置性准则及落到实处情势,怎么样在统筹中运用设计形式来打造满意高内聚、低耦合的功效模块等等。将经过实例化的艺术对

每种原则及落到实处情势展开辨析和举例。假若大家有好的看法和建议足以立即报告,谢谢您的宝贵意见。

桌面应用程序框架

DevExpress:一个海内外资深的桌面应用程序UI控件库。

Prism:微软支付的指向WPF和Silverlight的MVVM框架,通过成效模块化的构思,来讲复杂的事务职能和UI耦合性举办分离。

WPFToolkit 和 Fluent Ribbon Control
Suite
:开发近乎于Office风格的Ribbon菜单。

后语

      
希望看完本章的对象能够从本篇中学到相应的软件设计规范,懂的人方可温习下相应安插准则,本篇希望可以引玉之砖,希望我们能够多提出宝贵意见。由于是本

人平常做事中的明白与总括,不足之处再所难免,还请大家批评提出!如果您有啥样看法或提议,请多多提议!我们的支撑就是自家的最大动力!

测试和性能评估方面

Faker.Net:方便生成大量测试数据的框架。

Nunit:一个轻量级的单元测试框架。

Moq:卓殊流行的Mock框架,协助LINQ,灵活且高质量。

xUnit:比NUnit更好的单元测试框架,升级创新版的Nunit框架。

MiniProfiler和Glimpse:基于MVC的四款质量事件监控框架。

业务和分布式事务支持

KtmIntegration:一个辅助NTFS文件系统的事务开源类。

NET Transactional File
Manager
:对文件系统操作(复制、移动和删除)插手工作帮忙。

分词、全文检索和摸索引擎

Lucene.net:流行高质量的全文索引库,可用来为各种音讯提供强有力的查找作用。

Lucene.Net.Analysis.PanGu:支持Lucene.Net最新版的苍天普通话分词扩大库。

数量证实组件整理

FluentValidation for .NET:基于LINQ表明式方法链Fluent接口验证组件。

Microsoft.Practices.EnterpriseLibrary.Validation.dll:微软企业库验证程序块。

CuttingEdge.Conditions:基于Fluent接口方法练接口的契约编程组件。

DotNetOpenAuth:让网站有着援助OpenID、OAuth、InfoCard等身份验证的力量。

开源图表计算控件:

Visifire:一套效果极度好的WPF图表控件,扶助3D绘制、曲线、折线、扇形、环形和梯形。
SparrowToolkit:一套WPF图表控件集,支持绘制动态曲线,可绘制示波器、CPU使用率和波形。
DynamicDataDisplay:微软开源的WPF动态曲线图,线图、气泡图和热力图。

 

可以伸张信息队列项目,如:Kafka是一种分布式的,基于公布/订阅的新闻系统。首要设计目的如下:
以时间复杂度为O(1)的主意提供信息持久化能力,即使对TB级以上数量也能确保常数时间复杂度的走访品质。
高吞吐率。即便在十分廉价的商用机器上也能做到单机帮忙每秒100K条以上音信的传导。
支撑Kafka
Server间的新闻分区,及分布式消费,同时有限支撑每个Partition内的音信顺序传输。
并且辅助离线数据处理和实时数据处理。
Scale out:扶助在线水平扩张。
RabbitMQ
RabbitMQ是运用Erlang编写的一个开源的新闻队列,本身援助广大的协议:AMQP,XMPP,
SMTP,
STOMP,也正因如此,它不行重量级,更切合于集团级的花费。同时落实了Broker构架,那代表新闻在发送给客户端时先在着力队列排队。对路由,负载均衡或者数额持久化都有很好的协理。
Redis
Redis是一个基于Key-Value对的NoSQL数据库,开发爱惜很活泼。即便它是一个Key-Value数据库存储系统,但它自身帮衬MQ功用,所以完全能够视作一个轻量级的行列服务来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录四回施行时间。测试数据分为128Bytes、512Bytes、1K和10K多少个不等尺寸的数目。实验表明:入队时,当数码相比小时Redis的性质要高于RabbitMQ,而一旦数额大小超越了10K,Redis则慢的不能忍受;出队时,无论数额大小,Redis都显示出十分好的属性,而RabbitMQ的出队质量则远小于Redis。
ZeroMQ
ZeroMQ号称最快的信息队列系统,更加针对大吞吐量的必要境况。ZeroMQ可以完成RabbitMQ不善于的高档/复杂的行列,可是开发人士必要协调组合两种技术框架,技术上的复杂度是对那MQ可以利用成功的挑衅。ZeroMQ具有一个独特的非中间件的情势,你不要求设置和周转一个消息服务器或中间件,因为你的应用程序将扮演这几个服务器角色。你只要求简单的引用ZeroMQ程序库,可以动用NuGet安装,然后您就足以愉悦的在应用程序之间发送音讯了。可是ZeroMQ仅提供非持久性的行列,也就是说如若宕机,数据将会丢掉。其中,推特的Storm
0.9.0在先的版本中默许使用ZeroMQ作为数据流的传输(Storm从0.9本子开始还要协助ZeroMQ和Netty作为传输模块)。
ActiveMQ
ActiveMQ是Apache下的一个子项目。
类似于ZeroMQ,它亦可以代办和点对点的技术完成队列。同时类似于RabbitMQ,它少量代码就足以神速地落到实处高级应用场景。
Kafka/Jafka
Kafka是Apache下的一个子项目,是一个高品质跨语言分布式公布/订阅音讯队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特点:飞快持久化,可以在O(1)的系统开发下举办音信持久化;高吞吐,在一台一般的服务器上既可以达标10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动帮衬分布式,自动完结负载均衡;匡助Hadoop数据交互加载,对于像Hadoop的一模一样的日记数据和离线分析系统,但又须求实时处理的限定,那是一个实惠的缓解方案。Kafka通过Hadoop的交互加载机制统一了在线和离线的信息处理。Apache
Kafka相对于ActiveMQ是一个相当轻量级的新闻系统,除了质量尤其好之外,仍然一个行事出彩的分布式系统。

发表评论

电子邮件地址不会被公开。 必填项已用*标注