Posted on 2009-05-24 22:56
栖山 阅读(4871)
评论(197) 编辑 收藏
大概一年前,我写了一篇关于3层的终极领悟。
结论是3层其实和开发效率无关,其实主要是安全性。(后来从最牛的程序员Linus的言论里面,我找到了一点论据,分层确实是关于安全的,我的直觉还是有点道理的)
3层作为一个鸡肋,困扰过很多人,有初学者,也有所谓高手。
虽然越来越多的人已经看清了三层的丑恶嘴脸,但是也许还有一些人陷在其中。
目前我从事的是Saas项目,站在一个新的角度,对三层看得更清晰了。整理出来,也算做点科普工作吧。
我重新修正了一下结论。
1,三层是关于部署(Deployment)和(Security)的,和开发关系不大。
2,微软对于三层的推广是典型的误导和只顾商业利益的策略。
3,三层概念在国外已经没有人提了。现在大家关心的是云计算。(注意,云时代在已美国经开始了,在中国大约会有1,2年的滞后期)
三层的问题如下。
1, 三层违反了DRY(Don't repeat yourself)原则。这也是明明说是提高效率,但是很多人觉得效率反而降低的原因。
2,有人说三层是所谓关注点分离,其实这是胡说八道,写任何程序都可以关注点分离,和三层有什么关系?
3,微软所谓的3层,无非就是对应他的产品线。即ie ,iis, sql server,而且微软居然在3层架构里面,全面使用存储过程,典型的挂羊头卖狗肉。
4,MVC的三角形架构才是和开发效率相关的,而按照微软三层的定义,MVC只能部署在同一层中。(提个醒,微软的asp.net mvc同样充满了误导和商业策略)。
特别提一下存储过程,高手是绝对不用存储过程的,这是我作为一个曾经的存储过程的粉丝的痛定思痛。
感慨:有时候相信自己的直觉和实验,也许要比相信某些专家更靠谱。
Feedback
--引用--------------------------------------------------
栖山: ms sql可以用c写扩展存储过程,你应该知道吧?
比你用t-sql写性能好,这个道理是一样的。
--------------------------------------------------------
楼主,看来您还真没弄清楚什么时候用c写扩展存储过程,什么时候用T-SQL写存储过程。
不过这是你“发散”出来的另外一个问题,今晚真的睡了,明天我再来看你贴出的代码
--引用--------------------------------------------------
周强: @Jeffrey Zhao
多谢老赵支持啊。
--------------------------------------------------------
对了,补充一句,举出的例子希望可以证明:
1、不用三层,因为会造成A、B、C等问题。
2、开发高效
3、用了存储过程会造成性能下降——我们就不强求“数量级”的下降了。
虽然交流的目的不是为了说服对方,但是如果每个来回都不能说明问题,开始回避或绕圈子,那似乎也不能“互相提高”。
看了看楼主的其他文章和评论,发现楼主的特色真是非常鲜明,而且很长时间里都没有任何改变,然后不禁扼腕……讨论得太没有价值了……
// 占个100楼,睡了。
其实不用争了,争来争去大家的日子照旧,跟一虎一谈一样。天天争这个改革那个改革,理是明了,不过大家还不是一样的活。没有改变什么。
用不用三层与sp 都是 只是为了当下. 当下好用就用。当下不好用就改。
明天说不定请楼主出一篇 《我的革命开发方式》 或是《我的金弹》让我们也跟你楼主后面学习下.
不要光告诉别人什么是no,更重要的是告诉别人什么是yes。
讨论是有意义的,但是讨论要有理有据,光说xx不行,xx不好,或者xx很好,依据呢?要么是一段代码,可以直接执行以验证,要么使一些说出来大家都能点头的经历。总是说高手如何了,所以如何了,那么我们是不是还要先讨论一下到底什么样的是高手,然后再找几个符合标准的高手看看他们的言论是不是说了同样的问题呢?如果是这样也可以,但问题是似乎从头到尾也没看到哪个“高手”的链接能够说明任何LZ的观点。难道这个高手还不能露面?
希望大家都能在说自己观点的时候,多写几句为什么,而不是只有一个结论,很多误解和无谓的讨论就始于此。
三层没有错,存储过程也没有错,错在为了三层而三层或绝对的否定三层,错在为了存储过程而存储过程或绝对的否定存储过程,无论是不是三层架构,最好的满足需求的架构就是好的架构。
这么多夜猫子,服了。
分层是对的,三层是乱的。
复杂容易是不区分的,胡子眉毛是一起抓的。
水平高低是一刀切的。
特别提一下存储过程,高手是绝对不用存储过程的,这是我作为一个曾经的存储过程的粉丝的痛定思痛
如果是存储过程之间相互调用,确实很恶心,优化起来很烦,
但是用不用存储过程,要从性能,设计难易等多方面考虑.
有些用存储过程来实现更容易,无形中节省了开发成本.(也提高了维护成本)
云计算,个人觉得yahoo的经验和google的技术实力,都是微软不可小视的对手.微软访问起来真的很慢,不知道云计算他们要怎么解决.
感慨:有时候相信自己的直觉和实验,也许要比相信某些专家更靠谱。
不相信你说的.这句话相信.
我也无理头一下
@。。。。
谁说我没做过大项目 我用as400 的dell 开发过as400 的项目
你们说服不了我.嘿嘿,我就不有存储过程 .我也不用三层.
我看了《Patterns of Enterprise Application Architecture》
写得太次了,没有我想的好.你们天天抱着这本书,以为就软件架构牛了.
我写的程序才是牛的.
特别提一下存储过程,高手是绝对不用存储过程的,这是我作为一个曾经的存储过程的粉丝的痛定思痛。
====================
这个观点太让我惊奇了...!!!!...
:(
用存储过程肯定比直接sql快了,它可是预编译过的。orm也是生成sql而已嘛。
--引用--------------------------------------------------
呵呵,国外也有非高手吧。
至于高手写的系统,且能看到源代码的,那就只有开源了。
至少我没有看到过高手写的 mysql 的存储过程。
--------------------------------------------------------
MySQL 5才开始支持存储过程的,对于以前没法用存储过程的系统,不是每个人都有闲功夫去修改的。无知自大!
另外一说到ORM我就想到代码生成器,然后我就觉得太没有技术含量了,亵渎了“技术”两字。
楼主不要用JAVA的思想来看.Net,你不应该来这里。
举些现实的数据出来.直接把我们证实倒不就得了.
就算自己是高手.也不可以这么装吊吧.
装B遭人暴,装纯遭人轮.说的就是楼主这种人.
各位大侠就不要给他回贴了.助长这种人.
让我辈菜鸟来训他....
楼主想单挑,还是群挑.
群挑是 我们一起来挑你一个.
单挑是 你来和我们一个一个地挑.
呵呵
做JAVA的2B跑来.net的地盘放屁,大家快来围观LZ的无知。你直接就说微软是垃圾做.net都是垃圾不就得啦,何必这么多废话。
典型的只有结论,没论证的家伙。你们不要相信这些鬼话。
--引用--------------------------------------------------
Installs: 做JAVA的2B跑来.net的地盘放屁,大家快来围观LZ的无知。你直接就说微软是垃圾做.net都是垃圾不就得啦,何必这么多废话。
--------------------------------------------------------
这跟Java和.net无关 楼主的类型比较稀有
lz写的几篇文章都非常误导人,别做过几个大项目就产生片面的想法了,要拿出证据
禁止马甲横行。
不过楼主在发这种容易引起骚动的言论前最好想清楚自己在做什么,有没有必要这样做,能引起什么后果,对引起的后果如果应对,以及自己的承受能力。这也算是种风险分析。
楼主像似还停留在世纪之交的年代,看样子你所批评的“三层”像是专制那时候微软所提的Windows DNA,那也是时代的产物,早就没人那么提了,后来微软官方比较典型的分层示例是Duwamish和petshop.net,现在也很少以之作为最佳实践的参考了,至于存储过程的使用,难道不用存储过程就是高手?这有点太扯了。mvc是表示层架构技术而已,更准确的描述应该是一种表示层设计模式(asp.net mvc或smartclient里的mvp,composite wpf里的mvvm等也就是这种模式的实现而已),跟三层架构有什么关系?再说所谓“三层”是指n-layer还是n-tier?一种是描述逻辑架构,一种描述部署架构,侧重点不同,不可混淆。
感觉楼主的知识和经验主要来源于闭门造车式的个人体验,而且个人意见空洞武断。建议广泛了解深入学习一下,比如对分层架构的设计理念,推荐参考学习一下csla.net及其对应的那两本书,就是在书店里很容易看到的expert c#(或vb.net) 2005(或2008) business objects。如果对csla.net架构本身不感兴趣,至少详细阅读一下该书前三章对于分层的讲述,很细致,很专业,相信读懂的话你就不会写这个post了。
国内项目成本最大的消耗是维护和客户随时都可能改变的需求!!,而不是在开发!所以结构清晰的分层架构有着不可替代的优势(虽然在前期开发略显麻烦)。用存储过程就不是高手?哈戳戳哦。。
从LZ上面的谈话和发言~~
我认为LZ的身份是XX大学的研究生在XX国企或者Z F机关做事的人~~
(原因:能接触小型机开发,肯定是在非小型企业,并且比较有钱的企业,Z F就是类似于这种,花个几百上千万做点鸟事的风格很像。。
自己的观点错了,死活不认账,然后思维跳跃,曲线死掰自己的观点,只有那些自以为是的天子饺子或者一把年纪的人才干的事
)
或者就什么也不是~~纯粹来没事找事的~~
鉴定完毕~~以上内容,纯属猜测
建议博客园 开个吵架版或是灌水版
否则太影响首页了!
民科和科学家最大的区别是什么?科学家想弄清楚事情的真相,行的原因是什么,不行的原因是什么,怎么严格推导和证明,怎么用实验证明,怎么处理后果,怎么利用。民科的目的就是他说什么,什么就是对的,专家的如果和他不一样,就是错的,用各种各样的“经历”和“名词”来加以强调。所以民科和科学家没法交流,民科的理论尽管没有任何用处(或害处),但讨论和对公众的不良印象损耗也是非常大的。
民科是不会因为你挖苦,鄙视,教育就可以领会如何从真正科学的角度来考虑问题的,因为他们没有这个基础。这是客观条件,没法改变的。民科只会坚持自己的观点,这是没有办法改变的,真的!别以为你可以教会试图推翻相对论的民科真正的相对论,因为他们连牛顿定律都不知道,需要好多年才能理解相对论。你是绝对没有能力让他理解相对论,然后从同一个层次来讨论的!软件架构也是一样……
没有任何论据,也不知道LZ的论点,反正就是瞎扯一通,然后下个定论:同志,高手是不用存储过程的,想成为高手吗?那就不用存储过程吧!
当有几个人觉得这楼主这话说的没根据,那么楼主大可不必放在心上。
当有一群人觉得楼主说的话,没根据。那么楼主是否该反思一下呢?
没错,真理是掌握在少数人身上,但是也得看真理对与否 。
我师傅从2000年出道,到如今,整整9年。
你的一句“高手是绝对不用存储过程的”,完全与我师傅的概念相反。
我师傅的一篇简单三层文章:
对于B/S架构的三层架构的开发,可能很多的人都已经了解的是比较清楚的。哪么我在这里用的是最简单的三层架构。ui+bll+dal+dbsqlhelp+model.从05出来以后由于功能明显比03夸张了很多,所以在开发的时候也就很方便。其中以数据的显示最为明显。通过sqldatasource可以几乎一行代码都不需要写,就能在GridView中显示出来数据,并且进行增删查改的操作,但是我个人总感觉这样做是有问题的。因为使用sqldatasource,就明显的破坏了3层架构的基本改变。哪么微软在05当中,很重点的推出了objectdatasource这个东西,就是专门用来结合三层架构开发的一个数据源绑定控件。 在层次之间传递的也是object,这样相对来说就比较好一些。
我不想问那么多,你出道几年???你的观念仅仅是你的个人体会,麻烦编辑下日志,纯属个人观点。
只想说一句,可怜的老赵啊.
同脑袋的看法,这个讨论根本没有一致的前提啊.
@彦斌
好吧,我的名字和你基本一样,只有姓的写法不一样,音一样.
--引用--------------------------------------------------
装配脑袋: 民科和科学家最大的区别是什么?科学家想弄清楚事情的真相,行的原因是什么,不行的原因是什么,怎么严格推导和证明,怎么用实验证明,怎么处理后果,怎么利用。民科的目的就是他说什么,什么就是对的,专家的如果和他不一样,就是错的,用各种各样的“经历”和“名词”来加以强调。所以民科和科学家没法交流,民科的理论尽管没有任何用处(或害处),但讨论和对公众的不良印象损耗也是非常大的。
--------------------------------------------------------
--引用--------------------------------------------------
装配脑袋: 民科是不会因为你挖苦,鄙视,教育就可以领会如何从真正科学的角度来考虑问题的,因为他们没有这个基础。这是客观条件,没法改变的。民科只会坚持自己的观点,这是没有办法改变的,真的!别以为你可以教会试图推翻相对论的民科真正的相对论,因为他们连牛顿定律都不知道,需要好多年才能理解相对论。你是绝对没有能力让他理解相对论,然后从同一个层次来讨论的!软件架构也是一样……
--------------------------------------------------------
精辟!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
不要攻击人身啊,个个说不出什么令人信服的证据.说人家脑殘啊,什么的.
我出道几年跟这个问题有什么关系呢.走在真理的道路上一分钟也比你们走在岐路在几年强吧.
靠,大中午头的跑到这个帖子来了,自己找堵啊!!!
坚决支持装配脑袋的看法!!!
分层的优点是便于维护 就像c和c++一样 想效率高就用汇编 但是汇编便于维护嘛?LZ估计是没做过大系统(就是没和多人合作 或者在大团队中 只是个coder)
分层在你的层次看确实没用
存储过程没用? 表搞笑了 哪个银行 电信系统不用存储过程?大机? 银行 电信的数据库哪个不在大机上? 存储过程用佛家的话说 是 直指本心
ORM?小系统 查询用用还行 比如 查询账户余额 凡是涉及插入 更新的 效率最高的肯定是存储过程(前提是 SQL一样!)
另外想说的是 架构和模式 还是有区别的
都没有令人信服的理由,我是团队的leader ,架构师,你们是什么东西
163楼的马甲,
别在这里挑起纷争.
close吧
--引用--------------------------------------------------
栖山,: 走在真理的道路上一分钟也比你们走在岐路在几年强吧.
--------------------------------------------------------
就这句话,感觉楼主不同凡人。
哎。都是代码害的。
想问下楼主最近除了编代码之外,有没有加入什么组织啊,练什么神功啊之类的。
只是问问。
--引用--------------------------------------------------
栖山,: 都没有令人信服的理由,我是团队的leader ,架构师,你们是什么东西
--------------------------------------------------------
很难和你解释,用老江的话“YOU are too simple ,too Young!”。
跳槽吧。。。
--引用--------------------------------------------------
huxj: 楼主就想炒作自己,。。。。。。
--------------------------------------------------------
同意
--引用--------------------------------------------------
wyf: 终于知道什么叫无知者无畏了
--------------------------------------------------------
"谁说我没做过大项目 我用as400 的dell 开发过as400 的项目
你们说服不了我.嘿嘿,我就不有存储过程 .我也不用三层.
我看了《Patterns of Enterprise Application Architecture》
写得太次了,没有我想的好.你们天天抱着这本书,以为就软件架构牛了.
我写的程序才是牛的."
楼主你说这些话之后,我发现你可以去精神病医院了。另外劝大家别接近他,他杀人不用负担刑事责任的。
又一个鲜明的例子,证明开源废柴的实际水平是何等的低下。
只有水平低到不得不抄开源代码的垃圾才会对这玩意儿有好感
凡是发怒者 请自省下自已的小我.嘿轩
请平静下心情.嘿嘿
嗯嗯,有意思,这才是江湖。
楼主说绝对不用三层,但是也绝不写存储过程,那么,楼主是怎么写程序的呢?三层缺点当然有不少,不过这方面的东西已经有很多人总结过了,楼主要是能提出一个更好的解决方案,我才服你。
凡是回帖者将得到麦当劳特技板烧鸡腿汉堡套餐一份~ 请上我家领取
@Jeffrey Zhao
经典。。。楼主是用过IBM小型机的人。。。羡慕!
现在的人都怎么了?
三层招谁惹谁了?存储过程又招谁惹谁了?
请楼主以后不要再发这种文章误导别人了,行不?!
听博主写的文章的语气就觉得有点怪,什么直觉,你还真是搞笑,不要太自以为是。
象楼主这样的人才,真应该送到美国去,美国it界如果能有1/10象楼主这样的人才,至少倒退50年...
楼主就是一个JAVA的卫道者!
JAVA不用存储过程?
JAVA有存储过程么?
我晕死.我在上市公司看到的JAVA做的网管系统里面怎么还是有很多存储过程呢?
果然係有点误人子弟。
国外不分层,
完全不可能。
“云”也是一层,
没“层”没灵魂。
如果不分层,
代码看死人,
根本不可能。
不过是大三层与小三层的关系了,云时代同样得分层,因为这个世界正在趋向多元化,程序不就是一个小的映射吗
今天再回来看看...送楼猪一句话..就你这智商...回家养猪去吧
似乎楼主就是想要这种效果!!
说三层这么多不好!!
那么楼主开发软件的模式是什么????
应该有更好的方法才有资格说别的不好吧~
说出来啊!!!!!!!!!!!!!!!!!!!
-------------------------------------
本文纯属搞笑...
-------------------------------------