“三层架构,够不够”

予沁安 2012-06-06 01:12:27

原文: “三层架构,够不够” 引言 ----- 我技术作文的方向

反观如今的博客也好,技术文章也好,多是某一方面的技术细节,我个人不太喜欢这个方向,觉得意义不大。这些确实都是知识,我也十分尊重和感谢这些作者的贡献,因为我碰到问题也经常搜索这样的技术文章而得到了帮助。

可是,这与软件公司的实际工作总有个巨大的鸿沟,经常也看到很多人也类似的困惑,看了众多技术文章后,依然迷茫?更有人把这些困惑诉诸于文字。

商业软件注重的是技能,是所有技能的大整合,而不是技术点的罗列。把一个C#语言特性讲得再多再深,也只是MSDN帮助的一个翻版,也永远成不了商业软件。相反,讲解技术的代码示例,几乎都是商业软件的反面教材。



伟大的作家都是阅读了大量作品,从中汲取营养,才逐步成长,最后成为大家。可是,讽刺的是, 同是作为思维作品的软件设计,却较少有这种机会,各个公司都是互相封闭,甚至极其仇视代码分享的想法,美其名,版权。而开源的兴起,可以说,这个是最大的益处。只是,大多数开源者,本身都没有意识到。所以,发布是,仍然过于注重,软件的功能,而不是设计。

这里,不得不提一下源代码管理软件Git,与SVN和TFS相比,Git最大的特点就是就是业务域模型设计非常精彩,后两个都是基于文件的版本控制,而Git是基于整个代码树的版本控制。什么是DDD看看Git的业务模型,会有不同感想。诚然,Git的终端功能和用户使用上还有所欠缺,那只是时间的问题。相比之下,TFS和SVN虽然提供的最终功能很好,但由于底层设计的缺陷,这些功能如补丁一样,没能和业务模型融合到一起,终究会支离破碎。我很看好Git的将来。


目前,我正在组建团队,开发实际项目。并逐渐提炼完成了自己的一套框架。在这个过程中,融合消化整合了大量的技能。
现在,我想做的是个反向工程,解构这套框架,把设计思想,整合过程又一步步拆散,呈现给受众。这也是我之后技术作文的方向。这样的方式内容,不知诸位有何看法?



这里是技能的整合几个例子:

三层架构的需要解构依赖关系(表现层依赖于业务层,业务层依赖于数据层),才能发挥更好的作用。如:用Repository隔离业务层和数据层,Repository的接口定义属于业务层层,而实现却属于数据层;用DTO(ASP.Net MVC称为View Model)来隔离表现层和业务层。然而,增加的复杂度又如何解决呢?
为了实现测试驱动(TDD),需要利用依赖注入(DI)来隔离类与类之间的直接联系,还要用AutoMock来提高写测试代码的效率,最后,进一步用用户故事的语法来组织测试代码,提高代码的可读性。遗留的问题是具体代码如何,有哪些已有工具可利用(nUnit, Machine Specification, Ninject, Resharper等等) ?
业务域驱动(DDD)与ORM工具Fluent nHibernate的一起使用,大大提高效率,注意是Fluent,几乎可纵做到零SQL, 零数据库表定义。



可以看到,各种概念的交互,融合,最终有机的成为一个整体。
...全文
657 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
予沁安 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 的回复:]

汗。。。 任何话都有背景条件 其实楼主说的 还是挺有道理的啊。。。
[/Quote]
谢谢(握手)
qiushuangju1 2012-06-13
  • 打赏
  • 举报
回复
汗。。。 任何话都有背景条件 其实楼主说的 还是挺有道理的啊。。。
予沁安 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 的回复:]

晕 我要扶下墙!
[/Quote]
:)
予沁安 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 的回复:]

看不懂,你是准备比较git和tis还是说三层架构呢?
[/Quote]
我是说,写技术文章的方向。 Git是我目前使用的工具之一。
光是三层或者Git仍然不足以解决实际问题。
这只是一个序言,请看我另外一篇文章: 三层架构,够不够---DDD眼中的三层(附C#源代码实现)
也许能回答你的疑惑。
雪影Me 2012-06-13
  • 打赏
  • 举报
回复
看不懂,你是准备比较git和tis还是说三层架构呢?
寂小寞 2012-06-13
  • 打赏
  • 举报
回复
三层确实是个好东西 用下来会觉得很舒服 不晓得你说的这么多是神马意思 三层攻不够? 其实啊 够 !!遇见问题了解决下 还是挺好的呢!
予沁安 2012-06-13
  • 打赏
  • 举报
回复
另外,一点背景知识:
1. Git是Linux创始人,为Linux本身的开发,而创建的代码管理器, 我臆想,再大的一个系统,不会比操作系统还大把. 至少,它是在实际中磨练出来的产品.
2.微软的开源网站,前不久,也不得不宣布支持Git.
予沁安 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

git比svn晚了一代,说到底,git是开发流程去中心化、敏捷开发流行起来的产物。因此,与其说看好git,不如说git代表的开发方法会越来越流行。

作为source control,git确实有比tfs过人之处,但是tfs并非单一的版本控制,因此两者也没有什么可比性。
[/Quote]
你说的是,关于Git分布式的特性吧.
其实,我觉得那个到是其次. 我看中的是,Git的底层重新设计. 比如,SVN做分支,需要把所有的文件拷贝过来,而Git只是做一个标记. 正如它宣称的, 分支(branch)和Tag没有本质区别.

参考这篇文章: Git From Bottom Up
gzw13999 2012-06-12
  • 打赏
  • 举报
回复
什么玩意。。。。乱七八糟的。

很多软件用汇编写的不一样很好的再维护吗?
裸奔的蜗牛 2012-06-12
  • 打赏
  • 举报
回复
晕 我要扶下墙!
予沁安 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 的回复:]

你觉得 Java 那样满篇的接口抽象类可读性高吗?
[/Quote]
sanguorewrite 2012-06-12
  • 打赏
  • 举报
回复
你觉得 Java 那样满篇的接口抽象类可读性高吗?
予沁安 2012-06-11
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 的回复:]我觉得你可能误会楼主意思了,他其实就是想介绍一些心得而已,但是貌似讲的七零八落的。
[/Quote]
谢谢
ktei2008 2012-06-10
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 的回复:]

引用 31 楼 的回复:
引用 30 楼 的回复:
合着你在代表整个开发语言的发展? 就 CSDN 那个月月吵架的排行榜,拼命搞设计模式的编程语言能排到多少百分比? 在升还是在跌? 语言的发展和实物的发展一样,都是越来越人性化,大搞设计模式只会让编程变得越来越麻烦,形式主义就是这样来的。我指的设计模式可不是OO的思想,你别往这上套。还是那句话,你觉得 Java 那样满篇的接口抽象类可读性高……
[/Quote]

我觉得你可能误会楼主意思了,他其实就是想介绍一些心得而已,但是貌似讲的七零八落的。
予沁安 2012-06-09
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 的回复:]

首先,程序是给机器运行的,不是给人看的,将不同功能的代码段隔离开是有好处,但是过份强调设计模式,像 Java 那样,满篇接口抽象,运行效率低下,占用资源巨大,代码修改繁琐,这样的垃圾程序要它有何用
[/Quote]
呣,编译后的代码是给,机器运行的,编译前的代码是给人看的.
从汇编开始,行业的努力, 就一直朝可读性的方向发展, 而且比重越来越大.
__天涯寻梦 2012-06-09
  • 打赏
  • 举报
回复
首先,程序是给机器运行的,不是给人看的,将不同功能的代码段隔离开是有好处,但是过份强调设计模式,像 Java 那样,满篇接口抽象,运行效率低下,占用资源巨大,代码修改繁琐,这样的垃圾程序要它有何用
予沁安 2012-06-09
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

有那么复杂吗 感觉三层下来就是 俩好处
1就是 为了思路清晰 写大项目一样能上手
2就是为了团队之间合作更方便 代码写的更规范

硬来个三 那就是 数据访问和 窗体功能代码连接不那么紧密
[/Quote]

杀鸡不用牛刀. 技术和工具只用在需要的地方.
如果,只是出去买菜,算算找多少钱,连计算机也不要用,更麻烦.
予沁安 2012-06-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
代码可读性 vs 代码效率
(我以前的老总跟我们说过,当年他在硬件上写程序,只有几k的空间可以用)
他说首先考虑的是能不能写小 算法能不能精简,
代码在可读,效率再高 没有足够的空间运行 那都是浮云
(举例子有点偏激 所以看下面的)
考虑东西不是非得要这样这样才是对的。

对面对象很好 但面向过程也可以用(小项目或者一些小工具可以用)
领域驱动很好 非领域驱动(小项目或者一些小工具可以用(比如邮件群发...))

套用《Head First设计模式》上的一句话

[/Quote]
是的, 任何论断都有个背景环境. 我这里的前提:行业软件开发,大系统,至少8G内存.

[Quote]

但你写个Hello World程序的时候都用设计模式去写
那就说明你有病了
[/Quote]
同样,你也犯了绝对化的毛病.如果,开发iPhone (其实,应该说基于Cocoa),哪怕写Hello World,也被强迫使用MVC.
__天涯寻梦 2012-06-09
  • 打赏
  • 举报
回复
一篇回复还加那么多空行,多占那么区域,生怕人家看不明白你想说什么?
__天涯寻梦 2012-06-09
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 的回复:]
引用 30 楼 的回复:
合着你在代表整个开发语言的发展? 就 CSDN 那个月月吵架的排行榜,拼命搞设计模式的编程语言能排到多少百分比? 在升还是在跌? 语言的发展和实物的发展一样,都是越来越人性化,大搞设计模式只会让编程变得越来越麻烦,形式主义就是这样来的。我指的设计模式可不是OO的思想,你别往这上套。还是那句话,你觉得 Java 那样满篇的接口抽象类可读性高吗,是开发语言的发展方向吗?
……
[/Quote]
别东拉西扯的,你就回答 Java 那种模式可读性高吗?
我哪句话说我倾向效率了,我哪句话体现了我去追求那1块钱的得失了? 都是你脑补出来的。
我要是有一千万,我绝不会花1分钱来给自己找不自在,而你会,你喜欢各种形式上的东西,满篇接口抽象类,看起来多高端,跟人讲解时多有面子啊,不搞这些哪好意思去带你的团,服你众呐。
这关微软什么事,你要找理由也该去找 sun ,Java 那才是暴发户的方式,运行个小程序都讲那么大的排场,和我们的煤老板多像啊。
加载更多回复(26)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧