.NET方面的框架的重整及总

起学习.NET以来,优雅的编程风格,分外简单的然而扩张性,丰富强劲开发工具,极小的学习曲线,让自己本着是平台有了深的兴,在干活暨上学着也累了一部分开源的机件,就时想到的预先收拾为此,假若又想到,就继续添就首日记,日积月累,就可知形成一个友好的机件经验库。

看看大多数开中之代码示例,都在数据库访问函数中运用 try
catch,误导初家,相当欲哭无泪。

分布式缓存框架:

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

Memcahed:一模仿分布式的高速缓存系统,近日受不少网站以以升级网站的访问速度。

Redis:是一个强性能的KV数据库。 它的面世非凡卓殊程度上了Memcached在少数方面的欠缺。

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

咱来分析一个大面积的函数(来源国内少数老集团的代码,反面例子,不可仿效),

开源的.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:国内简单放缓开源之网站管理体系:

 1     public int updateData(String sql)     {
 2         int resultRow = 0;         
 3         try{
 4             Connection con = ...
 5             statement = con.createStatement();             
 6             resultRow = statement.executeUpdate(sql);
 7             ...                      
 8         } catch (SQLException e) {
 9             e.printStackTrace();         
10         }                   
11         return resultRow;     
12     } 

日记记录至极处理:

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

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

Elmah:实现最流行的ASP.NET应用特别日志记录框架。

NLog:是一个简易利落的日志记录类库,性能比Log4Net高,使用与维护难度小。

 

关于NoSQL数据库:

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

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

 这里所说之函数问题在,在这样的调用情况下会出问题(要发言者精心看看这块伪代码):
1) begin database transaction
2) updateData(“update user set
last_active_time = …”);
3) updateData(“insert into
….”);
3) ftpSend();
3) sendMail();
4) commit();

机关任务调度框架

Quartz.NET:开源之课业调度以及自行任务框架。

Topshelf:另一样种成立Windows服务之开源框架

updateData() 内部就 try catch 或者 commit/rollback ,问题颇了!

借助于注入IOC容器框架:

Unity:微软patterns&practicest团队开支之IOC倚重注入框架,协助AOP横切关注点。

MEF(Managed Extensibility
Framework):是一个于是来放大展.NET应用程序的框架,可开发插件系统。

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

Autofac:最盛的依赖性注入及IOC框架,轻量且赛性能,对项目代码几乎无任何侵入性。

PostSharp:实现静态AOP横切关注点,使用简单,功用强大,对目的拦截的方无论需另改动。

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

 

常用的几乎单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代码,并非以反射机制。

这边的题目重重:

格式和数据类型转换

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、压缩和优化框架。

a) SQL 执行出错后,简单地出口及控制台。没有将错信息,重返或者经过
throw Exception 抛出。结果好可能是, SQL
运行出错,界面及却提醒“操作成”。

映和动态语言

Clay dynamic:开源之动态语言dynamic框架让你形如javascript的方创造对象。

ExposedObject:在类的标通过动态语言dynamic的计访私有成员。

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

b) 假使代码连续实施五只 update/delete,放在一个 transaction 中。SQL
执行出错后,SQLException 被 catch 住,transaction 控制代码,不可以rollback。

逾平台以及运行时解决方案

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之上。

c) 当然还有 SQL 注入问题。这里应该据此 PreparedStatement。

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:国外一个牛人写的尖端开源集合。

 

挪互联网以及出口总结

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

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

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

PhoneGap和AppCan:跨平台基于HTML5的运动开平台。

Cordova:PhoneGap贡献给Apache后底开源项目,是教PhoneGap的中坚引擎。

假诺假定避免代码“代码中运行出错,界面上可指示:操作成”的问题,则该避免在数据库访问函数中采用try catch。更进一步的,在工具类、dao、service 代码中,都该禁止用  try
catch。

网络通信同网络协议

SuperSocket:基于.NET轻量级的然而增加的Socket开发框架。

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

XProxy:补助插件的底蕴代理程序集,内置NAT、加解密、反向、直接与直接代理。

那就是说,  try catch 应该在哪里也?

图形和图像处理框架

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

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

Skimpt:基于.NET开源的屏幕截图软件。

ImageGlue.NET:商业的图像处理组件,援助的格式列了扳平可怜堆。

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

1) 如果是单机版程序,出错音信应该提示为用户,try catch
放在事件响应函数中。当然矣,假若就此 transaction , 也在此地
begin/commit/rollback。

桌面应用程序框架

DevExpress:一个中外知名的桌面应用程序UI控件库。

Prism:微软开发之对准WPF和Silverlight的MVVM框架,通过效用模块化的研商,来讲复杂的事务效用以及UI耦合性举办分离。

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

2) 尽管是 Web MVC 程序,出错新闻应该提示为用户,try catch 放在 URL
相应的风波响应 java/C# 代码中。当然矣,假设就此 transaction , 也于这里
begin/commit/rollback。假设是 Java EE 程序,提议于 filter 中,也拓宽一个
try catch,作为全局的 exception 控制,避免一旦有人在 URL 相应的风波响应
java/C# 代码中漏写了try catch 。出错音信吗使放在界面及指示给用户看。

测试与性能评估方面

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

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

Moq:卓殊流行的Mock框架,援助LINQ,灵活且高性能。

xUnit:比NUnit更好之单元测试框架,升级改进版的Nunit框架。

MiniProfiler和Glimpse:基于MVC的一定量缓缓性能事件监控框架。

3) 假设是定时任务,try catch 应在定时任务类里,当定时任务类调用
dao/service/工具类的早晚,被调用的函数都无应有有 try
catch。出错音信应记录在日记被。

作业及分布式事务协助

KtmIntegration:一个支撑NTFS文件系统的作业开源类。

NET Transactional File
Manager
:对文件系统操作(复制、移动和去)出席工作补助。

4) 假如非用 MVC 的 jsp/asp.net 程序,try catch
怎么处理,就大费劲。提出不要因而这种软件架构。

分词、全文检索和查找引擎

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仅提供非持久性的行列,也就是说要宕机,数据将相会丢。其中,Twitter的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是一个深轻量级的信网,除了性能大好以外,仍然一个做事优秀的分布式系统。

 

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.DbUtils;

public class MyJdbcUitls {
    public int updateData(Connection con, String sql, List<Object> paramValueList) throws SQLException {
        // int resultRow = 0; try{
        // Connection con = ...
        // statement = con.createStatement();
        // resultRow = statement.executeUpdate(sql);
        // ... } catch (SQLException e) {
        // e.printStackTrace(); }
        // return resultRow; }}
        PreparedStatement ps = null;
        try {
            ps = con.prepareStatement(sql);
            if (paramValueList != null) {
                for (int i = 0; i < paramValueList.size(); i++) {
                    setOneParameter(i, ps, paramValueList.get(i));
                }
            }

            int count = ps.executeUpdate();
            return count;
        } finally {
            DbUtils.closeQuietly(ps);
        }
    }
}

注意:

之所以要将 connection 从外传,因为写这一个 update
的函数时,还未可知确定,实际工作逻辑,是一个 update 函数就是一个
transaction,依旧基本上独 update/delete 组合在一起,做一个 transaction。

 

补充:

数据库事务控制,应该由数据库访问层中独出来,这里是于不错的决定流程:

用户点击 — 数据库事务控制层
— 调用一个要基本上个数据看层函数 —- 代码再次来到到数据库事务控制层,决定
commit/rollback。

 

诸如此类做的来头在:不可以避免用户以代码中连调整用多独数据看层函数,假如在每个数据访问层函数中,commit/rollback,会导致任何操作有差不两只数据库事务,以下是错误的流程:

用户点击 — 
调用一个要基本上只数据访问层函数(每个函数中生
commit/rollback)。

 

好写一个这么好像 JdbcTransactionUtils, 其中蕴涵的函数:

    public static void doWithJdbcTransactionDefaultCommit(SqlRunnable run, Connection con) {
        doWithJdbcTransactionNoCommitRollback(run, con);
        try {
            con.commit();
        } catch (Exception e) {
            Log log = LogFactory.getLog(JdbcTransactionUtils.class);
            log.error(e.getMessage(), e);
            try {
                con.rollback();
            } catch (Exception err) {
                log.error(err.getMessage(), err);
            }
            throw new NestableRuntimeException(e.getMessage(), e);
        }
    }

假诺避将 commit/rollback
做成公共函数,因为这样,其他程序员一不小心漏掉了呀,就有问题了。写公共函数,要到位易用、不易为错用。

方的数据库事务控制函数可以完成。

不过,这样还非到底圆满。毕竟,马虎的程序员,仍然好以一个 click
中调用多单数据库事务控制层,也即使是调用多少个 JdbcTransactionUtils.**doWithJdbcTransactionDefaultCommit(),
结果如下:**

 

用户点击 — 数据库事务控制层函数1 —
调用一个或两只数据看层函数 —- 代码重回到数据库事务控制层,决定
commit/rollback —
数据库事务控制层函数2 —
调用一个依旧多独数据访问层函数 —- 代码再次来到到数据库事务控制层,决定
commit/rollback

仍旧不佳。

 

实际,我们期待的凡,每一趟用户点击,后台还应当是一个数据库
transaction,由此,我的意思是,数据库事务控制代码,要同 web
层的后台处理代码(比如 struts 的 action ,  asp.net 页面对应之 .cs
文件),合并掉,并以这处理 try
catch
。至于其他被调用的函数,比如数据库访问函数,比如工具类,都毫无
try
catch。毕竟,数据库访问函数,比如工具类,都或受多单地点的代码调用,假如以里面写
try catch, 咋样勾勒 try catch 达到所有调用的模块都乐意,是丰富麻烦就的。

 

最终自己当合理的流水线如下:

用户点击 — 用户点击处理程序(struts
action/asp.net 页面.cs),包含 try catch,包含数据库事务控制
 —
调用一个依旧基本上只数据看层函数(无 try catch) —
调用一个要么多独器类函数(无 try catch)。

 

发表评论

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