当前位置: 首页 > 编程日记 > 正文

构建之法-读后感

大二快结束,从大二初开始接触项目的工程开发,到现在也差不多一年了。之前一直在用c# 结合winform开发一些简单的桌面应用,也看过一些是实验室学长们用c#和其他多种技术结合
开发出来的系统, 接触过其源代码,为深入了解也曾阅读过试着了解内部实现的机制。在进行项目开发之前,带着我们的学长一直在和我们强调编程规范的重要性,并且给我们分析了很多不同的桌面应用架构,等到开始阅读学长的源代码的时候,发现自己在开发时候的很多做法都非常的幼稚,程序结构也很松散,容易出现各种各样的bug。

为此,我买了《代码大全第二版》,初看书名相信很多人都会认为书里面会有很多的实例和源代码,可惜事实并非如此,这本书其实讲的是一个项目开发的完整流程,从开发语言的选择单元测试,后期维护,可谓详细至极。《代码大全》的内容非常之多,一千多多页内容,我虽然没有完全看完,但是从这本书中我开始接触一些工程的思想,真正开始了解功能项目的开发流程。

到后来,我不断的将我从《代码大全》中看到的技巧运用到实际开发的过程中,我开始注重代码的可重用性,项目模块话构建等。其实,一开始用这些技巧并不是非常的顺利,为了实现模块化,代码的可重用性,我需要从大的角度去考虑整个程序的架构问题,各种对象之间的关系,各种模块之间的联系等。这给我的开发带来了一定的困难,但是随着项目代码量的增加,我发现我之前努力遵从的规范和要求给我的后期开发带来了很大便利,我不用再为实现一个功能在不同的地方书写相同或者类似的代码,重用代码给我减少了很大的工作量。同时,各个模块之前的接口调用等仔细的安排也保证了程序的稳定性。我慢慢的尝到了软件工程的甜头。

再后来,偶然听到同学讲起一个名词,叫做设计模式。这对我可是一个全新的概念,什么是设计模式?它在我的项目开发过程中有什么作用呢?带着好奇,我去天猫买了一本书相关的书籍《Head First 设计模式》,Head First是一个系列的书籍,这个系列有一个共同的特点,那就是通过通俗易懂的方法给读者讲述各种技术的难点。这对我这个对设计模式一无所知的人来说,正好合适呢。打开书开始阅读,开篇将的便是工厂模式,书中将工厂模式的优缺点,具体实现,实现过程中每一步的来龙去脉都介绍的非常清楚,在看工厂模式的过程中,我总觉得这种设计模式非常的熟悉,我好像在那个地方看到过这种方式的具体实现,或者我自己也曾这么写过。在翻阅了一会自己之前写过的代码之后,我就找到了工厂设计模式的影子,啊哈,原来这种设计模式我在我的项目中运用过,真是巧啊。慢慢的我开始往后看,接触到了观察者模式,装饰者模式,命令模式等等等等,这些设计模式各有春秋,在不同的系统需求中有着不同运用效果,在搭建项目的框架的时候,选择一个好的设计模式至关重要,书中讲的20多个的设计模式,都有着不同的应用场景,在实际使用过程中要根据实际需求谨慎选择。

看到这,我要向各位读者道歉。我并没有看过《构建之法》这本书,只是有所耳闻。对于软件工程的开发,我觉得不是一本书就可以教会的,它需要我们这些编程人员通过不断的学习不断的尝试在实际工程项目中总结经验。如果仅仅照搬教科书上的那套,依着葫芦画瓢是很难领悟到的这些精妙的方法的真谛的。这,我在开发的过程中深有体会,所以,要想真正去掌握软件工程里面所讲述的方法和总结出来的经验,我们还需要不断的实践和摸,学习是一个过程,我愿意不断付出!!!

转载于:https://www.cnblogs.com/pjCoder/p/5579277.html

相关文章:

Java 理论与实践: 非阻塞算法简介——看吧,没有锁定!(转载)

简介: Java™ 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent 包充分地利用了这个功能。非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性的硬件原…

pring Boot与MyBatista的集成

1、准备数据库环境,在MySQL数据库中,创建一个名为microservice的数据库,在microservice中创建表tb_user,并在表中插入3条数据; 2、创建项目,添加依赖。 3、编写配置文件,在application.properti…

iOS中UIDynamic物理仿真详解

本文中所有代码演示均有GitHub源码,点击下载 UIDynamic简介 简介: UIKit动力学最大的特点是将现实世界动力驱动的动画引入了UIKit,比如动力,铰链连接,碰撞,悬挂等效果,即将2D物理引擎引入了UIKi…

ADO与ADO.NET的区别与介绍

1. ADO与ADO.NET简介ADO与ADO.NET既有相似也有区别,他们都能够编写对数据库服务器中的数据进行访问和操作的应用程序,并且易于使用、高速度、低内存支出和占用磁盘空间较少,支持用于建立基于客户端/服务器和 Web 的应用程序的主要功能。但是A…

cucumber 文件目录结构和执行顺序

引用链接:http://www.cnblogs.com/timsheng/archive/2012/12/10/2812164.html Cucumber是Ruby世界的BDD框架,开发人员主要与两类文件打交 到,Feature文件和相应的Step文件。Feature文件是以 feature为后缀名的文件,以Given-When-T…

Spring Boot与Redis的集成

1、在Linux中安装Redis。 1.1、在线下载软件 1.2、安装软件 1.3、修改配置文件 1.4、启动Redis; 2、添加Redis起步缓存,在pom.xml中添加Spring Boot支持Redis的依赖配置。 3、添加缓存注解。 3.1、在引导类Application.java中,添加EnableCac…

Redis3.0 配置文件说明

背景: 以前有篇文章已经结果过了,现在复习一下,对Redis3.0进行说明: 参数说明: #redis.conf # Redis configuration file example. # ./redis-server /path/to/redis.conf################################## INCLUDES…

Core ML 文档翻译

概览 借助 Core ML,您可以将已训练好的机器学习模型,集成到自己的应用当中。 所谓已训练模型 (trained model),指的是对一组训练数据应用了某个机器学习算法后,所生成的一组结果。举个例子,通过某个地区的历史房价来训…

jquery radio 取值

网上流行的说法就是 $(input[nameaaa][checked]).val()能取到选中项的value,但我测试后发现只在IE下有效,在firefox和Chrome中不论选中哪一项,或者不选,取到的值都是第一项的value正确做法应该是 $("input[nameaaa]:checked&…

Spring Boot与ActiveMQ的集成

1、ActiveMQ软见得安装配置 1.1、上传软件包并解压 1.2、配置并启动 1.3、浏览器验证 2、添加ActiveMQ起步依赖; 3、创建消息队列对象,在Application.java中编写一个创建消息队列的方法,其代码展示如下; 4、创建消息生产者&#…

iOS图片精确提取主色调算法iOS-Palette(附源码)

源码可见:[直接点击] 1.背景 图像提取主色调来增强浸入式交互体验的场景越来越常见,如知乎网页版的个人主页,Instagram的图片色调筛选。那如何去获得一张照片的主色调呢?Google在Android.support.v7里,给出了一个叫做Palette(调色…

jQuery UI 之 LigerUI 快速入门

LigerUI 快速开发UI框架 LigerUI 是基于jQuery 的UI框架,其核心设计目标是快速开发、使用简单、功能强大、轻量级、易扩展。简单而又强大,致力于快速打造Web前端界面解决方案,可以应用于.net,jsp,php等等web服务器环境。 LigerUI有如下主要特…

HTML5标签学习之~~~

<article> 标签 article 字面意思为“文章”。在web页面中表现为独立的内容&#xff0c;如一篇新闻&#xff0c;一篇评论&#xff0c;一段名言&#xff0c;一段联系方式。这其中包括两方面&#xff0c;一为整个页面的主旨内容&#xff0c;另外就是一些辅助内容。<arti…

将Spring Boot项目打包成jar包war包

任务一&#xff1a;将Spring Boot项目打包成jar包 1、在pom.xml文件中添加依赖 2、通过cmd命令行来进行打包jar包&#xff08;首先进入项目的目录中&#xff09; 3、进入项目中的target目录下查看包 4、使用命令执行jar包&#xff1b; 5、浏览器查看输出结果 任务二&#xff1…

手把手教你在应用里用上iOS机器学习框架Core ML

2017-06-10 Cocoa开发者社区2017年的WWDC上&#xff0c;苹果发布了Core ML这个机器学习框架。现在&#xff0c;开发者可以轻松的使用Core ML把机器学习功能集成到自己的应用里&#xff0c;让应用变得更加智能&#xff0c;给用户更牛逼的体验。 Core ML是做什么的 我们知道&…

Linux服务器安装JDK、Tomcat配置web网站

安装JDK cd /usr/java/jdk【打开目录】 tar -xvzf jdk-7u79-linux-x64.gz【解压安装包】 vi ~/.bashrc【编辑环境变量】############################export JAVA_HOME/usr/java/jdk/jdk1.7.0_79export JAVA_BIN$JAVA_HOME/binexport JAVA_LIB$JAVA_HOME/libexport CLASSPATH.…

sql help cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Configuration;using System.Data;using System.Data.SqlClient;using System.Collections; /// <summary> /// SQLHelper 的摘要描述 /// </summary>publ…

Spring Cloud应用开发(一:使用Eureka注册服务)

1、搭建maven父工程&#xff1b; 注&#xff1a;在MyEclipse中&#xff0c;创建一个Maven父工程cloud&#xff0c;并在工程的pom.xml中添加Spring Cloud的版本依赖等信息。 2、搭建服务端工程。 注&#xff1a;在父工程cloud中&#xff0c;创建Maven子模块ms-spring-eureka-s…

SRWebSocket源码浅析(上)

2017-06-12 涂耀辉 Cocoa开发者社区一. 前言&#xff1a; WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——可以通俗的解释为服务器主动发送信息给客户端。 区别于MQTT、XMPP等聊天的应用层协议&#xff0c;它是一个传输通讯协…

Mason 简单笔记

Mason的对象 ------------------------------- Request对象 Mason有两个全局预处理对象叫做&#xff1a;$r和$m $r是mod_perl的请求对象&#xff0c;它提供了Perl的API来执行Apache的请求。 $r->;uri #获得用户请求的地址 $r->;content_type #获得…

多级页表如何节省内存

在谈到多级页表的优势的时候&#xff0c;很多地方都是这么说的&#xff1a;32位地址空间的分页系统&#xff0c;如果页面大小为4KB&#xff0c;则每个进程可达1M个页&#xff0c;假设每个页表项占用4个字节&#xff0c;这样每个进程仅仅页表项就占用了4MB连续的内存空间。 那么…

Spring Cloud应用开发(二:实现服务间的调用)

1、搭建订单服务工程。 注&#xff1a;在父工程cloud中&#xff0c;创建Maven子模块ms-spring-eureka-server&#xff1b; 1.1、添加依赖&#xff0c;在pom文件中添加Eureka依赖&#xff1b; 1.2、写配置文件&#xff0c;在配置文件中添加Eureka服务实例的端口号、服务端地址等…

webSocket详解

前言 本文会用实例的方式&#xff0c;将iOS各种IM的方案都简单的实现一遍。并且提供一些选型、实现细节以及优化的建议。 注&#xff1a;文中的所有的代码示例&#xff0c;在github中都有demo&#xff1a; iOS即时通讯&#xff0c;从入门到“放弃”&#xff1f;(demo) 可以打…

2013多校第三场

hdu 4629 题意&#xff1a;给你n个三角形&#xff0c;问覆盖1~n次的面积各是多少&#xff0c;n < 50; 分析&#xff1a;取出所有端点和交点的x坐标&#xff0c;排序&#xff0c;然后对于每一段xi~xi1的范围的线段都是不相交的&#xff0c;所以组成的 面积要么是三角形&#…

React+Reflux博客实践

年初用ReactExpressMongodb写的一个简单的博客。分享给各位朋友参考。 前端&#xff1a;ReactReact RouterRefluxReact-BootstrapWebpack后端&#xff1a;Express(Node.js)Ejs(Index)Mongoose(mongodb) 博客Demo地址&#xff1a;http://itdotaerblog.herokuapp.comGithub Addre…

Spring Cloud应用开发(三:客户端的负载均衡)

1、Ribbon的使用 注&#xff1a;在石榴啊RestTemplate的方法上添加LoadBalanced注解&#xff0c;并在其执行方法中使用服务实例的名称即可&#xff1b; 1.1、添加LoadBalanced注解&#xff0c;在ms-spring-eureka-user工程引导类中的RestTemplate&#xff08;&#xff09;方法…

SRWebSocket源码浅析(下)

接上文&#xff09; 四. 接着来讲讲数据的读和写&#xff1a; 当建立连接成功后&#xff0c;就会循环调用这么一个方法&#xff1a; //读取http头部 - (void)_readHTTPHeader; { if (_receivedHTTPHeaders NULL) { //序列化的http消息 _receivedHTTPHeaders CFHTTPMessageCre…

(IOS)签名Demo

思路是将每一次按下屏幕的touch move时的点存到一个数组里&#xff0c;即一个数组相当于一个笔画&#xff1b;再将该代表笔画的数组保存到一个大数组中&#xff0c;每组每次touch的移动都历遍大数组和笔画数组&#xff0c;将点于点之间连接起来。 #import <UIKit/UIKit.h>…

debug运行可以,release运行报错的原因及修改方法

通常我们开发的程序有2种模式:Debug模式和Release模式在Debug模式下,编译器会记录很多调试信息,也可以加入很多测试代码,方便我们程序员测试,以及出现bug时的分析解决Release模式下,就没有上述那些调试信息,而且编译器也会自动优化一些代码,这样生成的程序性能是最优的,但是如果…

Spring Cloud应用开发(四:服务容错保护)

1、Spring Cloud Hystrix的使用 1.1、创建microservice-eureka-user-hystrix工程&#xff0c;并在其pom.xml中引入eureka和hystrix的依赖&#xff1b; 1.2、编写配置文件。在配置文件中添加Eureka服务实例的端口号&#xff0c;服务端地址等&#xff1b; 1.3、在工程主类Applic…