我的服装DRP之开发感悟

先向各位拜个晚年。

今年过年期间都在想DRP的事,很多朋友也联系我,讨论技术问题的、谋求合作的、分析行业前景的、让我提供源码和数据库的都有。再次谢谢朋友们的关心。目前来说,在修改系统bug的同时,我打算重新找一份工作,毕竟在能力转换成财富之前,生活还是要继续。

Winform or WPF:

今天在QQ上和一位山东的朋友聊了会,其中聊到BS和CS的老生常谈,说道有些功能BS不好实现。我认为两个事物孰优孰劣需要放在特定场景中才能比较,关于这两者的区别谷歌一下即可,我就不分析了,徒惹板砖。其实同样是CS,具体的UI框架也包括很多,在.NET中主要就是winform和wpf,前几天就看到一篇文章关于开发WPF的一些感想,作者提出:为什么到现在都没有客户端的WPF系统?在如今WEB化和移动化大行其道的情况下,windows桌面程序开发的价值又有几何?说实话,我也心存同这位博主一样的疑虑。对于这两个问题,每个人都有自己的看法。我认为相似的几个技术有个先来后到的“优先级”,试想,假如wpf和winform的出现时间换一下,再扩展一下思路,假如当初C#和Java这两种语言同时出现在大伙面前,假如HTML遵循XAML的语法……世界会是什么样子?所谓的市场占有率通常并不能比较出技术间的优劣(没有贬低谁的意思),只能说声:抱歉,哥比你先到。

单纯对于行业软件而言,在winform和wpf中选择,我偏向于wpf。如果非得选择winform也可以,不过最好给我提供一个winform实现框架,这个框架需要包含以下三点功能:

  1. 支持源数据更改通知反馈;
  2. 支持路由的Command;
  3. 易用的界面设计功能 

架构设计:

工作多年,接触过许多编码界的朋友,其中一些高手对OO的理解可谓已入化境,没事就抽个接口玩玩,调试他们程序的时候永远只能看到黄色小箭头在浩瀚的代码海面上跳跃,要想一探究竟,对我这种菜鸟来说只有淹死的份。记得我刚参加工作那会,参与开发一个简单的会议管理软件,项目经理给我展示项目架构,说这是当时最流行的架构设计。我猛地一瞅,顿时有种膜拜的赶脚——那庞大的项目,那众多的类库,那抽象,那反射,那配置,一看就很高级哟,我估计没十年八年是理解不了的,差点还动了转行的念头。项目经理意味深长地拍着我的肩膀,说慢慢来,会明白的。可是我最终也没能明白。

我不明白的是为什么数据层要有个接口,他们跟我说为了支持多数据库,虽然现在只用到SqlServer,保不齐百年之后要切换到Oracle;我不明白的是为什么业务逻辑层也要接口,他们跟我说可能客户会经常改变需求,虽然需求改变常常导致改变接口本身,不过这是OO的原则,你纳闷说明你理解的还不够深;我不明白的是为什么要用工厂方法、抽象工厂方法,他们说这叫统一标准,虽然大部分接口都没有第二个实现类;我不明白的是为什么这看似高级的架构没有给开发者和用户带来良好的体验,他们说加班还不够;……

一年以后,我离开我的第一家公司。跟同事们告别的时候,我们都看到了各自心中的郁闷,这是长期作战的结果,而敌人是由我们自己制造出来的。

我还碰到过另一个极端,不是说三层么,做啥项目都只建三个类库,对应数据层、逻辑层、UI层,最多加个实体类库。你想要个通用类库,门都没有。

后来,我把QQ签名改成“设计,是一种美,就像盖大楼,如果每座房屋都是千篇一律,那么也就不存在架构师了。”,这是从某博文上复制下来的。虽然这句话并非那篇文章的重点,不过当时看到这句话的时候,我感觉到了共鸣,压抑已久的心灵终于得到解放,忍不住出门打了三斤白酒站在阳台就喝了起来。

开发效率:

原本我打算连着生产系统一块开发,后来想说先把分销稳定了再说。开发这套系统,至今经历了5个半月。想起当初我的4人团队一个半拉子系统都要搞几年,我惊异于自己的效率。本系统完全从0开始,所采用的框架也非我原本熟悉的,只不过在业务需求上借鉴了行业经验,但也增加了很多实用功能。若一个普通团队开发,我估计要在相同时间内完成几乎不可能(何谓普通?并不大的软件公司的项目团队)。也许你不会赞同我的观点,那是你没有经历过文档流于形式的“赶鸭子上架开发模式”。

这套系统首先大规模的系统重构就有4次,这对我来说,也就咬咬牙的事,但对一个团队意味着繁琐的沟通、重叠工作的分配、不满情绪的滋生、冒出的各种bug、疲劳的重复测试、责任问题、文档更新等等,以及上述负面效应的多次“迭代”。

对于分配给A的任务,你不能保证A完全按照你的想法来,即使功能实现了,你也得检查看看有么有影响运行效率的语句,特别是对能力不足的成员,尤其提心吊胆。在实现难点或功能点较多的模块,通常难以在一开始就明确知道采用何种方式,往往花四天时间构思,两天时间编码,在编码过程中会重构个好几次,这需要编码者有足够胜任该项任务的能力(而一个普通团队中很难有几个相当优秀的程序员,而技术主管又不能事事亲力亲为),有时候还得其它模块配合,这又牵扯出上述情况了。当某处需求实现了,尽管代码看上去并不十分完美,为了“顾全大局”,也就这样吧,甚至优良代码要向劣质代码让步。

若有原成员离开或新成员加入,稀奇古怪的编码风格会让相关成员抓狂,编码风格可以强制规范,但代码逻辑时不常地出现理解偏差。当系统终于成型,呈现出来的很可能是个臃肿的胖子,因为每个开发人员按自己的需求写的帮助类代码,很多都是重复的,更不用说隐藏在各处的私有可抽离代码。这无疑增加了后期维护的成本。

团队开发过程中,有规范的文档会好很多,此时文档就相当于整个团队的大脑负责信息存储的存储区,而成员间的沟通赋予了新的含义,那就是团队思想的源泉。不过我并不认为开发文档(如详设)在一开始就必须存在,而是在项目架构等基本上稳定了,再着手编写。说回来,现在有多少公司的文档作为其原本的意义而存在呢? 

创业(?): 

老实说我这还谈不上创业二字,更多的是区别于正常上班的另一种工作方式。若以后能靠这赚点钱更好,否则就当提升下自己的开发能力。我并非做事目的性明确的人,所做的事只是我认为做了并无害处。大多数人都有个创业梦,特别是在IT界,真正去做的寥寥无几;创业并且小有成就的,寥寥无几;创业并且大展宏图的,寥寥无几。这些都不是我的目的,我的目的很简单,多赚点钱,然后做我真正喜欢做的事。 

我一直以为我不是能坚持长久的人,特别是独自一人完成一个产品,特别是在一个结婚生子都显略晚的年纪。车子卖了,存款花了,即使通情达理的父母不会埋怨,即使有热心的兄弟帮着给我打气,却在无形中加重了我心中的负担。毕竟代码的世界里我能依靠的只有自己,每天对着显示器敲着一个个代码,偶尔想到迷雾重重的前景,我就想说:算了吧,安耽地找份工作也有不错的收入,何必逞强呢,一个人难道能比一个团队开发出更好的作品吗。孩提时代伟大的理想,此刻变成对社会几乎无用的“赚钱”二字,百年之后,谁又记得我呢?有时思想如同不小心打开的潘多拉魔盒,负面的情绪倾泻而出,让人极为沮丧。 

令我欣慰的是,我完成了计划的第一步。没有半途而废并最终完成一个可用的产品,感觉挺好。

最后贴个系统截图以供观赏,截图中的数据为测试数据,图片摘自互联网,所示功能使用MVVM模式开发,若采用Winform,没有引入特殊扩展框架的话,估计至少三倍工作量还不一定能完成吧。

转载请注明本文出处:http://www.cnblogs.com/newton/archive/2013/01/20/2868272.html

转载于:https://www.cnblogs.com/newton/archive/2013/02/22/2868272.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS开发那些事-iOS常用设计模式–委托模式案例实现

书接上回,应用案例 我们以UITextFieldDelegate为例来说明一下委托的使用。 UITextFieldDelegate是控件UITextField的 委托,控件的委托主要负责响应控件事件或控制其他对象。除了UITextField,WebView、UITableView等控件也有相应的委托对象。 …

Windows API 逐个逐个学MessageBox(5) 遍历驱动器并获取驱动器属性 GetLogicalDriveStrings、GetDriveTypeA...

首先还是贴代码 VC Code: /* *************************************《精通Windows API》 * 示例代码* GetVolumeInfo.c* 4.2.1 遍历驱动器并获取驱动器属性**************************************//* 头文件 */ #include <windows.h> #include <stdlib.h> #i…

linux下搭建nagios监控

一、什么是nagios 1.nagios 简介 Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务&#xff0c;同时提供异常通知功能等。Nagios可运行在Linux/Unix平台之上&#xff0c;同时提供一个可选的基于浏览器的WEB界面以方便系统管理人…

zabbix的安装

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix由2部分构成&#xff0c;zabbixserver与可选组件zabbix agent。 一、Zabbix简介 1.1Zabbix简介   Zabbix是一个企业级的开源分布式监控解决方案&…

对fgets的理解1

摘自《linux程序设计 中文第四版》第94页。 转载于:https://www.cnblogs.com/pengdonglin137/archive/2013/03/10/2952421.html

普通用户的sudo权限,禁止root用户登录

假如增加用户zhangsan的sudo权限。 修改/etc/sudoers文件&#xff0c;在root下增加如下一行。 增加用户名zhangsan&#xff1a; 禁止root用户登录&#xff1a; 修改/etc/ssh/sshd_config文件&#xff0c; 将 PermitRootLogin前的#号去掉&#xff0c;yes改为no&#xff0c;重启n…

什么是 MVC ?

ylbtech-Architecture: MVCASP.NET中 MVC。 1.A,概念 MVC是一种目前广泛流行的软件设计模式&#xff0c;MVC英文即Model-View-Controller&#xff0c;即把一个应用的输入、处理、输出 流程按照Model、View、Controller的方式进行分离&#xff0c;这样一个应用被分成三 个层——…

zabbix邮件报警

原文出自http://www.iyunv.com/thread-22904-1-1.html 首先web端的配置顺序如下&#xff1a; 创建用户媒介-->创建用户组和用户-->针对trigger&#xff08;触发器&#xff09;添加报警动作&#xff0c;设置邮件发送用户及媒介1. 创建用户媒介创建用户媒介-->创建用户…

zabbix的入门到精通之zabbix的触发器Trigger

第1章 Trigger 1.1 创建一个trigger选择&#xff1a;ConfigurationHost双击: Trigger双击:Create Trigger(位置在右上角)后图下图所示NameTrigger的名字Expression添加Trigger表达式&#xff0c;双击add后添加Multiple PROBLEM events generationDescription对trigger的描述URL…

Zabbix 探索主机 “Discovery” 自动发现主机 详细图文教程

Zabbix 自动发现&#xff08;Discovery&#xff09;功能使用随着 监控 主机不断增多&#xff0c;有的时候需要添加一批机器&#xff0c;特别是刚用zabbix的童鞋 需要将公司的所有服务器添加到zabbix&#xff0c;如果使用传统办法去单个添加设备、分组、项目、图像…..结果应该是…

图解如何制作苹果OS X系统ISO光盘

当我们从网上下载的原版苹果系统是DMG格式的&#xff0c;要做系统引导必须做成ISO才能做系统盘&#xff0c;所以本文介绍在Windows7下如何来制作苹果系统光盘&#xff0c;各位黑苹果的童鞋要注意了。 准备以下三个东西。 1、苹果OS10.8种子下载 OS X 10.8 正式版种子.torrent 2…

zabbix的b编译安装

原文出自&#xff1a;http://www.ttlsa.com/zabbix/install-zabbix-on-linux-5-ttlsa/ 在了解《zabbix硬件、软件需求》之后&#xff0c;在你心里应该有备选的机器。今天开始安装zabbix。zabbix需要LNMP或者LAMP环境。环境的搭建不在本章范围内。 LNMP环境配置 Linux安装&#…

rsync+inotify实现服务器之间文件实时同步

原文转自http://dl528888.blog.51cto.com/2382721/771533/ 之前做了“ssh信任与scp自动传输脚本”的技术文档&#xff0c;此方案是作为公司里备份的方法&#xff0c;但在实际的运行中&#xff0c;由于主服务器在给备份服务器传输的时候&#xff0c;我们的主服务器需要备份的文件…

zabbix监控特定进程

原文出自http://www.2cto.com/os/201405/302249.html 由于一些服务器上跑着一些重要程序&#xff0c;需要对它们进行监控&#xff0c;公司用的是zabbix监控&#xff0c;之前都是在zabbix中添加自定义脚本对特定程序进行监控&#xff0c;最近看了zabbix的官方文档&#xff0c;发…

OMA 设备管理的通知发起的会话OMA Device Management Notification Initiated Session

介绍 一些设备不能持续侦听是否有需要连接的服务器。有的设备基于安全考虑不希望“开放一个端口”&#xff08;比如主动接受连接&#xff09;。无论如何&#xff0c;大多数设备可以接受未经请求的信息&#xff0c;有时也叫做“通知”。比如一些手持设备可以接收SMS文本短信息。…

【zabbix个性化监控之一】TCP连接数

一、在被监控端上设置 主要命令&#xff1a; netstat -an | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}1netstat -an | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}输出内容&#xff1a; TIME_WAIT 100 CLOSE_WAIT 5 FIN_WAIT1 6 ESTABLISHED 161 S…

CentOS 6.4下PXE+Kickstart无人值守安装操作系统

原文出自http://http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html 一、简介 1.1 什么是PXE PXE(Pre-boot Execution Environment&#xff0c;预启动执行环境)是由Intel公司开发的最新技术&#xff0c;工作于Client/Server的网络模式&#xff0c;支持…

CSS3属性box-shadow使用教程

CSS3的box-shadow属性可以让我们轻松实现图层阴影效果。我们来实战详解一下这个属性。 1. box-shadow属性的浏览器兼容性 先来看一个这个属性的浏览器兼容性: Opera: 不知道是从哪个版本开始支持的&#xff0c;我在发这篇文章测试的时候&#xff0c;正好更新了Opera到最新的10.…

mysql 5.7.13 安装配置方法图文教程(linux)

原文出自&#xff1a;http://www.jb51.net/article/87160.htm 1系统约定 安装文件下载目录&#xff1a;/data/software Mysql目录安装位置&#xff1a;/usr/local/mysql 数据库保存位置&#xff1a;/data/mysql 日志保存位置&#xff1a;/data/log/mysql 2下载mysql 在官网&am…

Linux LVM硬盘管理及LVM扩容

原文出自http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html 一、LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写&#xff0c;它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合&#xff0c;相当于一个大硬盘来使用&…