折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了

 

随着工作年龄逐渐增加,身边的重担也越来越多。以前可以在公司加班到晚上10点,现在不行了。以前可以通宵的找bug,翻阅资料,现在想这样也没有机会了。做软件逐渐成为工作的主要部分,而渐渐从生活的主角退化出来。自从生活中有了家庭,随时要为家人考虑,和他们度过有意义的时光。可是,家庭的责任重担全落在自己身上,工作不仅仅要完成,而且要有进步,这样才能维持现有的开支。在这样一个时代,你要静下心来安心专注工作,继续自己的研究,是非常不容易的。不断贬值的货币,永远不会跌的房价,令人担忧的医患关系,股市也终于跌破了2400点,每天都有刺激你的神经的事情在发生,每天都是奇迹般的一天,你能做的,就是坚持黎民的到来。因为马云说了,今天很残酷,明天很美好,很多人都会跌倒在迎接明天的路上。朋友,请坚持,再坚持。无论你是否可以得到一个笑到最后的光环,这不重要的,真的,重要的是你的家人因为有了你的努力,你的付出,他们可以高兴,可以快乐,可以无忧虑的生活着。

1 经过多年积累的通用类库Utility Class Library

.NET Framework已经是一套非常不错的类库,现在在互联网上搜索,.NET的API几乎就是标准的API。一说到打开文件,马上会找到很多StreamReader, File之类的例子供你学习参考,一提到反射,CreateInstance, BindingFlags这类的单词也会碰到很多,为了熟悉这一套类型库(FCL)的用法,至少花了二年的时间。大部分的时间还是在做项目,而不是拿着老板的工资,练习API的用法,所以我说的两年时间,还是很短的时间。把做过的项目中用到的公共模块抽取出来,命名为Common,Control,Component三个项目,然后把到统一的Utility解决方案中。经过反反复复的修改,维护,现在已经很方便,很好用。大部分的项目都会引用这三个项目,在使用过程中发现问题不段完善,而不是拷贝代码,这样积累起来,做项目越来越方便。

2  ORM 对象关系映射

在没有熟悉ORM之前,是用Enterprise Library+Code Smith的模板,搭建了一套快速应用开发的解决方案。熟练,稳定,快速生产代码和调试方便,这种状态维持了两年。接触到LLBL Gen的ORM框架后,照葫芦画瓢,学习它的查询语法,学习它如何对数据库进行操作,甚至到最后,干脆来分析一下它的源代码,于是有了几篇文章

LLBL Gen 3.x 源代码追踪与解析 认识框架结构

LLBL Gen 3.x 源代码追踪与解析 Type Converter 类型转换器

LLBL Gen 3.x 源代码追踪与解析 存储过程的执行

LLBL Gen 3.x 源代码追踪与解析 查询命令的追踪

LLBL Gen 3.x 源代码追踪与解析 验证Validation的原理和流程

依靠这股学习的冲劲,居然也完全接受和学会了ORM。反思过去,一直没有下定决心学习NHibernate,做项目一遇到问题就退缩了,改成原来的老套路,真有些后悔。引用老外的句子,Just Do it。不要为部分人的观念左右,比如NHibernate性能不好,或是难于维护映射关系,当使用NHibernate的经验达到一定程序时,你会找到办法来改善这些,可是,还没有学之前就怀疑这些,这不是治学的严谨态度。还好,还有一次机会,你可以应用到Entity Framework上面。想办法在你的项目中用上这些实用的技能吧,短暂的痛苦过后,换来的是长期不用加班,早回家和家人团聚,技术学习的付出,它的回报比率相当高。

3  Windows Forms开发框架, ASP.NETWeb开发框架

经过项目的积累,对于通用的数据输入窗体Entry Forms, 报表呈现窗体Report Form,查询窗体Query Form,大多都是相似的,只不过换了个数据库和表。于是,把这一块内容抽取出来,做成框架,独立维护,也逐形成了开发框架。比如,要对Northwinds数据库的Customer表进行读写,只需要继承于EntryForm,并设置它的TableName=”Customer”, 重写几个rountine般的代码,就完成了功能,速度的稳定性超级好。对于Web,一套Web Menu,Tab,TreeView构成基本的页面布局风格。对框架页面,Top显示Menu,Left显示Menu的明细项目,Right显示明细的操作页面,基本的页面框架就这些,再封装成JavaScript和.NET代码可以一句话调用的代码,配合集成权限判断,通讯等技术,Web开发的通用框架也初步形成。Web开发中麻烦的地方还是在页面布局,做到美观大方就可以了,不需要达到艺术的境界,还得考虑要脱离美工的依赖,这是迟早的事,你不可能回避。

4  代码生成 Code Generation

这项技术经过多年的锤炼,已经相当有积累。Visual Studio本身也是个代码生成器,帮助生成骨架代码,和MFC+Visual C++ 6一样,非常相似。再后来,自己写了个代码生成器,可以根据选择的数据库表,生成代码。再积累,又发现了Code Smith这个好东西,于是乎所有的代码生成都转换到Code Smith平台上来。有时候并不能总是有Code Smith可用,在小量的代码情况下,又有了运用Reflection+Code Dom生成代码的经验。Code Dom是一套程序代码,可同时生成VB和C#两套代码的好工具。再到后来,接触到ORM框架的代码生成,于是乎有了这几篇文章

优秀的基于模板的代码生成工具Template Studio

Template Studio 模板开发入门 Lpt templates Development

ORM框架-工具-产品开发之四 开发代码生成器 Template Studio Development (一)

ORM框架-工具-产品开发之四 开发代码生成器 Template Studio Development (二)

微软技术实践 智能提示的模板编辑器Template Studio 和 查询追踪器 LLBL Gen Profiler

如今基于模板的生成器T4又出现于江湖,虽然出身名门微软,似乎也没有太多的passion和精力考虑移植到T4。

5  报表 Crystal Report和Reporting Services

曾经在一个公司的软件部门做报表,做了一年多,每天的工作就是负责SELECT数据,然后Sub Total/Grand Total。这一年多的锻炼使我明白了计算机科学技术的基本要求,计算要正确。把数据值加起来求和,或是求平均值,这么看似简单的问题,付诸于实践中才会明白要做对很不容易。比如Decimal.Round方法的将小数值舍入到最接近的整数问题,和数据库中的round函数,这些问题加起来,需要折腾一段时间才能弄懂。没有多少捷径,多练习一下分组,求和或是用代码生成数据,再传递到报表中。最近做出来的报表平台,也是吸取了这两者的通用之处,以达到不同类型的报表,都可以在报表平台中运行,因为有的用户熟悉Crystal Report,有的用户熟悉Reporting Services,兼顾两者。

6 通讯组件 .NET Remoting,WCF

在项目中多次使用两项技术,最后就考虑到把它提炼出来,做成通用的公共代码,应用到新的项目中去。一旦考虑到提炼,这个过程就开始发生变化了。我会设计一个基础的模型项目,它会实现所有的需要的通讯功能,在实践应用中,则根据需要,把部分代码应用到项目中去。比如数据打包这个环节,就是把一些基础的数据,打包加密发送到指定的socket接口中,再把它还原成原始的数据,这个过程本身复杂,但是接口调用代码却很简单。还有Remoting技术,一个简单的接口方法ClientProxyFactory.CreateInstance<>泛型方法,就可以达到在项目中应用.NET Remoting技术。虽然WCF技术比较新,做技术的人员都喜欢追求新的,抛弃旧的,但我以为,.NET Remoting技术还是相当有价值的,至少我见到很多项目还是用这项技术。

请参考这篇文章: .NET Remoting过时了吗?为什么公司的项目还是选择用.NET Remoting,而不是WCF?

7  工作流 Workflow

当实现了一套自定义工作流系统后,才明白工作流活动的本质就是固化的代码片段,工作流是驱动这些活动实现业务。从rehost工作流设计器,到自定义Activity,集成SQL Server的持久化服务,传递业务实体,并且激活睡眠的工作流,自定义业务规则并求值,工作流就像是个玩具拼盘,你需要把写好的代码片段(Activity)添加到流程中,通过条件启动执行。时不时的还要用Reflector反编译,参考.NET Framework是如何实现IF-ELSE活动的,如何实现CodeActivity活动。工作流不是万能的钥匙,当有些流程只有等项目实施之后才能确定,或是依据不同的条件或部门,流程不一样,这样的流程考虑用工作流。而标准的流程,比如销售流程,报表单-> 销售单-->销售送货,这个流程是标准化的,不同的企业可以考虑不需要这里面的部分流程,但是我以为这一块就不需要用工作流来实现。

在学习工作流的自定义表达式的过程中,又学习到了Script.NET脚本语言,请参考这几篇文章

.NET 动态脚本语言Script.NET 入门指南 Quick Start

.NET 动态脚本语言Script.NET 开发指南

.NET 动态脚本语言Script.NET 应用举例

.NET 动态脚本语言Script.NET系列文章汇总 非常精彩的应用举例

掌握了这几项技术,工作越来越有信心,最重要是的很少加班,按时下班回家。有了充分的时间休息调整,为以后的发展打下基础。以前天昏地暗般的加班,天天加班,项目还是死了,现在做产品了,每天按时下班,项目还进展顺利。生活质量也有了明显的提高,引用别人的话,跟对人,做对事,整个世界就对了。

多年的.NET开发,也只学会了这么几招的更多相关文章

  1. 适应c++ 新特性 - 与我 - 多年传统方式开发(新特性参考微软标准:https://msdn.microsoft.com/zh-cn/library/hh279654.aspx)

    公司同事都在积极使用c++的新特性,并对其赞不绝口,而自己一直做着传统的c++开发方式,到底这些新特性如何,又是怎么提高开发效率的,我依然在疑问当中,从同事的说法和实际代码操练里,确实在减少代码量,集 ...

  2. 基于springboot微信公众号开发,几分钟学会微信自动回复

    效果图 1.准备工作 申请微信订阅号(个人只能申请订阅号,而且没什么功能,也无法认证),申请完毕,点击 开发=>基本配置,如下图: 服务器配置需要有 域名 80端口,我猜你没有,这里推荐个实用工 ...

  3. iOS开发小技巧--学会包装控件(有些view的位置由于代码或系统原因,位置或者尺寸不容易修改或者容易受外界影响)

    一.百思项目中遇到了两处这样的问题, 第一处 - 是评论界面的headerView,由于直接把自己搞的xib加载了放在了那里,xib中setFrame写了好多-=  +=,每次滚动的时候,会频繁调用x ...

  4. (一)keil4 MDK 开发环境下编写裸机程序 (参考杨铸 北航) (开发板只需要连接JLNK 就行了)

    首先用的是 keil4  位与   ( F:\ARM+LINUX\MDK-ARM_v4.10.exe  ) 1. 新建工程名project 为    led circle   ,放在  我的文档\ l ...

  5. 学会了这一招,距离Git大神不远了!

    大家好,今天我们来介绍git当中一项非常重要的功能--交互式工具 有的时候如果我们要处理的文件很多,使用git add .等操作会非常有隐患,因为很有可能我们一不小心就疏忽了一些内容.如果我们使用一个 ...

  6. [转载].NET Web开发技术(补充)

    大家在工作应该养成善于总结的习惯,总结你所学习.使用的技术,总结你所工作事项的比较好的地方,善于总结不断的沉淀优化自己.适时停下来总结下过去走过的路,才能让我们的未来走的更坚定.文章转自JamesLi ...

  7. 学会了 C 语言真的可以开发出很多东西吗?

    马里奥碰到花朵就变身. 什么是马里奥?一个装着 16 × 32 个小色块的长方形,其中一些色块填着颜色,另一些没有.什么是花?一个 16 × 16 的正方形.什么是「变身」?把马里奥这个方块里面代表衣 ...

  8. 10天学会phpWeChat——第十天:phpWeChat的会员注册、登录以及微信网页开发

    通过前面的系列教程,我们系统的讲解了phpWeChat从视图端.控制器端到模型端的操作流程:熟悉了phpWeChat的目录结构:掌握了视图端模板如何创建一个丰富的表单和模型端如何操作数据库.这一切都是 ...

  9. 一个WEB应用的开发流程

    转载:http://www.51testing.com/html/56/n-3721856.html 先说项目开发过程中团队人员的分工协作. 一.人员安排 毕业至今的大部分项目都是独立完成,虽然也有和 ...

随机推荐

  1. JavaEE的13种核心技术

    Java的大方向就是JavaEE,JavaEE不仅仅是socket编程,具体包括13中核心技术. JavaEE平台由一整套服务(Services).应用程序接口(APIs)和协议构成,它对开发基于We ...

  2. HASH暴力破解工具-Hashcat

    乌云网看到一篇文章讲述hashcat的使用简介(戳这里),对使用字典破解MD5内容 简单在kali上尝试了一下. (1)首先查看了下hashcat的帮助文档,简单截取了其中的部分常用说明. hashc ...

  3. js动态创建及移除div的方法

    本文实例讲述了js动态创建及移除div的方法.分享给大家供大家参考.具体实现方法如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  4. 函数重载二义性:error C2668: 'pow' : ambiguous call to overloaded function

    2013-07-08 14:42:45 当使用的函数时重载函数时,若编译器不能判断出是哪个函数,就会出现二义性,并给出报错信息. 问题描述: 在.cpp代码中用到pow函数,如下: long int ...

  5. PHP微信公众平台开发1 配置接口

    1.简介 微信公众平台是腾讯公司在微信的基础上新增的功能模块,通过这一平台,个人和企业都可以打造一个微信的公众号,并实现和特定群体的文字.图片.语音的全方位沟通.互动. 2.通讯机制 3.注册微信公众 ...

  6. 谈谈javascript插件的写法

    插件顾名思义就是能在一个页面多处使用, 各自按自己的参数配置运行, 并且相互不会冲突. 会写javascript插件是进阶js高级的必经之路, 也是自己所学知识的一个典型的综合运用. 如果你还没头绪, ...

  7. JSOI2014第三轮总结

    这次发挥的比上次好很多 毕竟这次的话好歹上100了,也不是特别丢人 但更主要的是,该得的分没有丢(不禁想到了R1的线段树和R2的网络流,可惜啊) 不会做的题目积极去骗分了(如D1T1,2和D2T1) ...

  8. linux下nagios的安装与部署

    一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...

  9. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...

  10. JPA--联合主键

    联合主键的一些知识: 使用@EmbeddedId标示联合主键: 在联合主键类中只是定义确定联合主键的字段即可: * 联合主键类的规则 * 1.必须包含一个无参的构造函数 * 2.必须实现序列化接口 * ...