关于.NET、Java和项目、产品

  我是一个学Java的新手,但已经用.Net开发好几年了。当我发现对于一个系统从小型到中型,再想往上做的时候,希望能够做一个真正面向企业集成规模的软件时,突然发现微软的技术已经无法很好地支撑我想要的东西了。因为把业务真正拆分成不同可独立部署的业务组件时,在.net中很难找很好技术支撑。在这点上,微软确实不如java阵营,积累太少,wcf还很不成熟,biztalk又贵(据说还很不好用),更可怕是做这样的一个东西需要时间是很长的,需要持续发展,它需要的的是一个开放基于标准的相对稳定技术标准。可是微软的商业策略是独食政策,不知道大家发现没有基于.net的公司没有很大的,都是一些小鱼,而且微软动不动还是吃掉他们,borland就是被玩死的,因为所有技术标准都是微软说了算。在这一点上,Java是很有优势的,众人拾柴火焰高,所以做大系统时选择java是正确的。
  当然我并不是说.net不好,如果你只是做一个中小项目,用.net比java有很大的优势,成本低,开发效率高,c#有一些语言特性比java会让初学者感觉开发敏捷多了。当然这里有一个前提,你只是想做个小项目,不会变成大项目,只是想快速挣钱。很多用.net的公司就是这样的,挣到银子才是真的,对用户的需求言听计从,说什么就做什么,而用.net又可以让自己的利益达到最大化,何乐而不为呢。当然还有另外一些公司,从本质上来说跟上面的公司没区别的,只是做项目的包工头罢了,但希望面子上好看些,说自己和很多国外的大公司一样使用j2ee,可以多要些银子,往往这样的客户都是国企。
  所以说如果想做一个真正面向企业级的产品,只能选择Java。因为你要面对2个变化问题:一个因为时间维度,客户需求在变化;一个因为多用户的需求不同,怎么解决个性和共性的问题。而Java本来设计的目的和思想就是解决这些问题。所以我有另外一个观点,如果总是希望java轻量级些,那你不如去选择.net,因为轻量级目的就是提高开发效率,而复杂的需求本来就需要复杂的设计,这是没有捷径的。那些一味地追求自动生成的工具是没有什么出路的,因为真正的业务是非常复杂的,不然就是你的业务还没有做到一定的规模和程度上。
[该贴被flyzb于2010-10-01 17:57修改过]
[该贴被flyzb于2010-10-01 17:59修改过]

顶。。关注!

  其实很多人做的软件都只能称之为项目。如果说自己做的不是项目,那么可以反问一下“这个软件可以以一种很轻松的方式很容易地让多种用户使用吗”。对于那种“每一个用户一个版本”的软件,我称之为“项目”。为什么软件会做成这个样子,一是大家都很浮躁,以“快速干完项目拿到银子”为实施真理,二是缺乏对业务的理解,实施能力差,完全按照用户的需求做软件。说实话,我们大多数的软件公司都是些包工头,都是“实干型”的,很少在业务上有理论高度,往往会“屈服在用户的需求淫威之下”。对于这种软件,我不认为用了DDD模式有什么用处。我总是报着一种坚持,“不是用户说的全部都是正确的”,用户总是“希望你盖一座能达到月亮上的摩天大楼,而从来不管地基是否能够真正支持”。其实bang的框架在我看来,如果你没有一颗追求业务本来面目的心,是根本用不好的,甚至感觉别扭。

写得很好,java 和.net 定位不一样,之前有文章 离开.net ,作者将.net 和ruby 比较,两者都同样定位在快速开发,作者认为ruby 社区是共享的。
为什么国内存在很多项目版本,致使维护成本越来越高,关键可重用组件太少,而希望复用,粒度就要很细,ddd是指导业务细粒度建模方法。

支持

请教一个问题,wcf不成熟具体体现在?

我涉猎wcf也不多,但是从文档上看,似乎比较完善。

应该就是一个com+的。net版本,和corba之类的东西差不多吧。

而且层次和概念也挺清楚的。

wcf的背后机制是非常复杂的,我也没有完全搞明白,我说“wcf不成熟”指的是wcf的应用层面。用wcf做一些小范围的分布式是可以的,但关于分布式事务、分布式缓存之类的东西,。net还在成长阶段,没有成熟的应用。

实际上据我所知,很多企业应用已经大规模采用。net,而且似乎也没有不良反应。

分布式缓存。net平台上似乎也有比较不错的方案,至于分布式事务,似乎有个国际标准,。net也实现了很大一部分(似乎没人完全实现了)。

个人感觉其实。net之所以被大家认为不行,和它的社区不活跃有关系,明白的人不愿意出来多说两句。

呵呵。。。我就用.net开发过一个中型项目,已经用于多个企业了,销售总额也有300多万了,不知道算不算你说的情况。
的确,“分布式事务和缓存”在.net里的确有,但都是在一些试验项目上,(可以去http://www.codeplex.com/上看看),根本就没有“工业级成熟度”的应用。如果不是微软官方的方案,可能还不敢用于正式的项目上。。因为.net世界里,一切标准都是微软说了算,(微软是按照商业利益来权衡技术标准的),.net一升级你就后悔吧。
.net真的不能做大项目吗?其实也不是,myspace就是啊。但那种要求和代价太高了,很多东西都要做到微软的前沿才行。这就是为什么在国外,.net架构师比Java架构师薪水高的原因。
从我的角度来看,一是我不愿意等待,可能.net8才能达到我的要求吧;二是我没有语言大师级的天分,没有那个精力和能力做到myspace那样的事情,毕竟我是做企业业务应用的,我希望有相对成熟的经验和套路来帮助我;三是微软的策略让我害怕,.net世界的没有标准和频繁升级让我害怕。

[该贴被flyzb于2010-10-08 13:13修改过]

分布式事务似乎wcf支持,有个什么ws-atomic之类的协议,似乎ibm之类的大公司支持的标准。分布式缓存,分布式文件系统我记得好像看过类似文章,不过也的确记不起来是哪个了。 感觉大公司要是做的话,应该问题不大,因为他们似乎不依赖开源框架,反而是很多开源的方案都是抄袭人家大公司实现,就像linux其实就是借鉴各大成熟os,当然现在起来了之后有自己的发展了。

只不过对于。net,那些超级大公司肯定不会用他的,纯商业问题。


Transactions provide a way to group a set of actions or operations into a single indivisible unit of execution. A transaction is a collection of operations with the following properties:

Atomicity. This ensures that either all of the updates completed under a specific transaction are committed and made durable or they are all aborted and rolled back to their previous state.

Consistency. This guarantees that the changes made under a transaction represent a transformation from one consistent state to another. For example, a transaction that transfers money from a checking account to a savings account does not change the amount of money in the overall bank account.

Isolation. This prevents a transaction from observing uncommitted changes belonging to other concurrent transactions. Isolation provides an abstraction of concurrency while ensuring one transaction cannot have an unexpected impact on the execution of another transaction.

Durability. This means that once committed, updates to managed resources (such as a database record) will be persistent in the face of failures.

Windows Communication Foundation (WCF) provides a rich set of features that enable you to create distributed transactions in your Web service application.

WCF implements support for the WS-AtomicTransaction (WS-AT) protocol that enables WCF applications to flow transactions to interoperable applications, such as interoperable Web services built using third-party technology. WCF also implements support for the OLE Transactions protocol, which can be used in scenarios where you do not need interop functionality to enable transaction flow.

You can use an application configuration file to configure bindings to enable or disable transaction flow, as well as set the desired transaction protocol on a binding. In addition, you can set transaction time-outs at the service level using the configuration file. For more information, see Enabling Transaction Flow.

分布式缓存。

。net好在统一,一致,基本不用太费力气就那么一个方案,没太多选择。

但是坏处也是如此。

总之,应该叫特点而不是优点或者缺点吧。

一家独大的世界,的确不是那么活络。

To nkhanxh
我看了你说的那篇文章,你没注意“Velocity也将集成在.NET Framework 4.0中”这句话吗?这说明Velocity还不是成熟的东西。如果做小项目用用也就罢了,但是大项目怎么敢用呢,除了真正站在前沿的.net技术大牛。为了在企业开发方面追赶java阵营,微软提出了很多解决方案,建立很多项目团队,但这些项目真正达到应用的成熟度还需要很长一段时间。“有不等于成熟,尤其是工业级的成熟度”,众人拾柴火焰高。为什么微软的ado.net entity framework之类ORM工具成熟度不高,在我看来,就是没有真正大用户来验证。有一个叫做genome的.net ORM做的相当不错,比微软自己的要优秀多了,在易用性方面甚至比hibernate也要好是一个20多人的欧洲小公司开发的,他们也很无奈,一直疲于奔命于追赶.net的升级脚步。前段时间我就遇到genome和WF4不兼容的地方,哎,.net不开放啊。

hehe话说我。net用的也不深入,

不过那个文章是2008年的了。似乎
http://kb.cnblogs.com/a/1749509/

正式版叫这个。

另外,wcf,ado.net entity framework.据我所知都被某挺大的国外公司用了。
应该还可以吧。

不好的地方在于不开源,有了问题没法自己查。

其实开源产品也未必比微软的质量好,只不过开源的话,有问题自己就解决了。

不过我们公司尽量避免用开源,实在不行了就用bsd, mit的,但也是得法律部门通过,否则别人评审你们公司价值的话,觉得你不过是在一堆开源框架上搭出来的东西,能值几个钱。

To nkhanxh
    哎。。。咱们两个说的根本就不是一个层面的东西。我“不是说.net不好,而java很好”,而这触犯了你。其实没有不好的技术,只有不适合的技术。快速开发,轻量级开发,这一点上java确实比不过.net。你说.net能做很多东西,我并不否认,包括一些大公司也在用,但技术的选用关键在于适用的范围。我是说关于企业的大型管理业务项目开发和应用,java有很多成熟的套路和大量的实践应用,这是大家都公认的事实。而我在表达一种观点:"企业级的大项目,.net的技术很不成熟",看看你的提供资料链接,都是.net4的东西,出来才多久。一个新技术的成熟不是正式版一发布就完事了,而是要经过大量用户不同层次和规模的项目的验证,这就是我强调的工业级成熟度。
    应该说你很幸运,因为你所有的需求都可以用.net解决。在2年前,我也没觉得.net有什么问题,java的东西偶尔看看新闻,从来都不关心。可是随着面临企业业务越来越复杂,技术上的瓶颈越来越大:一是关于一个中型企业项目,有同时超过10个不同企业的用户在使用,基于一个版本开发,怎么更好地解决共性和个性问题,不是做项目而是做产品,而对于中国特色的企业用户是很难的;另外一个场景是过去需要3、4个中大型系统的业务,现在需要统一到一起的企业集成问题(不是SOA治理)。面对这样复杂的业务,我曾经痛苦地抉择了一年,而最终选择走java路线。如果你有这样项目经验和经历,希望继续交流,当然谁如果有亲身尝试过的.net成熟解决方案当然更好,而不是找来所谓一两篇资料。
    我有一种感觉,.net就像"傻瓜相机",而java就像"单反相机"。“做得快而好”当然是.net,而想玩专业级的当然就得选java。可是用了“单反相机”做得极烂的也大有人在,这也是为什么说“java很慢”的由来。
[该贴被flyzb于2010-10-08 23:22修改过]

别误会,我是想找一个人印证一下我从纸面得来的知识,因为我也没有在。net上面做过深入的开发。
呵呵。