彻底完全地被LINQ(2sql以及C#3.0里的一些语法)雷到了

    有几位高手在留言里提醒我, 把几个概念搞混了. 其实概念我是明白的, 只不过我想, 这个文章肯定不是那种有 "前言" 和 "参考文献" 清单的技术论文, 而更多是为了表达我在试用linq----2sql, 不好意思, 差一点又混淆了视听----时, 对MS所做的一些工作的敬佩, 以及解决了我积累多时的技术问题时所感觉到的那种快意和激动, 因此甚至连很多拼写错误也没有纠正, 大家都是搞技术的, 相信不会不理解我的意思.
    但是, 为了表示对大虾们意见的重视, 我这就把文章里的模糊化的概念和名词加一括号注释, 以免误导读者. 如果您已经被本文误导, 兹向您表示深切的(但是肚子里憋着笑的)歉意.
-------------------------------------------------------------------------------------------

    多年了,没有什么技术再能让我激动得无法控制住自己,包括WPF的超炫界面功能,我也只是小小地喜悦了一下,但毕竟知道界面设计更多还是美工创意的功夫,见过很多品味不够的开发人员,把自己程序界面搞得花里胡骚,简直得像不小心坐在调色板上的大熊的屁股,只能让人笑话。所以WPF的UI能力似乎离自己还有距离。

  但是,Linq(其实是LINQ2SQL和C#3.0里的一些新语法),却真得把我雷到了。在我重新坐下来写这段话之前,我是激动得在屋里转了几圈的,嘴里至少把MS骂了十来句“WC!”,这骂不是怀了恨意的骂,而是怀了敬意的骂,是没办法控制自己兴奋和激动的心情的骂,就像是《朱罗纪公园》里的马尔康姆教授第一眼看到人工DNA造出来的活恐龙时,说的那句话:“这帮狗娘养的真的做到了!”
  我,未能免俗,被MS绝对好用的IDE拖住了,从VC(++)5.0开始, 一路上了MS的套, 直追到C#3.(0, .net3.5), 每一代的技术都让人目瞪口呆, 但每一次又都如过眼云烟, 还没有来得及完全消化, 下一个版本时就已经被全然抛弃了. 在.net 1.0 时, 我跟着MS去用服务器控件和Dataset, 还没有玩热, 2.0里已经开始在推datasou(r)ce, 其实我想datasou(r)ce里一定会有很精深的东西, 但是我也没来得及好好看时, LINQ(2sql)已经出现了.

    其实不能怪MS把自己的技术追随者随意抛弃, 凭心而论, MS这几年是太进取了, 太希望把新的技术推出来了. 因为那些中间阶段的技术, 虽然都能让人有醍醐灌顶的感觉, 但是真得实用起来时, 总是会有一些这样那样的问题, 或是不方便之处. 于是, 每次MS推出一个新技术时, 都能让我感觉恰好解决了一直困扰我的一些问题. 看看MS在为了解决企业应用上做的努力吧: ASP.net用服务器控件的方式来简化BS应用的开发, 不方便, 改用vs2003的智能客户端(这时还需要用自己写程序集加载功能), 还不方便, 在vs2005中智能客户端已经一键部署了, 还是不方便, 然后, VS2008里WPF出现, 用BS的方法开发和使用程序, 但像CS应用一样运行, 您满意了吗?

    再看ORM方面的努力. .net1.0时, MS请我用dataset和dataadapter, 那已经比SQL方便了不了啦! 只不过我是一个OOP纯粹主义者, 不太喜欢用数据表的方式考虑问题, 然后, MS开始允许让我把 IEnum(e)rable 型也做为数据源, 也一样可以绑定数据控件. 只是让我痛苦的是对象不会自动地保存到数据库中, 我试过流行的开源ORM框架, 也痛苦地写了自己的代码生成器从表结构来生成类定义和CRUD的方法. 但还是总是会遇上一些问题.

    然后, LINQ出现了, System.Data.Linq(也就是linq2sql) 也出现了.

    第一次尝试(linq2sql)时, 我向dbml(linq2sql类设计器)中拖了一个表格, 然后, 我被雷到了第一次: 它生成了我一直在找但一直没有找到的那个类, 还有我之前不止一次梦想过的数据上下文类!(我知道, 我知道, Hibernate也是可以的, 但是我真得记不住他的配置方法.)

    然后我向dbml(linq2sql类设计器)中放进去了更多的表, 然后, 我被雷到了第二次: 它根据我的表关联关系自动为我配置好了对象聚合! 我试着查询了一下产品对象, 然后, 通过产品对象的定单成员, 我可以直接检索这个属于产品的定单了.

    在通读了几篇LINQ(2sql, 这些文章的作者也没有刻意去区别这个差别, 包括MSDN上的一些作者, 我替他们再向各位道歉)的内容之后, 我决定我的下一个项目用LINQ(2sql)来做. 然后, 一如即往的, 在实际的使用中遇上了一堆问题. 第一个问题是我想扩展数据类的定义, 增加自己的新属性和方法什么的, 然后, 我发现只要一动设计图, 我所有的新代码都不见了! 还好用了VSS, 立即签回上一个版本. 那该怎么办呢, 难道不能修改这些美妙的类定义?

    然后, 我想过用extender, 用继承, 但是都像之前的各种MS迫不及待地推给我的技术一样, 虽然也能解决问题, 但都很勉强. 去MSDN一查, 他们建议我另建一个源文件, 用partail(partial)类的方式来扩展这些类, 自己写的partail(partial)类不会被设计器乱改. 他妈的! 居然这么简单! 我我我, 唉, 我真傻, 真的,我只知道Winform design的时候可以用到partail(partial)类, 不知道在linq(2sql)里也可以用到的...

    这个问题解决了, 感觉自己连气出得都痛快了. 但是随即又遇上一个问题: 我想在数据加载时偷偷做些自己的处理, 这该怎么办? 我在智能感知的菜单里去找闪电图标, 希望找到一个DataLoaded事件让我订阅一下, 然后, 没有! 试着打个override来看看有没有OnLoaded之类的虚拟方法让我重写一下. 然后, 也没有! 好好, 我还有一大堆办法可以解决, 我可以在select之后再调用个成员方法来预处理. 目的是达到了, 但是, 代码好丑! MS就打算让我这么做? MS这回是怎么回事? 明明一个delegate就可以解决的, 非要我写这么丑的代码.

    真得不服气呀! 我再去找! 然后, 就看到那一堆堆的 partial void OnLoaded()方法定义. 这是什么东西? 方法也可以partail吗? OnLoaded()明显是我想要的东西, 但是这个partial表示什么? 老了老了, 很多东西没功夫好好看了.

    于是, 上MSDN上一找, 又被雷到了!

    MSDN上是这么写的:

    分部类或结构可以包含分部方法。类的一个部分包含方法的签名。可以在同一部分或另一个部分中定义可选实现。如果未提供该实现,则会在编译时移除方法以及对方法的所有调用。

    看看,看看! 如果未提供该实现, 则会在编译时移除方法以及对方法的调用! 老天呐!!! 事件委托时还要写一个 "if (Data_Loaded != null)" 的, 现在只需要一个partail 方法? 继续向下看, MSDN又说:

    分部方法使类的某个部分的实施者能够定义方法(类似于事件)。类的另一部分的实施者可以决定是否实现该方法。如果未实现该方法,编译器将移除方法签名以及对该方法的所有调用。因此,分部类中的任何代码都可以随意地使用分部方法,即使未提供实现也是如此。如果调用了未实现的方法,将不会导致编译时错误或运行时错误。

    在自定义生成的代码时,分部方法特别有用。这些方法允许保留方法名称和签名,因此生成的代码可以调用方法,而开发人员可以决定是否实现方法。与分部类非常类似,分部方法使代码生成器创建的代码和开发人员创建的代码能够协同工作,而不会产生运行时开销。

    说实话, 到这时我已经基本被雷晕了, 我理想中的那种完美方案完全如希望的样子出现了, 不, 这样的代码实现, 干净利落得远远超出我的期望. 我于是开始站起来在屋里乱走, 一边用脏话来发泄心里的激动. 就是我在本文一开始说的那样. 明白吗? 这是在编译时处理的, 是源代码上的方法模板模式实现! 这还是一个编译器该做的吗? 你允许我用匿名类型的局部变量, 我就已经很感激了(自从泛型引入以后, 我就总是猜不中我该用什么类型来接收模板方法的返回值), 现在, 你开始允许我在源码上瞎写不存在的方法了!

    文章写到现在, 激动的心情已经平静不少, 一个担心开始出现了: MS的C#接下来还将怎样进一步允许我们胡闹?

    我的一个开发员, 无论做什么功能, 都用datasoure实现, 他只会 "拖控件, 拖数据源, 配置数据源", 然后, 他在代码里一遍一遍地执行绑定, 完全不管数据库已经被查询了多少次. MS的技术越来越不要求严谨, 越来越纵容程序员胡来(在语言规范越来越灵活的同时, 向java一样强制要求处理异常的机制却一直没有增加就是一个例子), 在MS的强大的编译技术保护下, 还会有多少程序员变成傻瓜?

 

Tag标签: linq .net
posted @ 2008-07-17 23:04 HAL9000 阅读(2523) 评论(70)  编辑 收藏 所属分类: 技术

  回复  引用  查看    
#1楼 2008-07-17 23:16 | veter      
我被你雷倒了,说实话,好像Linq还不值得这么激动,好好研究,你会明白我说的意思的...
"没有想和你对嘴的意思"
  回复  引用  查看    
#2楼 2008-07-17 23:28 | deerchao      
你谈的还都是Linq 2 Sql的东西,更精确一点地说,是如何与Linq 2 Sql的Desinger打交道的问题.
当然,这个东西做得确实很实用也很易用,但是我觉得更应该精叹的是Linq本身代表的意义--二维世界(关系模型)与OO世界之间界限的模糊,以及隐藏在冰山一角后面的编程范式的重大变革.

===
关于胡闹,据说c#4里会加上动态语言功能,用一个dynamic{}块一框住,编译器就不检查里边的类型了....
  回复  引用  查看    
#3楼 2008-07-17 23:32 | 深蓝      
真有这么激动人心吗?我没有什么感觉的。新技术太多了,怎么也学不完啊。
  回复  引用  查看    
#4楼 2008-07-17 23:39 | TerryLee      
几个问题:
1.从VC5.0开始, 一路上了MS的套, 直追到C#3.5
C#还是3.0,只不过在.NET Framework 3.5中,没有C#3.5一说。

2.你在文章所提到的关于的LINQ的东西,其实全是LINQ to SQL。

3.partail应该是partial
  回复  引用  查看    
#5楼 2008-07-18 00:01 | 江南白衣      
哗众取宠
  回复  引用  查看    
#6楼 2008-07-18 00:38 | dreamland      
我现在只是很担心linq to sql的效率。
另外一点,linq本身的效率也值得磋商。
还有,就是linq要想做一个条件可变的数据库查询,以前是拼字符串,现在是加载一大堆的东西,可真麻烦啊,呵呵~~
  回复  引用  查看    
#7楼 2008-07-18 01:05 | 曲滨*銘龘鶽      
我等了这么长时间可以支持 Oracle 和其他数据库的 linq 版本还没又发现太好的

看来只有等、ADO.NET Entity Framework 了
继续等,反正打死我也不自己去实现了。

ms 现在变的太快,原来继承 DataGrid 封装的控件,2.0 出了个GridView 我那些就是鸡肋了;

2.0 带的那些角色认证等功能,终于等到oracle 公司出的了;
对于新技术,等等在说才是上策,不过不要等到网上都没资料就好了。
或者用一些稳妥的方法跳过他;也是不错的选择。

  回复  引用  查看    
#8楼 2008-07-18 06:30 | 金色海洋(jyk)      
我被雷到了,倒不是因为Linq,而是 partial 、partail void OnLoaded()的用法。
  回复  引用    
#9楼 2008-07-18 08:13 | eee [未注册用户]
我被lz雷到了。 期待更加动态的C# 4.0,呵呵。
  回复  引用  查看    
#10楼 2008-07-18 08:14 | 沈阳阿瑞      
晕,dlinq有什么好的。
除了花哨的语法,
各种数据库支持还不好,
各种DB的扩展特性还不好用,
还有就是不易形成配置。
而且不能用于.net 2.0.
这诸多原因,我是不会用的。
我就用ibatisnet加代码生成加泛型,
不为别的,具有高可配置性,而且一切都掌握在你手中,
性能可控,灵活。
  回复  引用  查看    
#11楼 2008-07-18 08:35 | 安眠花      
佩服楼主灵动的文采!

赞一个!

昨天下班的时候公司还搞了wcf和linq的培训。

  回复  引用  查看    
#12楼 2008-07-18 08:40 | brightwang      
等你真的用它做过项目在说吧。。。
  回复  引用  查看    
#13楼 2008-07-18 08:44 | 鹰击长空      
partail 方法还没用过,有空时用一下。
LINQ真的太好用了,太强了。
  回复  引用  查看    
#14楼 2008-07-18 08:46 | amingo      
"在MS的强大的编译技术保护下, 还会有多少程序员变成傻瓜?"

这句话要辨证的看待。可能是好事,也可能是坏事。

在完成某个目标的过程中可能会遇到与初衷相违背的事情,当不表示应该放弃目标,MS现在只是在通向目标的路上寻找方向。
  回复  引用  查看    
#15楼 2008-07-18 08:46 | 老刘.      
嗯,楼主给我的提示是关于 partial class,我去尝试下。
不知道楼主是否关注动态语言,静态语言动态化,大势所趋。静态语言正在逐步弥补自身的短板,比如无味而又无处不在的非空判断和类型转换,比起c#版本升级加入的新语法,我更关注动态语言运行时,希望有一天可以在微软的平台上用动态语言进行项目开发。
  回复  引用    
#16楼 2008-07-18 09:05 | wiki [未注册用户]
彻底完全地被LZ雷到了
  回复  引用    
#17楼 2008-07-18 09:14 | wii [未注册用户]
花里胡哨,不是花里胡骚。
  回复  引用    
#18楼 2008-07-18 09:15 | 鬼话 [未注册用户]
如果这些东西都把你雷倒了 那马上要出来的C#4.0估计你会咋样呢?

呵呵。。。

事物都是两方面 有利有弊 LINQ应该说只是微软的一个过度产品

个人意见!!
  回复  引用    
#19楼 2008-07-18 09:15 | jijl2001 [未注册用户]
有这么夸张吗?仔细看一下,就会觉得没有什么用
  回复  引用    
#20楼 2008-07-18 09:16 | eee [未注册用户]
@沈阳阿瑞
那玩意配置太复杂了,最终被我们所抛弃。
  回复  引用  查看    
#21楼 2008-07-18 09:17 | Jason Wang      
某些技术更新太快,就和系统经常打补丁一样,其实不是一件好事。
  回复  引用  查看    
#22楼 2008-07-18 09:18 | amingo      
某些技术更新太快,就和系统经常打补丁一样,其实不是一件好事。
===========

不好在哪里?
  回复  引用  查看    
#23楼 2008-07-18 09:21 | xjb      
  回复  引用  查看    
#24楼 2008-07-18 09:24 | 坏人      
在机械化耕作的时代,有多少农人会丧失应有的劳动力?这是问题吗?
  回复  引用    
#25楼 2008-07-18 09:26 | jacky.W [未注册用户]
干脆说是c#3.0的语法雷到了不就行了,关linq什么事
  回复  引用  查看    
#26楼 2008-07-18 09:29 | kiler      
@坏人

但是这个机械化耕作做得不好,很多问题解决不了,那就是问题,编程开发还没有简单到像做玩具一样,拖拉几个控件就可以了事的。

MS想降低开发的难度出发点是好的,但是他现在还做不到那个程度。
  回复  引用  查看    
#27楼 2008-07-18 09:35 | Jeffrey Zhao      
@kiler
降低了不少了
  回复  引用  查看    
#28楼 2008-07-18 09:35 | Jeffrey Zhao      
--引用--------------------------------------------------
沈阳阿瑞: 晕,dlinq有什么好的。
除了花哨的语法,
各种数据库支持还不好,
各种DB的扩展特性还不好用,
还有就是不易形成配置。
而且不能用于.net 2.0.
这诸多原因,我是不会用的。
我就用ibatisnet加代码生成加泛型,
不为别的,具有高可配置性,而且一切都掌握在你手中,
性能可控,灵活。
--------------------------------------------------------
可是麻烦
  回复  引用  查看    
#29楼 2008-07-18 09:40 | 乐子哥      
我觉得MS强大就强大在他可以整合市面上出现的好技术,其实很多都是市面上有用到的或者部分用到的,他借助自己强大的技术和整合能力推出更完善的产品,感觉其它开发商是给MS打工的,那些开发出来的产品是为MS探路的,是测试版本,MS通过Windows一统天下,现在在开发平台上通过.NET框架也要快一统开发工具这方面的天下了(准确讲应该是windows这一块),现在他们只需要一步步扩展.NET开发平台上的实用工具。。
  回复  引用  查看    
#30楼 2008-07-18 09:47 | kiler      
@Jeffrey Zhao
难度是降低了,我承认.net开发是简单了不少,但是也诞生了不少很烂的程序,但是很多通过拖拉控件做出来的东西和玩具有什么分别,不懂html,js的人也可以做程序,但是作出的东西质量又是如何。
  回复  引用    
#31楼 2008-07-18 09:47 | howie [未注册用户]
如果一个普通高中生就能完成的项目,你还能拿到本科生才能做得到的待遇么?或许将来有一天不再需要开发人员了,都给微软作了,剩下的只需要客户自己去拼凑就成了。
  回复  引用  查看    
#32楼 2008-07-18 09:48 | 墨小黑      
雷得里嫩外焦
  回复  引用  查看    
#33楼 2008-07-18 09:50 | amingo      
--引用--------------------------------------------------
kiler: @Jeffrey Zhao
难度是降低了,我承认.net开发是简单了不少,但是也诞生了不少很烂的程序,但是很多通过拖拉控件做出来的东西和玩具有什么分别,不懂html,js的人也可以做程序,但是作出的东西质量又是如何。
--------------------------------------------------------
如果难度不降低 就不会有烂程序。
  回复  引用  查看    
#34楼 2008-07-18 09:53 |       
Linq2SQL有那么差吗?
把他交SQL看,估计大家就不这么想了。何必把它提升到其它的层次呢?
效率,效率,你们几个几的工程因为Linq本身原因导制性能问题。
说实话,你们不要把楼主给吓到了。我现在就在用Linq2SQl开发,很好啊。
而且只要你把它当做原先的DAL或比DAL更低一级,也不用想以后的问题了
  回复  引用  查看    
#35楼 2008-07-18 09:53 | Steven Chen      
还真没注意到 partail function功能, 怪不得Page_OnInit不能用闪电找到了呢,俄,感觉跟在ms后面真累啊,人家java是脱了鞋子跑,我们简直是裸奔。
  回复  引用    
#36楼 2008-07-18 09:54 | no123 [未注册用户]
不是什么好玩意!
  回复  引用  查看    
#37楼 2008-07-18 09:55 | Steven Chen      
恩 不对阿
protected void Page_Load( object sender, EventArgs e )
{

}
签名不一样的

我再去看看阿 一会儿再回来
  回复  引用  查看    
#38楼 2008-07-18 09:58 | Jason Wang      
@amingo
经常打补丁的系统,经常升级的开发框架,一方面反映了当初设计系统时候的不成熟,一方面让人无所适从,反倒降低团队的开发效率。
  回复  引用  查看    
#39楼 2008-07-18 10:00 | amingo      
--引用--------------------------------------------------
Jason Wang: @amingo
经常打补丁的系统,经常升级的开发框架,一方面反映了当初设计系统时候的不成熟,一方面让人无所适从,反倒降低团队的开发效率。
--------------------------------------------------------

你见过不用打补丁的程序,不用升级的框架吗?
  回复  引用    
#40楼 2008-07-18 10:06 | _:!> [未注册用户]
作开发需要学习;
做项目/产品需要的稳定

实用为准
  回复  引用  查看    
#41楼 2008-07-18 10:14 | Steven Chen      
为啥vs2008中asp.net设计器没有“闪电”了
  回复  引用    
#42楼 2008-07-18 10:21 | BugLiu_Logout [未注册用户]
我更喜欢直接用 Sql 语句
  回复  引用  查看    
#43楼 2008-07-18 10:22 | Steven Chen      
为啥vs2008中asp.net设计器没有“闪电”了 ----专指C#的,怎样在添加Page_PreLoad阿?
  回复  引用    
#44楼 2008-07-18 10:22 | bangbang [未注册用户]
@dreamland
LINQ的性能不差的,LINQ是可以预编译的。
  回复  引用  查看    
#45楼 2008-07-18 10:23 | Steven Chen      
这个感觉不是用partial来实现得阿
  回复  引用  查看    
#46楼 2008-07-18 10:27 | xiao_p      
c# 最痛苦的是没有类型推断的能力

这个才是最最痛苦的。。。


如果在lamda和泛型中加上类型推断

比如 List<T> 根据上下文就知道T是什么,那就爽歪歪了!!!
  回复  引用  查看    
#47楼 [楼主]2008-07-18 10:31 | HAL9000      
有几位高手在留言里提醒我, 把几个概念搞混了. 其实概念我是明白的, 只不过我想, 这个文章肯定不是那种有 "前言" 和 "参考文献" 清单的技术论文, 而更多是为了表达我在试用linq----2sql, 不好意思, 差一点又混淆了视听----时, 对MS所做的一些工作的敬佩, 以及解决了我积累多时的技术问题时所感觉到的那种快意和激动, 因此甚至连很多拼写错误也没有纠正, 大家都是搞技术的, 相信不会不理解我的意思.
但是, 为了表示对大虾们意见的重视, 我这就把文章里的模糊化的概念和名词加一括号注释, 以免误导读者. 如果您已经被本文误导, 兹向您表示深切的(但是肚子里憋着笑的)歉意.
  回复  引用  查看    
#48楼 2008-07-18 10:44 | 横刀天笑      
这些特性是很激动人心,放个连接:
http://www.cnblogs.com/yuyijq/archive/2008/07/16/1244750.html C# 3.0新特性的一些内幕

http://www.cnblogs.com/yuyijq/archive/2008/07/15/1243714.html 我的Linq系列
  回复  引用  查看    
#49楼 [楼主]2008-07-18 10:45 | HAL9000      
@amingo
我不太同意.
因为我认为我们现在要解决的问题是生产力问题.
  回复  引用  查看    
#50楼 2008-07-18 10:49 | 装配脑袋      
Partial可以作用于方法这一点。。我N早之前就知道了。。。
  回复  引用  查看    
#51楼 [楼主]2008-07-18 10:50 | HAL9000      
@Steven Chen

Page_Load不是partial方法. 这是MS又搞了些花样, 在asp.net 2.0里, 允许你不必显式地订阅事件, 只需要把方法名写对, asp.net会自动替你订阅事件.

我个人认为, 这是个.net 2.0的败笔. 破坏了和程序员之间的一些默契.

partial方法是用于源码级的"方法模板模式"实现. 如果你要发行编译后的组件, 就只能继续用delegate.

  回复  引用  查看    
#52楼 2008-07-18 10:59 | amingo      
--引用--------------------------------------------------
HAL9000: @amingo
我不太同意.
因为我认为我们现在要解决的问题是生产力问题.
--------------------------------------------------------
如果开发变“傻瓜”了,会有更多的人加入到软件开发的大军,这样不是扩大了生产力吗,至于“傻瓜”会使程序变得很烂,我觉得这个需要从管理上去解决。如果10个很牛的程序员,没有管理约束代码也会5花8门。
  回复  引用  查看    
#53楼 2008-07-18 11:33 | prime.li      
我只说一句:期待ADO Entity Framework……
  回复  引用  查看    
#54楼 [楼主]2008-07-18 11:35 | HAL9000      
@amingo
--引用--------------------------------------------------
如果开发变“傻瓜”了,会有更多的人加入到软件开发的大军,这样不是扩大了生产力吗,至于“傻瓜”会使程序变得很烂,我觉得这个需要从管理上去解决。如果10个很牛的程序员,没有管理约束代码也会5花8门。
------------------------------------------

同意.
  回复  引用  查看    
#55楼 2008-07-18 12:33 | 沈阳阿瑞      
@Jeffrey Zhao
为啥说他麻烦呢,
我再工程中使用,所有通用的逻辑都是代码模板生成,
比如insert ,update ,delete的sqlmapper,
手工扩展的sqlmapper单独放置在另一个文件。
比如自定义的条件查询。
可以不夸张地说,一句费代码都不会多写的。
从风险的角度,一切都可控。
从自动化角度,基于配置很方便批量作业。
不像linq to sql.
完全是在摸石头过河。

  回复  引用  查看    
#56楼 2008-07-18 12:36 | 沈阳阿瑞      
编编简单的逻辑还行,
如果你要编写巨复杂的报表,
敢用linq sql 么,
干什么玩意用什么工具。
  回复  引用  查看    
#57楼 2008-07-18 12:39 | 中华小鹰      
我得澄清一下我的意思。
第1、我没说不需要学习这些业务技术,我一直认为业务技术也是很重要的,也一直在学习。
第2、我认为只有在学好了底层的理论之后,你才能对这些业务技术有更深刻的理解,学习这些业务技术会事半功倍。
第3、学习底层理论就好比是内功,而学习具体的技术就好比是招式,没有深厚的内功,再好的招式在你手里也发挥不了威力,而有了深厚的内功,招式,也许只要看一眼就会了。
第4、就楼主而言,我认为他的内功修炼的还不到家,因此在学习Linq to sql时走了好些弯路(相对我学习Linq to sql而言)。
第5、学习计算机大家都有大家自己的学法,我也只提一下我的看法,仅供参考。
  回复  引用  查看    
#58楼 [楼主]2008-07-18 13:12 | HAL9000      
@沈阳阿瑞

自己写的东西, 总是最了解, 用起来最放心, 是不是这个感觉?

呵呵, 我也是一开始用代码生成器什么的, 一开始是只是自动CRUD, 后果试着增加数据记录工厂来管理记录, 再后来增加记录的状态维护, 以实现用统一接口自动判断执行哪种数据库更新, 再后来, 又加入数据上下文对象, 来维护对象池和缓存, 但是, 个人力量总是有限的, 总是在使用过程中出现一些这样那样的新情况不能很容易的应对, 没有达到那种最理想的ORM效果.

LINQ2SQL的出现直接解决了我目前遇到的一切问题, 即使有些特殊场合, datacontent也允许我直接执行SQL, 或是把datareader转换为对象. 我想足够了. 连表关联记录都能直接表现为成员对象, 我还有什么更多要求?

  回复  引用  查看    
#59楼 [楼主]2008-07-18 13:14 | HAL9000      
@沈阳阿瑞

报表当然是要用水晶报表\cognos之类的专门工具了. LINQ2SQL当然不是万能的了. 你用hibenater, 或是自己生成的数据类实现报表么?
  回复  引用  查看    
#60楼 [楼主]2008-07-18 13:16 | HAL9000      
--引用--------------------------------------------------
中华小鹰: 唉。何必这么在意这些上层的技术,多花时间在意底层的技术吧,比如数据库理论、编译原理、操作系统原理、OO设计原理等。真正的高手不是那些把这些新技术运用的炉火纯青的人,而是那些能够设计编写这些新技术的人。
--------------------------------------------------------
没错. 只不过我们遇上的问题大多是企业应用\业务逻辑的问题, 什么场合用什么技术, 对吧. 你肯定也不想用汇编语句来开发银行业务系统, 不是么?
  回复  引用  查看    
#61楼 2008-07-18 13:52 | kiler      
@中华小鹰
请问这里的程序员从事的工作都是写一个windows操作系统或者开一个像sqlserver数据库或者是开发一个vs2005吗?实际点,大家都是做业务系统,别动不动就扯这些东西。
  回复  引用    
#62楼 2008-07-18 15:00 | yamede [未注册用户]
楼主刚进大观园呵呵。
为何不把眼界放宽一点,看看google, yahoo, mit, berkeley他们在干什么。
  回复  引用  查看    
#63楼 2008-07-18 15:07 | 中华小鹰      
@kiler
我得澄清一下我的意思。
第1、我没说不需要学习这些业务技术,我一直认为业务技术也是很重要的,也一直在学习。
第2、我认为只有在学好了底层的理论之后,你才能对这些业务技术有更深刻的理解,学习这些业务技术会事半功倍。
第3、学习底层理论就好比是内功,而学习具体的技术就好比是招式,没有深厚的内功,再好的招式在你手里也发挥不了威力,而有了深厚的内功,招式,也许只要看一眼就会了。
第4、就楼主而言,我认为他的内功修炼的还不到家,因此在学习Linq to sql时走了好些弯路(相对我学习Linq to sql而言)
第5、学习计算机大家都有大家自己的学法,我也只提一下我的看法,仅供参考
  回复  引用  查看    
#64楼 [楼主]2008-07-18 19:59 | HAL9000      
@yamede

--引用--------------------------------------------------
yamede: 楼主刚进大观园呵呵。
为何不把眼界放宽一点,看看google, yahoo, mit, berkeley他们在干什么。
--------------------------------------------------------
你说的是呀. 不过也不知道为什么, 我对ajax天生就很讨厌, 他们搞那些东西我一直不感兴趣.


  回复  引用  查看    
#65楼 [楼主]2008-07-18 20:16 | HAL9000      
--引用--------------------------------------------------
中华小鹰: @kiler
我得澄清一下我的意思。
第4、就楼主而言,我认为他的内功修炼的还不到家,因此在学习Linq to sql时走了好些弯路(相对我学习Linq to sql而言)
--------------------------------------------------------

呵呵. 在CNBLOG上发贴的一个特点是, 无论你写什么, 都会有人出来表示 "你还很虾米".

想想也是当然, 总是会有人在一些领域专精嘛! 而总是没有人什么人能在所有领域精. 这样无论在哪个方面, 总有人看出来:"这块我比楼主强!".

这种"你很虾米"的态度好像在IT业里很常见, 那怕和对方第一次见面, 大家不是先取长补短, 而是先挑短衬长. 昨天我去和一个网站技术谈业务, 对方的技术总监是个半大小孩, 也是一幅大刺刺地样子, 一幅不耐烦, 张口就说:"我们没功夫辅导你们来做这个接口".

呵呵, 我的是不会把这种态度放在心的. 他提出了一个接口方案, 把他的网站依赖于我们的业务服务, 但他没想如果我们的服务或是网络有问题时, 他们的正常业务也会干掉. 我提醒了他三次这种依赖性对他们的服务是很危险的, 他居然到最后也没有意识到这个问题的严重性. 还笑嘻嘻地说, 你们对自己的服务很没信心啊!

这是信心的事吗? 我再有信心, 也要做好事前的准备, 在架构上消除这种隐患存在. 这小毛孩子对业务运行支撑毫无概念.

不过呢, 我还是从头到尾保持了我的笑容.

最后, 我很想知道, 我在试用DLINQ时走了哪些弯路? 让我在长达三十分钟的时间里还没有搞定第一个LINQ业务类.
  回复  引用  查看    
#66楼 [楼主]2008-07-18 20:44 | HAL9000      
@中华小鹰

还有啊, "数据库理论、编译原理、操作系统原理、OO设计原理等" 怎么就能让我知道partial function的语法规则呢?

对一于数据库理论, 我只会到SQL语句.

对于编译原理, 我曾经在一个电话服务器里写过自己的变量系统, 表达式分析, 业务逻辑脚本分析, 还提供了一大堆自定义函数支持.

对于操作系统原理, 我倒是没做过操作系统, (只在大学时做过一个模拟的进程调度算法), 不过我总是记得很认真处理多线程应用中的临界段\信号量这些东西.

对于OO设计原理. 我不知道你要求我要了解多少, 不过我为公司应用的一种内部语言graphtalk写过全套的四人帮设计模式实现手册.

对于数据结构和常用算法, 这块还真得是时间长都生了, 不过上个月我帮一个朋友设计了一个DNA测序算法模型, 不巧和一种叫什么BLASTER的算法有点像似. 我前几天还复习了一遍大数质因数分解. 哦, 小鹰, 你忘记在你的应知应会清单里列出数据结构了.

对于网络技术, 我曾经认真研究过应用层几乎所有的常规协议, 也曾经试过用C++写过用UDP广播的视频程序对话. 小鹰, 你不认为网络技术和协议原理也很重要么?

呵呵. 只是因为现在管理事务多了, 看新技术的时间未免少了, 也不能完全深入了, 一些该注意到的语法细节没有多想, 没有多去考虑他的实际意义. 被人说成是不深入钻研, 有点不服气呵. 只好厚着脸皮在这里显摆一下.

  回复  引用    
#67楼 2008-07-18 21:20 | hook [未注册用户]
有什么可激动的,LINQ在学Hibernate,也许它的优势在于和微软的产品无缝结成吧,其他方面和Hibernate还有差距,比如多种DBMS的支持,以及其他可扩展性。
  回复  引用    
#68楼 2008-07-18 21:32 | hook [未注册用户]
很同意LZ的观点,那就是,C#越来越不规范了,我觉得这样会让程序员感到迷茫,特别是刚入行的程序员,更是如此。在我看来,再这样走下去,肯定很危险。
  回复  引用  查看    
#69楼 [楼主]2008-07-18 21:45 | HAL9000      
--引用--------------------------------------------------
hook: 有什么可激动的,LINQ在学Hibernate,也许它的优势在于和微软的产品无缝结成吧,其他方面和Hibernate还有差距,比如多种DBMS的支持,以及其他可扩展性。
--------------------------------------------------------
说实话, 这话已经说得很勉强了.


  回复  引用    
#70楼 2008-07-18 22:07 | hook [未注册用户]
呵呵,是有点勉强。不过Hibernate已经出道很久了,说白点就是一个成熟的产品,况且学习它还能学到很多OO设计的知识。

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)