coollzh

.NET Oriented
随笔 - 74, 文章 - 1, 评论 - 266, 引用 - 14
数据加载中……

2009年9月6日

关于.NET VS JavaEE平台争论的沉思录

最近关于.NET和java平台之间的争论似乎又热起来了,就我关注的两个社区,先是老赵的《为啥老赵不喜欢Java*语言*》。引发了博客园的大讨论,最近csdn又有人发博.Net与J2EE的快餐型比较,引发了空前的大讨论。从论调来说感觉对java不利。虽然csdn得那个篇博文深度不够,但确实引发了大量了讨论,虽然很多人都说,这个话题没啥好讨论的,既然引发了大讨论,自认有其内在原因在驱动,所谓空穴来风。。。。
  关于两个平台的优劣已经讨论的够多了,我在这里就不多说了,我在这里提个现实的问题供大家思考:

 国内外用.NET做的大型系统确实java的要比.NET的要多,这是客观的事实,我们研究.NET的专家们有没有反思过,为什么?
我大致总结了几点或许可能的原因,请.NET的同仁评判(.NET比java好的地方就不多说了:)

1)是因为linux unix系列的操作系统更加稳定安全?通常java的程序都是部署在unix家族的服务器上
      unix系列的服务器(大,中,小型机)发展这么多年,确实口碑很多好,有sun,ibm,hp等大公司全力推动,甚至垄断。基于unix的HPC服务器也是很多年前就有了,而微软的HPC也就这两年的事,还没有怎么有大型的应用,据说有些HPC已经部署在华尔街的投行了,亚洲最快的服务器“魔方”也是用的微软的HPC。希望微软的HPC一路走好。
  但unix是需要大把银子的,动辄几百上千万的,不过,能用的起的机构也不在乎这点钱。。。。
  至于说linux,稳定性  安全性比最新版的Windows server高,我认为未必,关键看用的人的水平。。。。

2)java跨平台?
   我个人认为这个理由在大多数公司都是不成立的,一个系统一但选定了一个平台,再换平台的可能性微乎其微

3)linux操作系统免费?
   这个在某些情况下确实,但Windows server却也不贵,只有在很大规模部署的时候,liunx才能显示出成本优势来

4) java的开源项目多? SSH,Jboss,Seam,tomcat,OpenJMS, ActiveMQ,HDIV,......
   这个,做.NET的同仁不得不承认,但现在.NET上没有一个被广泛使用的开源MVC框架,虽然我觉得WebForm也不错,但是看了ROR,Grails这些框架后,还是觉得ASP.NET还有很多东西需要完善,需要追赶。祝愿ASP.NET MVC2.0可以全面赶超......
  消息系统,.NET似乎只有MSMQ一个,据说ActiveMQ也出.NET版了,但谁在用呢?
  至于ORM,.NET确实也有NH,iBatis.NET等产品,但最新的版本总是java得优先出来,.NET的版本都是感觉是没妈的孩子,话又说回来,真正把HN,iBatis.NET的用的好的有多少呢?但是Linq to Sql出来的时候大家那个热情啊,微软出品,一定要好好研究,要不然就落伍了,兄弟们,睁开眼吧,我们要向java学习,要自己创造,不要什么都等微软做好了,才去研究。.NET圈内好像有个不成文的约定,所有的技术或组件,优先使用微软提供的,微软只要有,那就是最好的,就一定要用。我个人觉得这不利于.NET平台的大发展。。。

5)java起步早,有些系统已经用java在做了,同时精通java的人才多?
    这是我个人的感觉,算是一个因素,从我招人的经历来看,java的高级人才确实比.NET好招,难道国内.NET的高级人才这么抢手。。。。,或许吧,恭喜大家了。
    希望做.NET的哥们,都尽快成长起来,成为一方高手!!

6) java的商业化工作做得好?
   个人感觉,SUM,IBM,ORACLE。。。等公司借助其平台产品和品牌的优势,在一些mission critical的系统上投入了很大的公关力度,如电信,银行,金融,能源等。
   微软在这么方面起步比较晚,产品线还在OA,Exchange上,他的HPC,SQL Server,包括分布式组件WCF,WF等企业产品线需要大力提高。我不是说.NET不能用在Mission Critical的系统上,而是目前采用.NET的公司相对较少,需要有个发展的过程。
 
以上是我个人的观点,这里主要想总结一下java比.NET的可能优势,或者说.NET那些地方还需要追赶,有些东西的发展不是我们能左右的,但希望我们能认清形势,尽量弥补,也许不久的将来,事情已经不是今天这个样子了。


posted @ 2009-09-06 00:19 coollzh 阅读(4601) | 评论 (79)编辑

2006年1月3日

不要使用Microsoft Project的理由


Microsoft Project是为了建造办公大楼设计的,而不是为了开发软件而设计的。
 
Microsoft Project 的毛病在于,它认定你想花费大量的时间去关注依赖性,以至于完全不值得而正式个总他们而做出努力。
 
Microsoft Project的另一个问题是,他认定你以后会希望能够通过按一个小按钮来“重新调整”进度表。这意味着他要重新安排任务并定重新交给不同的人去完成。对于软件而言,这没什么意义。程序员是不可互换的,如果试图让UI程序员去解决类似Winsock的问题,他会在原地踏步并浪费一周时间才能达到Winsock程序设计的速度。
 
 
                                              --- 摘自《Joel on Software》

--- 本文不能完全代表本人观点,但是从敏捷开发的角度来说,用Microsoft Excel的效率和方便性胜过Project

posted @ 2006-01-03 10:32 coollzh 阅读(2202) | 评论 (4)编辑

2005年3月9日

Using distributed transactions in .Net 1.x without deriving from ServicedComponent

Using distributed transactions in .Net 1.x without deriving from ServicedComponent

The most used feature of System.EnterpriseServices or COM+ is the distributed transaction support. And the automatic transaction programming model in ES using attributes ([Transaction] and [AutoComplete]) is great and nice but (it is always a but!)... you need to inherit from ServicedComponent and the Transaction attribute is only available at class level, and you need to register your component in the COM+ repository and the list can continue.

 

If doing this seems overkill to you, because all you need is a distributed transaction to protect your code/actions and you don't care of any of the others ES features (which are great ones nevertheless) then there is a solution for you: System.EnterpriseServices.ServiceDomain. Here is some sample code:

 

using System;

using System.EnterpriseServices;

 

namespace SDSample

{

   class Class1

   {

      [MTAThread]      

      static void Main(string[] args)

      {

         ServiceConfig config = new ServiceConfig();

         config.Transaction = TransactionOption.Required;

         ServiceDomain.Enter(config);

         try

         {

            MyTxCode();

         }

         catch(Exception e)

         {

            // we got an exception

            Console.WriteLine(e.Message);

            // so, we should abort the transaction

            ContextUtil.SetAbort();

         }

         finally

         {

            ServiceDomain.Leave();

         }

      }

 

      // The code that I want to be transactional

      static void MyTxCode()

      {

         Console.WriteLine(ContextUtil.TransactionId);

                 

         // Open connection to database 1

         // Execute update in database 1

 

         // Open connection to database 2

         // Execute update in database 2

      }

   }

}

 

Of course, you can go further and create a helper class, let’s call it ESTransactionScope (similar to System.Transactions.TransactionScope that will arrive in Whidbey) that will be very easy to use:

 

using System;

using System.EnterpriseServices;

 

namespace SDSample2

{

   class Class1

   {

      [MTAThread]      

      static void Main(string[] args)

      {

         using( ESTransactionScope ts = new ESTransactionScope())

         {

           MyTxCode();

 

           // Everything went well, no exception thrown

           // so let’s vote for Commit

           ts.Complete();

         }

      }

 

      static void MyTxCode()

      {

         Console.WriteLine(ContextUtil.TransactionId);

                 

         // Open connection to database 1

         // Execute update in database 1

 

         // Open connection to database 2

         // Execute update in database 2             

      }

   }

 

   // Used to create transactional code blocks

   class ESTransactionScope : IDisposable

   {

      // Dispose must be called to exit the transactional block

      public void Dispose()

      {                

         if(!this.Consistent)

         {

            ContextUtil.SetAbort();

         }

         ServiceDomain.Leave();

      }

 

      // by calling this method, you mark the scope as being consistent

      // and ready to for commit

      // if the method is never called, upon dispose, the scope will abort the transaction 

      public void Complete()

      {

         this.Consistent = true;

      }   

 

      public ESTransactionScope()

      {                

         EnterTxContext(TransactionOption.Required);

      }

 

      public ESTransactionScope(TransactionOption txOption)

      {

         EnterTxContext(txOption);

      }

 

      private void EnterTxContext(TransactionOption txOption)

      {

         ServiceConfig config = new ServiceConfig();

         config.Transaction = txOption;

         ServiceDomain.Enter(config);          

      }

 

      // By default, the scope is inconsistent;

      // To Commit the transaction on exit, the Consistent flag

      // must be set to true before Dispose is called

      private bool Consistent = false;

   }

}

 

System.EnterpriseServices.ServiceDomain is available only on XP SP2 (or higher) and Windows Server 2003 and only in .Net 1.1.

 

If you need your app to work with .Net 1.0 or on Windows 2000 or XP pre-SP2, you can use the trick that Don Box posted at http://www.gotdotnet.com/team/dbox/default.aspx?key=2004-07-12T08:40:44Z  It uses exactly one transactional ServicedComponent based class and a DoCallback method to which you pass the delegate to your MyTxCode function that needs to execute in a transaction.

 

posted @ 2005-03-09 23:43 coollzh 阅读(1343) | 评论 (0)编辑

2005年1月8日

.NET下的开发者们正在继承计算机早期时代伟大的黑客精神

以下来自《程序员》2005第一期
    “纵观整个.NET阵营,给人留下最深刻印象的,也许不是它在技术上的具体成就,而是它的活力本身。身为C++元老的Stan Lippman说过这样一段话:'......只有少数几个人在努力进行技术创新,努力向人们提供更具有创新性的计算环境,让人们更加自由自在。微软就是这少数人中的一个。我在微软工作,那气氛让我似乎回到了十多年前。', 这段话并非有没有道理。.NET 2.0的探索,C++/CLI的创新,Delphhi for .NET的勇敢尝试,Avalon/Indigo的宏伟蓝图,似乎都能令人产生这样的一个印象:
.NET下的开发者们正在继承计算机早期时代伟大的黑客精神。 "

                                                                                                                                                                                        -- 文 / 左轻候
这段从某个角度可以做为.NET技术在2004总结的,2005的展望。。。

posted @ 2005-01-08 18:13 coollzh 阅读(1237) | 评论 (5)编辑

2005年1月6日

上海著名网络公司招聘高级软件工程师

.net高级软件工程师  2人
岗位职责:
负责项目的总体架构设计、分层详细设计,代码编写;负责项目的管理,对于软件工程师提供技术指导。
任职要求:
1、大学本科及以上学历,计算机及相关专业,三年以上工作经验
2、精通面向对象分析设计,具有大型企业级系统设计、开发、调优经验
3、精通.NET Framework, C#,熟练使用Visual Studio.NET开发工具,精通ASP.NET编程模型,精通ADO.NET编程模型
4、熟悉SQL Server或Oracle大型数据库系统,熟悉SQL存储过程的编写
5、具有完整的应用开发周期经验,熟悉设计、编码、测试、实施等各阶段工作,有丰富的项目管理经验
6、具有适当领导和组织才能,能够带领技术团队创造核心技术,引导团队的技术发展
7、具有熟练的英语听说读写能力

.net软件工程师 4人
任职要求:
1、大学本科以上学历,计算机及相关专业毕业,2年以上工作经验
2、精通Windows平台下的Web技术开发,具有丰富的项目经验,熟悉ASP.NET,Javascript,熟悉ADO.NET编程模型,熟练掌握NET Framework, C#,熟练使用Visual Studio.NET开发工具
3、具有良好的代码编写风格,熟悉Web程序代码安全
4、善于与他人沟通、合作,具有团队精神,良好的自学能力
5、熟悉数据库设计,了解数据库性能调优者优先
6、熟悉企业设计模式,具有大型企业级系统设计、开发、调优经验者优先
7、具有一定的项目管理经验者优先
8、能熟练阅读英文技术文献

C/C++软件工程师 1人
任职要求:
1、 大学本科以上学历,计算机及相关专业毕业,2年以上工作经验
2、 熟练掌握C/C++,熟练使用VC++等开发工具,精通Windows编程
3、 善于与他人沟通、合作,具有团队精神,良好的自学能力
4、 熟悉计费相关业务者优先
5、 熟悉.net技术架构者优先
6、 具有一定的项目管理经验者优先

7、能熟练阅读英文技术文献

SQL Server数据库管理员 1人
任职要求:
1、 大学本科以上学历,计算机及相关专业毕业,2年以上工作经验
2、 精通SQL Server2000,有1年或以上大型数据库维护管理经验
3、 熟悉数据库设计、性能调优和查错,精通存储过程编写
4、 有数据库相关应用程序开发经验者优先
5、能熟练阅读英文技术文献
熟悉asp.net或者.net者优先

posted @ 2005-01-06 20:13 coollzh 阅读(3760) | 评论 (12)编辑

2004年12月20日

即将过的2004

     摘要: 看到别人在总结即将过的2004,感觉非常惭愧,2004我都做了什么?1.年初辞职,再次投入到.net的怀抱,决定不再三心二意2.为了工作方便,搬到浦东一个偏僻的地方3.在博客园开始写blog,感谢dudu,认识了一批朋友4.今年技术上没有太大长进,惭愧,关注软件工程和项目管理5. 因电子商务的需要,对网络加密,签名,证书有了一个深刻的认识,算是一个小小收获6.第一次实施一个企业级网络负载均衡的电子...  阅读全文

posted @ 2004-12-20 12:37 coollzh 阅读(1157) | 评论 (7)编辑

2004年12月11日

URLRewriting的问题

     摘要: 本来以为URLRewriting的一般应用实现起来应该比较简单,但今天遇到了一个其中的一些限制,贴出来给大家共享: 假设用户可以看得虚页面时A.aspx,实际转向的物理页面是B.aspx 分一下几种情况: 1.从A过来的请求不带任何QueryString和post参数,则可以成功的转向B 2.如果A过来的请求带post参数,也可以成功的转向B,B也可以成功接受post参数 3.如果A过来的参数带Q...  阅读全文

posted @ 2004-12-11 01:28 coollzh 阅读(1961) | 评论 (5)编辑

2004年10月27日

谁知道c++中的char ** 在C#中一般用什么类型

     摘要: 类似这样这样的 int GetData(char ** pBuffer)我用public externa static int GetData(StringBuilder pBuffer),得到的好象不对Google也没搜到这样的例子,不知道谁做过没有  阅读全文

posted @ 2004-10-27 23:48 coollzh 阅读(2950) | 评论 (8)编辑

2004年10月18日

Indigo Untyped Channel

     摘要: 有两种通道来使用最新的网络通讯组件Indigo:typeed 和untyped,typed channel是通过Server端的WSDL,即通过自动自动生成的interface,很明显,我们要遵守一个契约。另一个方面,我们可以使用untyped channel,在这个通道里,我们只是从一端到另一端传递最基本的Message(Indigo中的最基本单元),没有协议需要遵守,通常基于一个action ...  阅读全文

posted @ 2004-10-18 23:38 coollzh 阅读(1263) | 评论 (1)编辑

VC#2005 最新技术预览版下周发布

     摘要: 来自Somasegar's WebLog的消息,微软下周将发布最新技术预览版的Visual Studio 2005,该版最激动人心的功能是VC#也支持Edit & Continue’ (E&C).了,说可以显著提高C#开发人员的开发条是效率最新消息请参考http://msdn.microsoft.com/vs2005/  阅读全文

posted @ 2004-10-18 22:50 coollzh 阅读(1212) | 评论 (0)编辑