2004年7月31日

关于MONO

Mono最近发展很快,前段时间发布了Mono 1.0,并且有虚拟主机提供商采用了MONO提供ASP .NET的网站服务。Mono带了Mono版的NUnit,还包括了开发工具Mono Developer。

Mono是一个开源的.NET实现。我认为,开放、开源才是.NET的正确发展方向,可能Microsoft并不是这么想,但其把CLR和C#提交ECMA和ISO,也是期望通过开放,赢得更多的开发者,从而和Java进行竞争。

Novel公司收购了Ximan,发展Mono。Novel之前收购了两家Linux厂商,包括SuSE Linux,其希望能够在Linux上提供一个良好的编程平台,其不满意Java在桌面应用方面的表现,于是便收购Mono,把希望寄托于.NET。至少目前看来,Novel的策略是成功的,投资少,见效快,效果明显。

担心,Microsoft对.NET的控制太多了,Novel公司也没有其它公司支持,无法与Microsoft抗衡,在制定.NET相关的标准时,完全没发言权。而且现在也没有类似Java的JCP组织,决定.NET的相关标准。

.NET在开放道路上,路途漫漫……

posted @ 2004-07-31 19:07 温少 阅读(981) 评论(9) 编辑

关于字符串的使用

字符串,最初在C中是指一个char数组。在.NET和Java,语言本身内置String的类型,String一个不可变得类型,每次修改,都返回新的实例。以下我讨论关于String类型的一些常见用法。

1、判断是否空字符串

//判断是否为null,或者长度是否为0
if (str == null || str.Length == 0)
{
    
//do something 
}

//判断是否为null,并且长度是否为0
if (str != null && str.Length != 0)
{
    
//do something 
}

   String trimedStr;
//判断是否为null,并且Trim之后长度是否为0
if (str != null && (trimedStr = str.trim()).Length != 0)
{
    
//use trimedStr
    
//do something 
}


//判断是否为null,并且trim之后长度是否为0
if (str != null && str.Trim().Length != 0)
{
    String trimedStr 
= str.Trim();
    
//do something 
}

2、优化长字符串处理
 String一个不可变得类型,每次修改,都返回新的实例。在C#中使用StringBuilder,在Java中使用StringBuffer。
 例如:

StringBuilder strBuilder = new StringBuilder();
strBuilder.Append(
"aaa");
strBuilder.Append(
"bbb");
String str 
= strBuilder.ToString();


3、重载ToString方法
 当你一个大对象,包括很对子对象,需要每个子ToString然后相加,产生一个大字符串,此时你需要重载ToString()方法,但是这样的效率比较低。一种可替代的方式为,你提供一个额外的Output方法。例如:

public void Output(StringBuilder strBuilder)
{
   
//do something 
}

 
public override String ToString()
{
   StringBuilder strBuilder 
= new StringBuilder();
   Output(strBuilder);
   
return strBuilder.ToString();
}


总结
 其实这些都是很简单的技巧,理应该每个人都掌握,但是以前参加代码评审时,发现很多人还是犯错了,有个项目某个人使用了一种错误的方式,然后在整个项目组内推广,结果是整个项目组都使用错误了。

每次代码评审都会发现很多可笑的事情 :-)

posted @ 2004-07-31 17:56 温少 阅读(2872) 评论(10) 编辑

关于.NET中一些模块的看法

对.NET的一些模块,包括ASP .NET、ADO .NET、COM+等以前曾经使用过的模块,最近有了一些看法,随手写下:

ASP .NET

很棒,从扩展性、创新性、性能都很好。

我认为这是.NET Framework中设计和实现最好的模块了。ASP .NET由于会把Page编译成代码,然后再编译成DLL,速度很快。在Server Event、Server Control方面,ASP .NET是一个伟大的创新!

不过在此要澄清一点,由于大所属ASP .NET的页面使用了复杂的方式设计,不良的设计,导致了ASP .NET的页面比ASP还要慢,相当多的页面都是这种状态,不是Microsoft所宣传的那样。以前一个Microsoft的技术人员,经常碰到客户抱怨,说ASP .NET比ASP还要慢,出现这样的问题,多多少少与ASP .NET的复杂度有关,也算是ASP .NET 的一点瑕疵吧。

Java与此对应的是JSP,JSP也是编译执行,但没封装的没有ASP .NET好, Struct似乎也抽象的不够好,我没在Java上编写Web程序,但认为目前Java在Web方面的框架技术,不如Microsoft的.NET。飞刀曾经对不同的Web Framework做过比较,也许他有自己的见解。

ADO .NET

简单易用,非常适合编写小应用。对接口编程很差,扩展性不好,有些地方的设计意图自我矛盾,我认为是.NET Framework中设计最差的模块。关于这一点,我和多个朋友交流过,几乎一直认为其设计很差。具体可以看我写过的两篇关于ADO .NET和JDBC的帖子。


企业应用

我对.NET的企业应用是很失望的。当年国内最大.NET项目,KINGDEE的EAS .NET,开发两年后,放弃而转向J2EE,当时的主要原因是因为KINGDEE拥有J2EE核心技术和很深的技术积累。
不过现在回想起来,放弃.NET,从产品的长远发展来看,是十分正确的。.NET对企业应用和大型开发的支持,还不足以支撑一个大型企业应用。我们当初做了Microsoft的产品实验室。
现在,看到KINGDEE的那个竞争对手,由于没有自身的核心技术,在Java技术方面积累不够,只能依赖于Microsoft的方案,犹如浮沙上筑高楼,他应是万般的无奈,以后,也许会后悔的!一个企业,如没有自己的核心技术,主要靠销售,也只能如此了……

posted @ 2004-07-31 14:35 温少 阅读(4172) 评论(49) 编辑