【第67期实录】专家访谈 - (.NET 3.5)

VS08 .net3.5 版本技术添加
3.0 = 2.0 + WPF + WCF + WF + CardSpace
3.5 = 3.0 + LinQ + Silverlight + 其他
3.5 = 2.0 + WPF + WCF + WF + CardSpace + LinQ + Silverlight + 其他
平台兼容
.Net Framework 3.5,3.0都是在2.0基础上的扩展。 所以3.5和3.0的环境下都兼容2.0 的项目。
服务器安装了.Net framework 3.5后可以运行2.0,3.0和3.5的程序。

VS2008中的 "企业级"

我认为体现“企业级”,有很多方面,其中一个很重要的方面是对其它系统的集成。比如,Silverlight可以直接调用原有的Web Service,而不必要重新采用新的语言开发一次。比如,VS08对各种开发技术的整合。再比如:SharePoint对现有各个系统可以进行很好的整合。等等。
AJAX
ASP.Net AJAX Toolkit中包含大量的 AJAX控件。可以从 [url]http://www.asp.net/ajax/[/url] 下载或在线体验这些控件
已经集成在Vs08中,SP1已支持AJAX History 增加了JavaScript提示,并且能提示WebServics的名称和他的函数,而且能调试
Remoting
构建分布式应用程序 使用TCP,HTTP多种协议发送文本或二进制的数据,局域网使用较多
webservice
远程调用技术 基于HTTPj交换XML数据 交互能力强 不同的开发语言可以互调 INTERNET 使用广泛
WCF
基于SOA微软提供的安全的解决方案 提供更强大的交互性。完全通过修改配置文件就可以更换不同通信协议,非常方便。有一统Remoting和Web Service 的趋势。WCF的前身是.NET Remoting。Web Service在今天,乃至以后仍将会大量存在。但建议新系统采用WCF技术,它的配置化的设置功能还是比较容易控制些。WCF的优势在于灵活,可配置。而且在3.5种可以支持JavaScript,AJAX代码调用,因为支持JSON。WCF作为一种新技术,让团队中所有人员掌握还是需要时间成本的。
Linq
LINQ是会在运行时生成SQL语句。但这些SQL语句都是经过微软专家优化的,在数据量小时,它的性能比较弱(但这时性能问题没必要考虑),在数据量很大的情况下,它的优势就能体现出来。
LINQ采用了一些反射机制,如下面的方式,实现了一个批量删除的LINQ。
public static int Delete(this IQueryable query)
{
DataContext context = query.GetType().GetField("context", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(query) as DataContext;
var table = (from TableAttribute attribute in typeof(TEntity).GetCustomAttributes(typeof(TableAttribute), false)
select attribute).Single();
// Get Condition
string conditions = string.Empty;
var keys = from property in typeof(TEntity).GetProperties()
from ColumnAttribute attribute in property.GetCustomAttributes(typeof(ColumnAttribute), false)
where attribute.IsPrimaryKey == true
select new { Property = property, Column = attribute };
foreach (var key in keys)
{
conditions = conditions + string.Format("[D0].{0} = [D1].{1}", key.Property.Name, key.Property.Name) + " AND ";
}
conditions = conditions.Remove(conditions.Length - " AND ".Length);
// Get SQL
string sql = string.Format("DELETE FROM {0} FROM {1} AS [D0] INNER JOIN ({2}) AS [D1] ON ({3})", table.Name, table.Name, query.ToString(), conditions);
DbParameterCollection parameters = context.GetCommand(query).Parameters;
for (int i = 0; i
return context.ExecuteCommand(sql);
}
LINQ中,可以直接使用语法进行分页:.Skip(m).Take(n)。另外,您也可以使用新的DataPager控件来简单的实现分页。
Lambda表达式
它提供了完成相同目标的更加简洁的格式。请看下面的代码,在实现了这个扩展方法后,我们已经不需要引用System.Linq这个Namespace了。
var results = source.Where(item => item.Name.Length >= 4);
//var results = source.Where(
// delegate(User item)
// {
// return item.Name.Length >= 4;
// }
// );
public static class LambdaExtensions
{
public static IEnumerable Where(this IEnumerable source, Func filter)
{
foreach (var item in source)
{
if (filter(item) == true) yield return item;
}
}
}
使用Lambda表达式时,注意不要有太多语句写在同一行代码中的情况。如果有嵌套很多层函数的情况,请先定义一个变量,将嵌套的计算结果保持在变量中,然后在LINQ中使用这个变量。如果不这么做,在太多层函数嵌套的情况下,LINQ有可能无法解析。对于没有提供的Lambda表达式,您可以开发自定义的Lambda表达式。
匿名委托
.NET2.0中,匿名方法允许开发者在线声明自己的函数代码而无须使用委托函数(delegate function)。
在LINQ中,现在的委托变得很简单,也很让人一下子看不明白。如下:
var results = source.Where(item => item.Name.Length >= 4);
而在此之前,上面的语句等同于下面的语法:
var results = source.Where(
delegate(User item)
{
return item.Name.Length >= 4;
}
Extension Methods
自己定义的变量续函数,实际上等价于静态类中方法调用,它们两者编译出来的IL是一样的。但有一个建议:如果能实现普通类、方法时,请不要使用Extension Methods,毕竟静态类太多了会引起性能问题。另外,建议不要将太多跟业务相关的方法做成扩展方法,否则会导致很混乱的静态类的引用,这对性能也是一个不小的影响。

工作流
一般来说,我们可以将工作流Host到Web Service中,以便前端的系统调用。如果一定要说在WEB下的工作流,现在有一个新的技术,叫做Pageflow,用于控制页面如何跳转,避免页面至今繁杂、混乱、嵌套的页面流转,这个倒是很值得研究一番。
 
LINQ && 存储过程 && 扩张存储过程 && CRL
存储过程、使用LINQ to SQL、SQL Command、CLR等方法访问数据。存储过程和CLR都是经过预编译的,性能方面最佳。使用SQL Command传入SQL语句的方法是性能方面最不推荐使用的。而LINQ to SQL,实际上是执行一段SQL语句,因此,理论上性能也高不到哪里去。但是,由于LINQ to SQL生成的SQL语句是由微软专家经过最佳优化的,在数据量很小时,也许所有方案都比较快,但当数据量很大时,微软专家的这些优化的SQL的性能优势就显露出来了。另外,从开发成本来说,LINQ to SQL也是最佳的选择。

你可能感兴趣的:(职场,专家,休闲,访谈)