我的服装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,一经查实,立即删除!

相关文章

Linux配置

第3章 对Linux系统管理员的建议... 1 第4章 安装Linux操作系统... 2 第5章 初步认识Linux. 5 第6章 Linux系统的远程登陆... 13 第7章 Linux文件与目录管理... 19 第8章 Linux系统用户及用户组管理... 37 第9章 Linux磁盘管理... 45 第10章 文本编辑工具vim.. 70 第11章…

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

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

python网络编程-一些常用有用的函数

socket.getservbyname(servicename[, protocolname]) –> integer 查询某个协议对应的端口号,需要使用两个参数,servicename对应端口名称,如 http, smtp,等。protocolname对应tcp,udp。 s.getsockname()…

LAMP环境的搭建

一、mysql的安装1、tar -zxvf mysql.gz2、mv mysql-5.1.49-linux-i686-glibc23/ /usr/local/mysql3、cd /usr/local/mysql4、useradd -s /sbin/nologin -M mysql5、mkdir -p /data/mysql6、chown -R mysql:mysql /data/mysql/7、./scripts/mysql_install_db --usermysql --data…

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

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

apache如何在虚拟主机中实现用户验证

虚拟主机配置文件中&#xff0c;需要加入<Directory /data/web/test>AllowOverride AuthConfig</Directory>然后在虚拟主机的主目录&#xff0c;即DocumentRoot 目录下vi /data/web/test/.htaccess加入AuthName "frank share web" AuthType Basic Aut…

linux 内核编译安装及卸载

编译安装&#xff1a; 下载需要的包 apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 cp linux-3.x.x /usr/src cd /usr/src/linux-3.x.x make menuconfig make modules make modules_install make make install sudo mkinitramfs -o /boot/initrd.img-3.…

Linux服务器安全之用户密钥认证登录(基于CentOS 7.0系统)

一、 密钥简介在Linux下&#xff0c;远程登录系统有两种认证方式&#xff1a;密码认证和密钥认证。密码认证方式是一种传统的安全策略。设置一个相对复杂的密码&#xff0c;对系统安全能起到一定的防护作用&#xff0c;但是也面临一些其他问题&#xff0c;例如密码暴力破解、密…

Servlet 3.0 新特性详解

简介 Servlet 是 Java EE 规范体系的重要组成部分&#xff0c;也是 Java 开发人员必须具备的基础技能&#xff0c;Servlet 3.0 是 Servlet 规范的最新版本。本文主要介绍了 Servlet 3.0 引入的若干重要新特性&#xff0c;包括异步处理、新增的注解支持、可插性支持等等&#xf…

LAMP环境下配置虚拟主机和域名的跳转

一、配置虚拟主机 vim /usr/local/apache2/conf/extra/httpd-vhost.conf <VirtualHost *:80> ServerAdmin webmasterdummy-host.example.com root邮箱 DocumentRoot "/data/123"虚拟主机存在的目录 ServerName 123.com 配置的虚拟主机域名 …

linux下搭建nagios监控

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

Coursera NLP 笔记02

找到一个很好的英语笔记&#xff0c;等有空了再整理第二章http://files.asimihsan.com/courses/nlp-coursera-2013/notes/nlp.html#the-trigram-estimation-problem转载于:https://www.cnblogs.com/bertrandwdx/archive/2013/03/04/2943437.html

zabbix yum安装

zabbix的单个Server节点可以支持上万台设备&#xff0c;每秒可以处理1.5万次请求&#xff0c;理论上可以支持5万台设备.zabbix 的使用可以分为三类用户&#xff1a;入门用户&#xff08;熟悉Zabbix的安装跟配置&#xff09;&#xff0c;中级用户&#xff08;熟悉LAMP和LNMP环境…

Oracle 索引概述

Oracle 提供了多种不同类型的索引以供使用。简单地说&#xff0c;Oracle 中包括如下索引&#xff1a;B*树索引&#xff1a;这些是我所说的“传统“索引。到目前为止&#xff0c;这是 Oracle 和大多数其他数据库中最常用的索引。B*树的构造类似于二叉树&#xff0c;能根据键提供…

zabbix的安装

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

LinuxMySQL主从配置

mysql 主从配置-2主从 mysql 启动以后&#xff0c;我们来做一些配置。假设 3306 为主&#xff0c;3307 为从登陆 mysql 命令和参数/usr/local/mysql/bin/mysql登陆不同的 mysql 参数&#xff0c;可以 IP 也可以是 sockmysql -S /tmp/mysql.sock sock 登陆主mysql -h127.0.0.1 -…

通过udp及vlc传递视频流

可以通过两个host进行测试&#xff0c;如果是使用笔记本的摄像头进行测试&#xff0c;首先需要将当前用户添加到video组&#xff1a; sudo usermod -G video $user 发送方&#xff1a; vlc v4l2:// :v4l2-dev/dev/video0 :v4l2-width640 :v4l2-height480 --sout "#transco…

Linux主从复制

mysql主从复制 &#xff08;超简单&#xff09; 怎么安装mysql数据库&#xff0c;这里不说了&#xff0c;只说它的主从复制&#xff0c;步骤如下&#xff1a; 1、主从服务器分别作以下操作&#xff1a; 1.1、版本一致 1.2、初始化表&#xff0c;并在后台启动mysql 1.3、修…

对fgets的理解1

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

Linux 中mysql常用命令

测试环境&#xff1a; mysql5.0.45【注&#xff1a;可以在mysql中通过mysql> SELECT VERSION();来查看数据库版本】一、连接MYSQL。格式&#xff1a; mysql -h主机地址 -u用户名 &#xff0d;p用户密码1、连接到本机上的MYSQL。首先打开DOS窗口&#xff0c;然后进入目录mysq…