我是一名杯具的.NET程序员。学校里学的稍微过得去的只有c语言。毕业的时候总算有家公司收留做嵌入式开发,工作3个月嵌入式部门转移到外地,我一直坚定的留下来,去了公司.NET部门学习.NET. 这是一个神奇的部门,他们中大部门有很多年的java开发经验,现在他们都在.NET门下,他们一边对java语言这么多年发展缓慢发出恨铁不成钢的感叹,同时又对在C#相对强大的功能的支持下.NET居然没多大建树而倍感奇怪,他们总是用java的思想来架构.NET的程序, 跟着他们俩年我倒是没觉得有什么奇怪,因为我之前只会c语言。后来,我辞职去了其他公司,碰到不少.NET程序员,就有点明白他们的感叹了,也是郁闷与纠结之开始。 很多.NET程序员OO思想很薄弱,以B/S模式来说,他们的三层架构是这样的,他们的项目中会有三个类库工程,而且名字都取的差不多,一个Xxx.Model, 一个Xxx.DAL, 一个Xxx.BAL. Model层就是数据库表的映射,字段与属性一一对应。 DAL层就是大段大段的拼接sql字串的逻辑,因为是拼接逻辑代码中都是用string=’ ’,而不是string.empty, 到处都是str= str1 + str1,很少用StringBuilder。BLL层就是大段大段根据业务生成字串提供给DAL层拼接成sql,不好拼接的就用视图,复杂一点用存储过程,在复杂一点,视图加数据库自定义函数之纠结,再再复杂,视图,存储过程,自定义函数与DAL层sql之纠结至死。 最后,结果就是所有的类都只有方法,没有属性,很多方法都是向下层委,很多方法都可以是static的,甚至可以全是static的,正是因为没有属性,他们的类可以轻松的用move method进行重构(^_^ ,汗,调侃),因为任何方法放在任何类里不会出错 你要是和他说你的代码不OO,就有两种典型的情况,第一种:我的代码怎么不OO了,你看这么多类,你看这么多层,我怎么不OO了,我用的纯OO的C#哦,怎么不OO. 第二种:OO也不能解决所有问题,这三层架构是经典架构啊,是OO的改进,微软推荐的做法。对于第一种,我基本保持距离,那是OO门外汉,搞不好还是编程门外汉。对于第二种,用C#这种纯OO语言,基于.net framework这样纯OO架构的框架做开发,不用面向对象的思想来设计程序架构你打算什么时候用啊?用C++的人不利用面向对象的思想来设计他的代码,还用C++干什么,用C多直接。究其原因是.NET程序员不知道三层架构某种程度上和OO是有冲突地,属性和操作分离违背了类的基本定义。虽然三层架构对java来说也是一样有矛盾的,但人java至少还知道这个问题啊,所以有贫血模型,充血模型,领域模型,ORM之类的试图解决这样的冲突。还有中观点更少数更让人纠结,说程序员只要是利用OO研究的成果,按这样的意思,用纯对象语言编写过程式的程序,利用面向对象的.net framework也行啊?这不有病吗? .NET程序员大部门不知道依赖注入,不知道面向方面(切面)编程,所以给他们介绍Spring.net, ObjectBuilder,他们就难以接受,拒绝的理由就让我郁闷,有用框架啊,有多写好多类,这么多配置啊,对性能有影响吧。所以他们的代码中,”函数三段论”在每个函数都有,这三段就是:执行逻辑,写日志, 处理异常,重复的三段论看着很纠结。 最后,就算是微软企业库中的DataAccess Block他们也很难接受,因为他们钟爱的是SQLHelper。 每次有项目来,在我还在规划有什么类,有什么属性和操作的时候,很多.NET程序员数据库中表都已经建好了。我并不反对先建数据库,不过数据库与对象如何衔接就得要先考虑了。但是他们并不了解关系模型与对象模型之间的区别。所以再建好了数据库之后,就开始建个模型。建完了总得要操作数据库吧,所以再建个DAL,但是现在什么业务逻辑都没有,所以DAL层就开始组合下sql语句的拼接逻辑,然后上层就可以提供字串给DAL拼凑了,上层是什么,BLL啊,最终,把整个程序扫一遍你就发现,编程就是sql字串到处流动并在流动中由短变长,由简单变复杂。要不就是sql写在存储过程中,程序是存储过程执行的条件到处流动。如此郁闷之纠结,你一眼看上去还以为是个字串或者文本处理程序。 总结,都已经到了后OO时代了,.很多net程序员依然还以青铜时代的观念和方式使用热兵器

转一篇好文,虽然争议颇多,还是觉得有必要转一下看看 来自博客园相关推荐

  1. 祝贺Terrylee博客园Post达到100篇

    随着<小议.NET中的对象拷贝>一文的发表,Terrylee在博客园的Post总数达到了100篇.从上博客园第一天开始,就喜欢上这里了,喜欢这里的文章,喜欢这里的氛围.申请博客园的帐号10 ...

  2. 博客园美化教程大集合----极致个性化你的专属博客(超详细,看这篇就够了)...

    阅读目录: 1. 前言 2. 定制自己的博客 00. 美化整体效果 01. 准备工作 02. 自定义个性化导航栏 03. 添加顶部博主信息 04. 添加顶部滚动公告 05. 为博客文章添加目录导航 0 ...

  3. 『Python开发实战菜鸟教程』实战篇:爬虫快速入门——统计分析CSDN与博客园博客阅读数据

    文章目录 0x01:引子 首先介绍一下网络爬虫是什么,可以用来做什么? 这里简单探讨一下网络爬虫的合法性 正式进入爬虫实战前,需要我们了解下网页结构 HTML CSS JScript 写一个简单的 H ...

  4. 潜移默化学会WPF(绚丽篇)--热烈欢迎RadioButton,改造成功,改造成ImageButton,新版导航 - AYUI框架 - 博客园...

    潜移默化学会WPF(绚丽篇)--热烈欢迎RadioButton,改造成功,改造成ImageButton,新版导航 - AYUI框架 - 博客园 原文:潜移默化学会WPF(绚丽篇)--热烈欢迎Radio ...

  5. python博客项目评论_Python 爬虫入门——小项目实战(自动私信博客园某篇博客下的评论人,随机发送一条笑话,完整代码在博文最后)...

    之前写的都是针对爬虫过程中遇到问题的解决方案,没怎么涉及到实际案例.这次,就以博客园为主题,写一个自动私信博客下的评论人员(在本篇留下的评论的同学也会被自动私信,如果不想被私信,同时又有问题,请私信我 ...

  6. 【FastAPI 学习十二】定时任务篇 (移步博客园或个人网站 无广告,界面清爽整洁)

    声明 目前个人放弃CSDN平台,文章只发布于个人网站和博客园 博客园地址 [FastAPI 学习十二]定时任务篇

  7. Common Lisp语言快速入门 - Henry Read - 博客园 好文

    Common Lisp语言快速入门 - Henry Read - 博客园 好文 Common Lisp语言快速入门 - Henry Read - 博客园 posted on 2013-10-03 14 ...

  8. 简洁文艺风博客园CSS定制——圆角蓝文艺字体

    简洁文艺风博客园CSS定制--圆角蓝文艺字体 今天入驻博客园,自己做了下页面的CSS 瞬间变得舒服多了 哈哈 直接上代码 1 /* Minification failed. Returning unm ...

  9. java = 优化_Java9系列第7篇:Java.util.Optional优化与增强 - 字母哥博客 - 博客园

    我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...

最新文章

  1. opencv converTO()函数 转换图像的数据类型不改变通道数,注意与cvtColor()改变颜色空间/彩色空间/色彩空间函数区分
  2. 全局变量、成员变量、类变量、静态变量、实例变量、局部变量的定义与区别
  3. 全国计算机等级考试题库二级C操作题100套(第97套)
  4. android查看wifi是否双频,Android判断wifi是5G还是2.4G
  5. Java 8的烹调方式– Lambda项目
  6. python线程等待_python3 中 Event.wait 多线程等待
  7. gdb 打印vector 等stl数据
  8. 链表的基本应用二及总结
  9. 分布式应用中的一致性协议
  10. 汽车+辐射测试软件,汽车EMC辐射发射的一些所见所闻和思考
  11. HBase权威指南【中文版】
  12. Python爬虫--爬取电影天堂网站电影下载地址
  13. 知道华为HMS ML Kit文本识别、银行卡识别、通用卡证识别、身份证识别的区别吗?深度好文教你区分
  14. Android 仿微信实现语音聊天功能
  15. 解决Vue history模式下使用嵌套路由打包部署后刷新页面为空白页
  16. 聊聊CentOS停止维护,要我说这是件大好事!
  17. 给自己的网站添加在线客服代码
  18. 【想法】滴滴更新迭代功能
  19. 一首特别适合冥想的音乐
  20. 追悼伟大的科学家史蒂芬·霍金,他留下的预言能实现吗 ?

热门文章

  1. asp.net core 教程(六)-中间件
  2. 在RH6.5上安装sublime3 build3103步骤
  3. Autodesk View and Data API二次开发学习指南
  4. 解决python中TypeError: not enough arguments for format stringj
  5. scorm课件学习状态
  6. Rational 中 DataPool 的介绍与实际应用
  7. Ruby on Rails 和 J2EE:两者能否共存?
  8. Java 8 Features Tutorial – The ULTIMATE Guide
  9. 容器编排技术 -- Kubernetes Pod概述
  10. 使用spring-loaded实现应用热部署