CSDN-CSDN社区-.NET技术-分析与设计

收藏 [推荐] [攒分贴】.net你向误区的深渊走了多远[问题点数:1,结帖人:wangchao1982]

楼主发表于:2008-07-29 18:07:21
    其实我觉得把题目换成“程序设计你向误区走了多远”。可是想想既然是发在.net社区了,还是改成目前的名字吧。
    首先声明一点:我说的仅仅是个人的观点,不说憋得慌,您要是看的不爽,私下里骂两句的了。但是别说出来。这和意淫还是“真淫”一样。前者你是好人,后者你就是坏淫^_^
    1)被用烂了的“接口”,其实interface本身只是用来规范子类的。当然我承认:随着时代的发展,我们会给事物赋予新的职责,但问题是你给事物赋予了太多的职责本身是否合适。就像现在的“小姐”这个词一样,这本来能算是一个褒义词的,结果时代进不了,它被划定到“绝对的,及其无耻的贬义词”阵营了。interface也处在一个及其尴尬的位置,因为它被赋予的职责太多了,多到了让人觉得会压垮interface的地步:今天弄一个“转换”,隐藏具体实现;明天弄一个“依赖注入”,实现什么松耦合。我们不觉得太残忍了么?它本身就是用来规范子类,而现在却被绝对的本末倒置了。甚至让人们觉得interface的定义有问题了。
    2)已成“弃子”的parameter(dataadapter的输入参数),因为推崇“依赖注入”的人都觉得“看到一堆的parameter就烦。我觉得说出这种话的人,绝大多数偶读是从java转过来的,要不就是根本没用过sql server数据库。其实输入参数本身是sql server解决注入攻击的最好办法之一(另外一个就是存储过程,其实存储过程本身也要靠输入参数支持一把的),因为sql server可以在一个command中执行多个sql语句的,而oracle不可以,所以有人就鼓吹oracle如何如何了,在这点来说并不是Oracle本身比sql server好,而是Oracle在这点上偷懒了。或许您会不同意,说出如何如何的观点,那我问您:在一个有自增列的表中我插入了一条记录,然后获得这个id。sql server是“平地一声雷”一次搞定,而Oracle却要“脱一次裤子”才行。
    4)过分的追求“松耦合”,甚至很多人都把“无耦合”当成最终目标了。虽然很多人都在鼓吹“依赖注入”,甚至把懂这个东西、在项目中使用了这个东西当成一种荣耀当成一种资本。但是有一点是肯定的:不管是“依赖注入”还是所谓松耦合(把松耦合和依赖注入放到一起不合适),其本身并没有改变耦合的本质,只是把以前的一步走变成了两步走或者是n步走了。一步走3米能做到,但是肯定不合理,但是3米走10步恐怕只有变态才会觉得好。而松耦合也是这个道理:你到底是要把“3米”松到“几步”中?“依赖注入”可以看做是把原来的一步变成了3步:第一步:我想上你。第二步:等等我去配置文件中看看给你配置了没有。第三步:不好意思没您的事。分层固然是符合N多的设计理念,但是分层本身却违背了“追求简单”的这个最基本设计理念。所以我们必然要在这两者上做一个折中,但是很遗憾,很多人都已经忘掉了这点,甚至觉得自己要是能够在目前成熟的架构下弄出一个说服别人的一层来是件很光荣的事情。除此之外,我还想从另一个大家很讨厌,却从始至终都摆脱不了的角度来说这第四点:哲学的角度。哲学中有这样一点:“没有完全独立的事物”,如果大家记性好应该记得在学校里,老师还拿鲁宾逊漂流记说事来着。所以从哲学的角度来说“松耦合”本身就是对哲学的挑战。而“无耦合”就是对哲学的挑衅,这是绝对不可能实现的。所以我奉劝那些战斗在“如何把耦合松一松”第一线的兄弟们,对哲学的挑战是有极限的。而任何超越这个极限的东西都是不可能实现的。所以我觉得:合理的架构 = 适当耦合度与设计简单的最佳折中,而不是一味的夸大“耦合度”或者是设计简单
回复次数:203
#1楼 得分:0回复于:2008-07-30 03:47:36
顶,写得好
  • rqx110用户头像
  • rqx110
  • (BS不结贴~)
  • 等 级:
#2楼 得分:0回复于:2008-07-30 08:02:20
  • viena用户头像
  • viena
  • (wien 维也纳)
  • 等 级:
  • 3

#4楼 得分:0回复于:2008-07-30 09:40:34
很久没有可讨论的话题了,推荐下,好让大家讨论~
#5楼 得分:0回复于:2008-07-30 10:10:35
不懂啊 ,深奥。
#6楼 得分:0回复于:2008-07-30 10:11:33
有道理。有些人就会背书,讲起来一套一套的,做起来死搬硬套
#7楼 得分:0回复于:2008-07-30 10:12:13
合理的架构 = 适当耦合度与设计简单的最佳折中,而不是一味的夸大“耦合度”或者是设计简单

这个还是很有道理的

不过,有时候,需求如果会剧烈振荡,松一点会好很多的

推荐采用敏捷的一些思想,拥抱变化
#8楼 得分:0回复于:2008-07-30 10:12:58
我觉得提供这样的技术或者特性给你是好事情,至于你用还是不用,还不是全在于你??
和接口或者其它的有关系么??
如果有个公司用C#写了一个没有接口的系统,你认为如何呢?好还是不好?
不要太在意语法,用与不用全在一念之间。
#9楼 得分:0回复于:2008-07-30 10:14:00
学习了,现在没有楼主领悟的那么深...............
#10楼 得分:0回复于:2008-07-30 10:16:41
跟过,看看
  • bwangel用户头像
  • bwangel
  • (语文水平和技术水平成正比)
  • 等 级:
#11楼 得分:0回复于:2008-07-30 10:17:35
"依赖注入"是什么意思啊,不懂,鼓励进行注入攻击?
#12楼 得分:0回复于:2008-07-30 10:17:53
#13楼 得分:0回复于:2008-07-30 10:20:08
收藏
#14楼 得分:0回复于:2008-07-30 10:22:20
第3条呢?
#15楼 得分:0回复于:2008-07-30 10:27:21
第3条呢?
#16楼 得分:0回复于:2008-07-30 10:31:25
加油啊
中国的程序员们
#17楼 得分:0回复于:2008-07-30 10:41:17
合理的架构 = 适当耦合度与设计简单的最佳折中,而不是一味的夸大“耦合度”或者是设计简单

说的不错,我觉得还是要具体项目具体分析。
#18楼 得分:0回复于:2008-07-30 10:42:05
个人认为接口还是非常重要的。它可以让程序更规范更灵活。

合理的架构 = 适当耦合度与设计简单的最佳折中。这个观点我支持。
  • youbl用户头像
  • youbl
  • (水边)
  • 等 级:
#19楼 得分:0回复于:2008-07-30 10:42:53
依赖注入,不是你理解的攻击,而是一种设计方法
就是说如果A类对B类有依赖的情况下(即必须先实例化B类,A的方法才能继续),把A和B的耦合分开,在A类里使用一个接口的实例,而B类实现这个接口,这样A类和B类就实现了松耦合。

引用 11 楼 bwangel 的回复:
"依赖注入"是什么意思啊,不懂,鼓励进行注入攻击?
#20楼 得分:0回复于:2008-07-30 10:48:25
向专家学习
支持.NET
#21楼 得分:0回复于:2008-07-30 10:52:33
加油啊
中国的程序员们
#22楼 得分:0回复于:2008-07-30 11:01:52
这个是 OO是 思想问题
并非.net本身的问题.
  • jotn26用户头像
  • jotn26
  • (小风子)
  • 等 级:
#23楼 得分:0回复于:2008-07-30 11:08:10
顶个先 不是很理解 以后回头再看
#24楼 得分:0回复于:2008-07-30 11:21:31
不是.net程序员。看到首页链接进来的。

只是把以前的一步走变成了两步走或者是n步走了
// 这根本不是松耦合,这是模块划分。跟耦不耦合一点关系没有。这是两个概念。

第四点:哲学中有这样一点:“没有完全独立的事物”
// 松耦合是可以实现的。也是有意义的。松耦合假定信赖的模块接口是可信的,稳定的(如rtti或.net运行平台)。但应该“松”掉的是有可能出问题,或有可以导致问题的模块接口。
// 无耦合是不可实现的,也是无意义的。


合理的架构 = 适当耦合度与设计简单的最佳折中
// 该耦合的必需耦合,该松耦合的必须松耦合。该简单的必须简单,该复杂的必须复杂。耦合度与设计简单没有冲突,也没有折中。就是说没有必须松耦合又必须低复杂度的设计场合。
#25楼 得分:0回复于:2008-07-30 11:21:36
第3点谁给删了?
#26楼 得分:0回复于:2008-07-30 11:22:56

松耦合和“没有完全独立的事物”不矛盾啊,怎么构成挑战了
#27楼 得分:0回复于:2008-07-30 11:32:25
其实我写这个帖子是被pet shop4.0刺激的。因为4.0完全把java的架构用c#翻译了一遍。别人对微软此举是褒是贬我并不在意,我只是在想:这是不是IT业的东施效颦!4.0以前的架构简练清晰,让人看了就觉得神清气爽,而4.0里是12层。如果我们封装了自己的控件(非userControl)层,那么为了解决层与层之间的相互依赖,必然还会划分出几层,比如枚举层(以前一般都是封装在SysFramework层中,那时候为了解决相互引用,只能是在用的地方单独定义,所遇我觉得与其这样乱糟糟的还不如拿出来单独做一层),还有一层我觉得是用来封装一些会被很多层调用的基础类(这样的类不调用当前架构中其它任何层中的方法)……为了使每一层更加专注,层只能越来越多,但是有一点很清楚:层与层之间的调用(或者可以称为耦合)并没减少,因为那个被我称为“常量”的耦合依然作为一条主线贯穿所有层,从这一点上也充分的说明了:耦合度可以被稀释,而耦合本身却没有变,或许我们可以称之为“耦合守恒”吧。
可以把耦合比作致命的毒药,而系统却是别无选择的需要把这包毒药吃掉的倒霉鬼,所以我们为了让系统既能把毒药吃掉,又不会被毒死,就想出来“分层稀释”:让每一层帮着分担点。这绝对是个聪明的办法,可是现在却有一种趋势:让毒药的浓度越低越好。顺着这个观点想,把这包毒药扔到大海里最好,可问题是喝干大海是个很头疼的问题,可是如何管理这些喝干大海的人要比找到这么多的人来喝还要困难得多。那个时候或许“系统觉得”还是别稀释了,让我一次死个彻底吧^_^
不管丈夫多帅,不管妻子美的多么不可方物,他们晚上还是要做一些赤裸裸很丑陋的事情。从这点延伸一下,我觉得面向对象建模也存在这这样的尴尬:不管你建模多么漂亮,不管你的bean写的多美,数据库那张大床始终是你的归宿,从这点来看,java的实体bean不如.net的强类型dataset来的实在。很显然,大众的眼睛是雪亮的:还是实在的好(不管您愿意还是不愿意)所以dataset是标准,而不是衣着华丽美艳不可方物的java实体bean

7楼的兄弟提到了“敏捷”。其实我觉得“敏捷开发”是“服务竞争”的产物,无非是把上帝的权利最大化。进而让上帝“死心塌地的爱上我”。软件工程中本就有需求控制的概念(这甚至是一个很核心的内容),而“最大化上帝的权利”无疑是与需求控制相冲突的,所“最大化上帝权利”的必然结果是“过度的需求变更”。如今的竞争越来越激烈(关于这点我在后面在谈一下自己的感受),所以我们想到了用“基于配置”来解决过度需求变更引起的混乱。这并不是从根本上解决问题,而是自己造出了一个比以往更坚固更复杂的盾来抵挡上帝频频刺出的矛。盾牌固然坚固,可是工艺要求更高了,维护的门槛更高了,而这又违背了“追求简单”的原则。

其实软件的竞争和市场上卖鸡蛋的一个道理:
买方:哥们你比别人便宜点我就买你的。
卖方:。。。
买方:痛快点,不卖走了啊
卖方:(心想,算了3块4也赚)行,老主顾了。但你别跟别跟别人说啊(想必大家都遇到过吧)。
买方:给我挑个大的……
卖方:都给你便宜了怎么还这样?
买房:卖不卖
……
没有不透风的墙,也没有保守秘密的活人,总之别的卖鸡蛋的肯定会知道,所以3块4从暗价(主顾价)变成了明价。在赚钱的前提下,上面的步骤还会重演,直到无利可图……
其实我只是一个刚刚毕业一年的小coder,没有资格评论这些,可我就是想不明白:如此浅显的道理,为何那些大人物不懂,或者是懂了却还要继续给自己挖坑,直到挺不下去了,自己一埋完事。
其实降价完全没有必要,只要商量好了大家都挺着,鸡蛋吃完了总得买,所以钱不会少挣,其它任何行业都是如此。当然我并不否定技术上的进步,比如你把鸡蛋弄的跟鹅蛋那么大,味道更好。而现在的做法(虽然技术也是在进步)却始终是上面卖鸡蛋的那一套:便宜点(有需求变更了,我配置下就OK了,少收你点钱),挑个大的(想要啥功能,您说话,咱做)
  • wudhu用户头像
  • wudhu
  • (亮亮)
  • 等 级:
#28楼 得分:0回复于:2008-07-30 11:34:40
顶 lz写的好
  • bwangel用户头像
  • bwangel
  • (语文水平和技术水平成正比)
  • 等 级:
#29楼 得分:0回复于:2008-07-30 11:37:52
不管丈夫多帅,不管妻子美的多么不可方物,他们晚上还是要做一些赤裸裸很丑陋的事情。
---------------------------------------------------------------------

我不认为那是很丑陋的事情。
#30楼 得分:0回复于:2008-07-30 11:38:00
松耦合当然与没有完全独立的事物”不矛盾。但是我前面说了:甚至很多人都把“无耦合”当成最终目标了。其实我说的是这个,让大家误会了。抱歉
#31楼 得分:0回复于:2008-07-30 11:39:38
回29楼:夫妻俩肯定不觉得,可是看到自己喜欢的美女和他老公XX,估计你就不是这个想法了^_^(低级了,罪过罪过,不说这个了。呵呵)
#32楼 得分:0回复于:2008-07-30 11:43:16
引用 24 楼 yl0002 的回复:
不是.net程序员。看到首页链接进来的。

只是把以前的一步走变成了两步走或者是n步走了
// 这根本不是松耦合,这是模块划分。跟耦不耦合一点关系没有。这是两个概念。

其实“耦合”是来自“电子电路大陆”的舶来品。
在那个大陆的定义大概是“ 耦合是指两个或两个以上的电路元件或电网络的输入与输出之间存在紧密配合与相互影响,并通过相互作用从一侧向另一侧传输能量的现象;概括的说耦合就是指两个实体相互依赖于对方的一个量度”。从这里我们可以认为:松耦合是目的,模块化分是实现松耦合的办法
#33楼 得分:0回复于:2008-07-30 11:46:45
虽然不是很理解,但是订了
#34楼 得分:0回复于:2008-07-30 11:50:06
4)说了一大段用一句就能讲明白——设计过度。在刚刚学了设计模式后,是很容易掉到设计过度的陷阱里面。这个阶段绝大多数中高级程序员都经历过,一方面是想在项目拿新技术新观点的练手,另一方面也有个人炫耀的思想在作祟,认为用设计模式搞出来的东西和同行交流起来显得水平高些,倍儿有面子。这个阶段只有继续累积一定的项目开发经验后才能跨过。当然,看过敏捷软件开发的话,可以让这个周期缩短一些。
#35楼 得分:0回复于:2008-07-30 11:59:25
good................
  • zincy用户头像
  • zincy
  • (砍瓜切菜)
  • 等 级:
#36楼 得分:0回复于:2008-07-30 12:11:47
被用烂了的“接口”,其实interface本身只是用来规范子类的。  是的,有些人喜欢乱用interface
#37楼 得分:0回复于:2008-07-30 12:16:10
连程序员也玩文字推敲了,呵呵,有意思。

#38楼 得分:0回复于:2008-07-30 12:19:50
引用 27 楼 wangchao1982 的回复:
其实降价完全没有必要,只要商量好了大家都挺着,鸡蛋吃完了总得买,所以钱不会少挣,其它任何行业都是如此。当然我并不否定技术上的进步,比如你把鸡蛋弄的跟鹅蛋那么大,味道更好。


1. “只要商量好了大家都挺着” ,谁去组织?
2. 鸡蛋价钱一样的情况下,当然会选择个头大质量好的。次等点的鸡蛋怎么处理,倒掉?
3. 在鸡蛋质量、价钱一样的情况下,一个买鸡蛋的一次只会从一个卖家那里购买,且俗语有云“一回生二回熟”。
4. 在3的条件下,难道眼睁睁的看着自己篮子里的鸡蛋烂掉?

其实从古到今乃至将来,市场永远是有钱和有权的人操纵的。
#39楼 得分:0回复于:2008-07-30 12:23:48
o
#40楼 得分:0回复于:2008-07-30 12:25:20
完全同意楼主的意见!!最讨厌生搬硬套,有个新鲜玩意儿就一窝蜂的涌上去一通乱用——大多数人的通病!
#41楼 得分:0回复于:2008-07-30 12:27:55
引用 34 楼 comiunknown 的回复:
4)说了一大段用一句就能讲明白——设计过度。在刚刚学了设计模式后,是很容易掉到设计过度的陷阱里面。这个阶段绝大多数中高级程序员都经历过,一方面是想在项目拿新技术新观点的练手,另一方面也有个人炫耀的思想在作祟,认为用设计模式搞出来的东西和同行交流起来显得水平高些,倍儿有面子。这个阶段只有继续累积一定的项目开发经验后才能跨过。当然,看过敏捷软件开发的话,可以让这个周期缩短一些。

我个人比较喜欢用生活中的常识来诠释一些很专业的词汇,因为这样会让我的记忆更深刻,了解的也更深刻,而不仅仅是一个概念复读机

另外就是我根本就没想过这个帖子会被推荐。我和几个朋友聊过这个话题,从他们的话语中听出了他们不认可却又不愿意伤害我的意思,让我心里很憋屈,所以才整理了下思路发到了CSDN。毕竟这是我个人的观点,对不对不重要,重要的是您把您的经验和您的心得和我们分享一下。并且指点一下我的错误,让更多的人和您一起进步。另外就是4.0出来了,除了给架构做注释的,绝大多数都是跟风喊好的。让我觉得这种做法很盲目,总觉得这里面存在问题。因此,所以,可是……把您对pet shop4.0的想法留下来,大家一起分享,让更多的.NET兄弟姐妹们听一听不同的声音
#42楼 得分:1回复于:2008-07-30 12:28:13
牛B呀,虽然没看懂,但可以接分呀,哈哈
#43楼 得分:0回复于:2008-07-30 12:37:20
向连程序员,专家学习,谢谢!
#44楼 得分:0回复于:2008-07-30 12:38:29
好好反省
#45楼 得分:0回复于:2008-07-30 12:38:49
不是很理解,我来顶个
  • dknewu用户头像
  • dknewu
  • (HelloWorld)
  • 等 级:
#46楼 得分:0回复于:2008-07-30 12:46:37
顶,写的不错
的确设计过度会浪费生产力,简单设计更重要些。敏捷的思想对于程序员的真是太重要性了
#47楼 得分:0回复于:2008-07-30 12:47:19
引用 38 楼 anheizhizi 的回复:
引用 27 楼 wangchao1982 的回复:
其实降价完全没有必要,只要商量好了大家都挺着,鸡蛋吃完了总得买,所以钱不会少挣,其它任何行业都是如此。当然我并不否定技术上的进步,比如你把鸡蛋弄的跟鹅蛋那么大,味道更好。


1. “只要商量好了大家都挺着” ,谁去组织?
2. 鸡蛋价钱一样的情况下,当然会选择个头大质量好的。次等点的鸡蛋怎么处理,倒掉?
3. 在鸡蛋质量、价钱一样的情况下,一个买鸡蛋的一次只会从一个卖…


您这3点说到点子上了,可是至于如何做才能使整个市场发展的更好,商人们也能赚到更多的利润,我相信经济学里的N多“大枕头”肯定会有很多很多的对策。
您说的第一点就体现出商会的作用了。否则那些被打上“不正当竞争”的企业也不会被罚款了,这本身是为了一个行业的发展,而不仅仅是眼前的利益。这是毋庸置疑的。
您说的第二点:这个我承认,不过您好像有点误解了我的意思了。我举这个例子主要是为了说明“上帝得寸进尺”。
而关于您说的第三点,这就是弄业务那帮大神的事情了。如果在“硬件条件”一样的前提下(价钱,吃饭请客XX),我会选择在“软条件”更优秀的那个卖家。基本上说“放心保证没问题”,“不可能,我们保证您满意”……这些卖家的我不要,我会要那些“有技巧”的“实话实说”的卖家。如果“软硬”给“上帝”的感觉都差不多,那么老天保佑,谁卖掉了鸡蛋就看“上帝”到底爱谁了。
#48楼 得分:0回复于:2008-07-30 12:48:25
引用 42 楼 dreamice01 的回复:
牛B呀,虽然没看懂,但可以接分呀,哈哈


大哥啊这一分我肯定给您了^_^
#49楼 得分:0回复于:2008-07-30 12:49:01
很好,支持!!!1
  • BillMhw用户头像
  • BillMhw
  • (春暖花开)
  • 等 级:
#50楼 得分:0回复于:2008-07-30 12:51:25
合理的架构 = 适当耦合度与设计简单的最佳折中
  • szh3210用户头像
  • szh3210
  • (/+/=〆)
  • 等 级:
#51楼 得分:0回复于:2008-07-30 13:02:00
不错
#52楼 得分:0回复于:2008-07-30 13:15:55
设计,不容易呀,我一直也不敢涉足啊,希望能力不足的人别在那瞎设计啊,设得程序员好难受。
#53楼 得分:0回复于:2008-07-30 13:35:23
我想这是从技术员过度到设计师的一个阶段, 技术员关注新奇, 关注多样性, 设计师关注平衡.
当一个设计师还不成熟时, 特别容易范过度设计的错误.

一个好的设计师具备以下条件:
首先, 将客户摆在第一位. 你设计的东西是否客户需要的? 这样的技术是很新颖, 对客户应用有帮助吗?
其次, 将雇主摆在第二位. 你设计的东西是否会增加研发,维护,运行成本? 你设计的东西其他项目可以使用吗? 做出来可以赚钱吗?
最后, 将技能/技术摆在最后. 是否有先进性?

做设计时, 切勿本末倒置.

希望楼主能成为平衡大师...
#54楼 得分:0回复于:2008-07-30 13:48:56
写的不错
#55楼 得分:0回复于:2008-07-30 13:50:19
呵呵
#56楼 得分:0回复于:2008-07-30 14:09:01
我认为这就像是多种编程语言一样,vb能编写出的东西java也能写出来,或许c#更简单,但是编出同样的东西总是java比其它的卖的价钱要高些,这是什么什么呢?
一个道理,用啥都一样,重视结果和卖点就OK了.
#57楼 得分:0回复于:2008-07-30 14:16:54
引用 53 楼 TinyJimmy 的回复:
我想这是从技术员过度到设计师的一个阶段, 技术员关注新奇, 关注多样性, 设计师关注平衡.
当一个设计师还不成熟时, 特别容易范过度设计的错误.

一个好的设计师具备以下条件:
首先, 将客户摆在第一位. 你设计的东西是否客户需要的? 这样的技术是很新颖, 对客户应用有帮助吗?
其次, 将雇主摆在第二位. 你设计的东西是否会增加研发,维护,运行成本? 你设计的东西其他项目可以使用吗? 做出来可以赚钱吗?
最后, 将技能/技术…


谢谢TinyJimmy老兄,我目前仅仅是一个小coder,但是我知道“合适的就是最好的”。您说的非常好。可惜啊,我相信您一定遇到过“项目订单拿下来后”经理就忙着如何实现更高的毛利率,如何“多快好省”的完成任务,至于客户啊:见鬼去吧。没签合同我是孙子;签了合同,只要俺擦边球打的好,这孙子还是客户来吧。
这好像在大学里“拿下前”和“拿下后”的区别吧。

谢谢您的指点。也谢谢楼上以及楼下的热心的兄弟姐妹们
#58楼 得分:0回复于:2008-07-30 14:22:32
引用 56 楼 tianyong0951 的回复:
我认为这就像是多种编程语言一样,vb能编写出的东西java也能写出来,或许c#更简单,但是编出同样的东西总是java比其它的卖的价钱要高些,这是什么什么呢?
一个道理,用啥都一样,重视结果和卖点就OK了.

tianyong0951 您说的很对,事实也的确如此。可是,“结果和卖点”往往是那些更高层领导关注的,而我们还要维护。所以这个“过程”对于项目经理和开发人员来说也很重要
#59楼 得分:0回复于:2008-07-30 14:27:02
你们都好幸福,有 .net 可以谈论分层设计,谈论分几步走一段固定的路;
我如今在uclinux里面,把本来应该几层完成的功能,用一层就必须搞定,因为内存超级少,CPU超级慢;
不过,比我们那个搞MCU的还好点,他用的CPU只有128........字节!!这就是全部的RAM,您看分几层?
#60楼 得分:0回复于:2008-07-30 14:34:10
传说中的武林高手,最高境界是"无招",最终是简单的杀招.
目的明确,直接了当,简单明了,一招致命,不需要繁复的招数!
#61楼 得分:0回复于:2008-07-30 14:36:29
有道理。有些人就会背书,讲起来一套一套的,做起来死搬硬套
#62楼 得分:0回复于:2008-07-30 14:42:42
不需要繁复的招数!
#63楼 得分:0回复于:2008-07-30 14:44:42
路过!~!~

弄点分!~

然后慢慢关注。。
#64楼 得分:0回复于:2008-07-30 14:50:27
好的帖子是要顶的
  • JYYCOM用户头像
  • JYYCOM
  • (横眉冷对)
  • 等 级:
#65楼 得分:0回复于:2008-07-30 14:53:32
先顶,再拜读!
#66楼 得分:0回复于:2008-07-30 15:00:21
不管丈夫多帅,不管妻子美的多么不可方物,他们晚上还是要做一些赤裸裸很丑陋的事情。
---------------------------------------------------------------------
试问楼主穿衣服是为了什么?只是为了御寒么?
封装和降低耦合是为了更好的管理代码,不是为了更容易编码。
从编码的角度来说,似乎直接点更好,干一炮了事,下一炮跟这不相干;
但是从项目管理的角度来看,后宫三千佳丽,跟谁干,什么时候干,怎么干都很有讲究的。
  • yyxu123用户头像
  • yyxu123
  • (蓝色魔法袍)
  • 等 级:
#67楼 得分:0回复于:2008-07-30 15:34:14
看了半天,还是看的事实而非的,好像我就有点钻进误区了。有机会一定向高手请教。技术无涯~达者为先啊。。
  • mvnvm001用户头像
  • mvnvm001
  • (ネKevinヒ⌒)
  • 等 级:
#68楼 得分:0回复于:2008-07-30 15:36:32
顶你一把!!!!
#69楼 得分:0回复于:2008-07-30 15:36:57
引用 53 楼 TinyJimmy 的回复:
我想这是从技术员过度到设计师的一个阶段, 技术员关注新奇, 关注多样性, 设计师关注平衡.
当一个设计师还不成熟时, 特别容易范过度设计的错误.

一个好的设计师具备以下条件:
首先, 将客户摆在第一位. 你设计的东西是否客户需要的? 这样的技术是很新颖, 对客户应用有帮助吗?
其次, 将雇主摆在第二位. 你设计的东西是否会增加研发,维护,运行成本? 你设计的东西其他项目可以使用吗? 做出来可以赚钱吗?
最后, 将技能/技术…

#70楼 得分:0回复于:2008-07-30 15:38:41
都是高人阿,下了pet shop4.0东西,看了半天没看懂。。。还是先抓抓基础
#71楼 得分:0回复于:2008-07-30 15:40:33
无非就是该不该用,怎么用的问题.在boss满意的条件下,还要考虑团队,四只狗都往同一个方向跑你跑是不跑?如果个人开发,那无所谓了,只要自己能看得懂.想怎么干就怎么干.
这算是总结了吧.@_@  汉!!!!!!

  • JYYCOM用户头像
  • JYYCOM
  • (横眉冷对)
  • 等 级:
#72楼 得分:0回复于:2008-07-30 15:48:42
搬个马扎学习,楼主签名图片不错,背影太销魂啦,哈哈
#73楼 得分:0回复于:2008-07-30 15:50:54
引用 59 楼 mordecay 的回复:
你们都好幸福,有 .net 可以谈论分层设计,谈论分几步走一段固定的路;
我如今在uclinux里面,把本来应该几层完成的功能,用一层就必须搞定,因为内存超级少,CPU超级慢;
不过,比我们那个搞MCU的还好点,他用的CPU只有128........字节!!这就是全部的RAM,您看分几层?

现在的PC不也是从K单位发展过来的嘛,有摩尔定律你怕啥,估计过几年,您那“小手扶”就得赶上现在的“动车”
#74楼 得分:0回复于:2008-07-30 16:07:53
被用烂了的“接口”,其实interface本身只是用来规范子类的。
----------------------------------------------------------------
楼主这个话是错的。不过interface本身就是以一个不上不下的尴尬物。在c#和java这样半吊子泛型的语言里面,interface还得继续大量使用。
#75楼 得分:0回复于:2008-07-30 16:27:06
引用 66 楼 hfy2006 的回复:
不管丈夫多帅,不管妻子美的多么不可方物,他们晚上还是要做一些赤裸裸很丑陋的事情。
---------------------------------------------------------------------
试问楼主穿衣服是为了什么?只是为了御寒么?
封装和降低耦合是为了更好的管理代码,不是为了更容易编码。
从编码的角度来说,似乎直接点更好,干一炮了事,下一炮跟这不相干;
但是从项目管理的角度来看,后宫三千佳丽,跟谁干,什么时候干,怎么干都很有…

1)软件开发引入“工程”的概念就是想要“流水线”的效果。既然是“流水线”,那么作为coder编码肯定更容易。而做“流水线”的人要麻烦很多了。“流水线”本身就意味着工人“干活效率高”、“好管理”、“责任明确”等等。
2)就某一个功能的实现来说,当然是“下黑手一次搞定”好,可现在的软件不是k行代码就能拿下的.总不能“一次编写,四处拷贝吧”(注:这是java用来诠释其跨平台特性的,貌似和原话不大一样。而不是讽刺其编码风格。恰恰是java的架构非常的出色。拿这个开个玩笑,无恶意)。尤其是遇到了逻辑有变化的时候……。所以“下黑手”的次数多了,体会到恶果后,往往会痛改前非,重新做人的
3)至于这最后一个,穿越吧:我已经研究三国好长时间了,估计也能混个皇帝当当^_^


其实hfy2006 老兄误会我的意思了。我举这个粗俗的比喻是为了说明:华丽的面向对象建模始终要“洗尽铅华”,与具体的物理表做一些别人看不到的事情。所以我觉得与其花大量的时间弄一个“完美反映现实对象”的实体类,然后在花大力气转换成“很直白”的物理表结构,还不如直接按照表结构来个强类型dataset的好。如果您愿意,完全可以在dataset里自定义类型,也可以做到“完美的描述现实对象”的地步。
我不想在这里讨论面向对象建模和面向数据库建模以及面向过程建模。第一:我对比较官方的观点体会不深;第二我觉得这仅仅是理念上的不同,正所谓条条大路通巴黎。坐飞机去美国固然比坐船去好,但坐飞机的要求是:如果你的护照上的照片中头发有100根,登机的时候您只有99根就会被拒载,估计您也不会再去坐飞机了。况且这几种建模方式也没有飞机和轮船那么大的区别。
#76楼 得分:0回复于:2008-07-30 16:40:47
不是一般的经典阿
#77楼 得分:0回复于:2008-07-30 16:56:16
引用 75 楼 wangchao1982 的回复:
引用 66 楼 hfy2006 的回复:
不管丈夫多帅,不管妻子美的多么不可方物,他们晚上还是要做一些赤裸裸很丑陋的事情。
---------------------------------------------------------------------
试问楼主穿衣服是为了什么?只是为了御寒么?
封装和降低耦合是为了更好的管理代码,不是为了更容易编码。
从编码的角度来说,似乎直接点更好,干一炮了事,下一炮跟这不相干;
但是从项目管理的角度来看,后宫三千佳丽,跟谁…



什么啊.你用过LINQ吗.用了后再说吧.
#78楼 得分:0回复于:2008-07-30 16:58:03
你刚学程序的时候然到老师没说.尽量用属性...不要把变量暴在外面.
  • 21bird用户头像
  • 21bird
  • (青山依旧在 几度夕阳红)
  • 等 级:
#79楼 得分:0回复于:2008-07-30 17:06:59
矛盾无处不有,矛盾无处不在,这是矛盾存在的普遍性原理。^o^
#80楼 得分:0回复于:2008-07-30 17:22:10
本人太菜,没怎么看懂啥意思,不过我总觉得lz写的这些东西,有点垃圾感。
#81楼 得分:0回复于:2008-07-30 18:06:02
引用 46 楼 dknewu 的回复:
顶,写的不错
的确设计过度会浪费生产力,简单设计更重要些。敏捷的思想对于程序员的真是太重要性了
#82楼 得分:0回复于:2008-07-30 18:15:51
没有维护大case吧 需求永远赶不上变化
也许某些小case确实最快速度变成钱 是最重要的
接口是为了壮大本身而存在的 所谓烂用 只是设计模式的变化而已 关键是看解决什么问题 是否要采用接口
  • zhpfeiqq用户头像
  • zhpfeiqq
  • (我只给论坛所有那些不给自己回帖)
  • 等 级:
#83楼 得分:0回复于:2008-07-30 18:21:07
通俗方面的看懂了,非常,以及特别懂
专业方面的。。。
明年吧
希望明年能懂
#84楼 得分:0回复于:2008-07-30 18:26:13
學習
  • tootto用户头像
  • tootto
  • (tootto)
  • 等 级:
#85楼 得分:0回复于:2008-07-30 19:13:29
引用 75 楼 wangchao1982 的回复:
1)软件开发引入“工程”的概念就是想要“流水线”的效果。既然是“流水线”,那么作为coder编码肯定更容易。而做“流水线”的人要麻烦很多了。“流水线”本身就意味着工人“干活效率高”、“好管理”、“责任明确”等等。
2)就某一个功能的实现来说,当然是“下黑手一次搞定”好,可现在的软件不是k行代码就能拿下的.总不能“一次编写,四处拷贝吧”(注:这是java用来诠释其跨平台特性的,貌似和原话不大一样。而不是讽刺其编码风格。恰恰是java的架构非常的出色。拿这个开个玩笑,无恶意)。尤其是遇到了逻辑有变化的时候……。所以“下黑手”的次数多了,体会到恶果后,往往会痛改前非,重新做人的
3)至于这最后一个,穿越吧:我已经研究三国好长时间了,估计也能混个皇帝当当^_^


其实hfy2006 老兄误会我的意思了。我举这个粗俗的比喻是为了说明:华丽的面向对象建模始终要“洗尽铅华”,与具体的物理表做一些别人看不到的事情。所以我觉得与其花大量的时间弄一个“完美反映现实对象”的实体类,然后在花大力气转换成“很直白”的物理表结构,还不如直接按照表结构来个强类型dataset的好。如果您愿意,完全可以在dataset里自定义类型,也可以做到“完美的描述现实对象”的地步。
我不想在这里讨论面向对象建模和面向数据库建模以及面向过程建模。第一:我对比较官方的观点体会不深;第二我觉得这仅仅是理念上的不同,正所谓条条大路通巴黎。坐飞机去美国固然比坐船去好,但坐飞机的要求是:如果你的护照上的照片中头发有100根,登机的时候您只有99根就会被拒载,估计您也不会再去坐飞机了。况且这几种建模方式也没有飞机和轮船那么大的区别。



对于只有几个表的数据库和页面的小玩具我不认为有建模的必要性,但在大型系统中对象建模和面向数据库建模是非常重要的。

对于一个有100多个表的数据库甚至数次建模也无法100%保证它能正常的实现所需功能,因为在系统完成前你无法测试它的准
确性。当你完成一个系统,却发现现有的数据库无法实现查询某些数据怎么办?推翻重来?这就是为什么世界上有70%以上IT
项目失败的原因。

软件工程之所以叫做工程,特别是基于商务的web system, 它的复杂在于业务逻辑,软硬件的安全策略,性能和可维护性。
一项软件工程的成功实施,并不在于开发者是否聪慧过人或者有几个软件英雄;而是在于三个重要角色,架构师,技术总监和DBA。

DBA重要性 == 架构师 > 技术总监

合格的架构师最主要的一项指标就是基本什么都精通。他规划出系统构架,主要就是建模和OOD,程序员可以很轻松的在代码层
上完成工作,并且无法超越架构之外。整个项目都沿架构呈良性开发。注意,沿架构开发并不是架构师说给你的,而是你的代码
只能沿架构走,否则无法写下去。比如你一直用button click + response.redirect("adfd.aspx")联接到另一个页
面;但在架构师的架构下,你只需用MyPageControl.Add(ANewPage)就实现了同样功能。又比如你用Session["Abc"]=
ABC来保存对象,页面多了,连自己都忘了哪个session是哪个了,因此架构师的架构不用你自己控制session,帮你封装好。
又如系统里有用户业务,交易业务,帐目业务等几十种业务逻辑,它们都需要实现分布式transaction,是不是每个逻辑都需
重复的transaction代码,还是OOD继承更有效率,还是SOA更容易维护?架构师来决定。程序员只需添加业务逻辑而不必关心
如何实现这种分布式处理,因此即使这种分布式处理方式改变,也不需修改任何业务逻辑代码,效率自然提高。这就是建模的重
要性之一。而且没有8-10年以上的开发经验,所谓的架构师只是吹出来的。

技术总监和DBA就不想说太多的。以前公司里一个高手,我问,如何将aspx页面表格生成EXCEL,WORD,PDF文件?过了一天,
他搞了一个FileGeneratorControl,可以直接放到页面里用了; 分页?他搞了一个PagerControl,放到页面里直接用了;
页面相册?他搞了一个PhotoViewControl,放到页面里直接用了, 还是AJAX的。

并不是为了‘面向对象’而面向对象,但感觉许多所谓高手是用无穷尽华丽的词藻,晦涩的概念来显示自己的‘高深技术’,其实
真正水平并不怎样。说软件行业是青春饭也是不正常的一种态度。如果喜欢技术,钻研下去,待学的东西是无穷尽的,前途也很
光明。没有对技术的透彻理解和系统架构的认识,只能永远停留为程序员。想做真正的技术总监还是架构师?
  • whycom用户头像
  • whycom
  • (六字)
  • 等 级:
#86楼 得分:0回复于:2008-07-30 20:48:11
引用楼主 wangchao1982 的帖子:
其实我觉得把题目换成“程序设计你向误区走了多远”。可是想想既然是发在.net社区了,还是改成目前的名字吧。
首先声明一点:我说的仅仅是个人的观点,不说憋得慌,您要是看的不爽,私下里骂两句的了。但是别说出来。这和意淫还是“真淫”一样。前者你是好人,后者你就是坏淫^_^
1)被用烂了的“接口”,其实interface本身只是用来规范子类的。当然我承认:随着时代的发展,我们会给事物赋予新的职责,但问题是你给事物赋予了太…

感觉lz思路混乱,1,2 然后就死了
#87楼 得分:0回复于:2008-07-30 22:38:06
写的好,lz继续加油哦
#88楼 得分:0回复于:2008-07-30 22:45:04
引用 4 楼 viena 的回复:
很久没有可讨论的话题了,推荐下,好让大家讨论~
#89楼 得分:0回复于:2008-07-31 00:40:09
引用 1 楼 stkmanfly 的回复:
顶,写得好
#90楼 得分:0回复于:2008-07-31 06:21:19
我比较同意"设计过度"这个词.....


继续...
对于ML的比喻也恰到好处...

继续...
#91楼 得分:0回复于:2008-07-31 07:19:18
不管丈夫多帅,不管妻子美的多么不可方物,他们晚上还是要做一些赤裸裸很丑陋的事情。
#92楼 得分:0回复于:2008-07-31 07:22:08
引用 84 楼 aaajedll 的回复:
學習
  • gc319用户头像
  • gc319
  • (gc319)
  • 等 级:
#93楼 得分:0回复于:2008-07-31 07:28:13
同意LZ观点,写得不错~
#94楼 得分:0回复于:2008-07-31 08:58:49
同意楼主的观点

程序设计的本质是为了满足一定的逻辑功能
许多人忘了这一点
为设计而设计了
#95楼 得分:0回复于:2008-07-31 09:00:07
呵呵
#96楼 得分:0回复于:2008-07-31 09:06:44
为设计而设计了
#97楼 得分:0回复于:2008-07-31 09:20:20
好贴顶个
  • pdsnet用户头像
  • pdsnet
  • (忍耐 克己)
  • 等 级:
#98楼 得分:0回复于:2008-07-31 09:23:30
看了 你们的帖子.感觉自己啥也没有学...
#99楼 得分:0回复于:2008-07-31 09:24:31
引用 32 楼 wangchao1982 的回复:
引用 24 楼 yl0002 的回复:

不是.net程序员。看到首页链接进来的。

只是把以前的一步走变成了两步走或者是n步走了
// 这根本不是松耦合,这是模块划分。跟耦不耦合一点关系没有。这是两个概念。


wangchao1982 的回复:
其实“耦合”是来自“电子电路大陆”的舶来品。
在那个大陆的定义大概是“ 耦合是指两个或两个以上的电路元件或电网络的输入与输出之间存在紧密配合与相互影响,并通过相互作用从一侧向另一侧传输能量的现象;概括的说耦合就是指两个实体相互依赖于对方的一个量度”。从这里我们可以认为:松耦合是目的,模块化分是实现松耦合的办法

是啊!
目的和办法本身就是两个概念嘛。
我们讨论两个目的是否冲突矛盾是正确的讨论。或者两种方法是否冲突矛盾也是正确的讨论。
但讨论的两个东西,一个是目的一个是方法。这两个东西是否冲突矛盾,这根本是概念混乱。这两种东西根本就不应该放在一起比较讨论。
  • ramboo2002用户头像
  • ramboo2002
  • (前方是绝路,希望在转弯!)
  • 等 级:
#100楼 得分:0回复于:2008-07-31 09:29:33
不懂啊?看来还有得学。
相关问题
《狼与狗的故事》
西藏隐瞒了什么:《藏地密码》(转载)4
【攒分贴】System.Object是所有类的几类么?
再继续攒分
咱也是攒分的~可咱也会放几分出来
怎么设计一款游戏:好人不削玩;越是坏的人越喜欢玩;玩了会变好人 ...
****** waterxx(我心如水)****** [转载] 几篇文章,希望大家把好的 ...