追求梦想,程序人生。

2011年6月14日

创建方面的重构-内联Singleton

摘要: 代码需要访问一个对象,但是不需要对象的全局入口。把Singleton[EM1]的功能搬移到一个保存并提供对象访问入口的类中,删除Singleton。【优缺点】使对象的协作变得更明显和明确;保护了单一的实例,并且不需要特殊的代码;当在许多层次间传递对象实例比较困难时,会使得设计变得复杂。[EM1]Singleton的意图是确保一个对象只有一个实例,并提供一个访问他的全局入口。 阅读全文

posted @ 2011-06-14 17:05 伊默宁 阅读(204) 评论(0) 推荐(0)
创建方面的重构-用Builder封装Composite

摘要: 重构到Builder的一个常见目的就是简化创建复杂对象的客户代码。一旦在Builder中实现了创建过程中冗长乏味的代码,客户代码就可以通过指挥Builder的创建工作,而无需了解创建是如何完成的。[EM1]另一个用Builder封装Composite的目的是,对客户代码和Composite解耦。【优缺点】简化了构造Composite的客户代码;减少了构建Composite的重复和易出错本性;在客户代码和Composite之间实现了松耦合;允许对已封装的Composite或复杂对象创建不同的表示;Builder接口可能不会很清楚表达意图;[EM1]Builder经常被用来封装Composite, 阅读全文

posted @ 2011-06-14 17:04 伊默宁 阅读(304) 评论(0) 推荐(0)

2011年6月9日

mapfile简介-LAYER Object

摘要: • 从MapServer5.0开始,取消了对单个mapfile layer数量的限制 • DATA参数是相对于SHAPEPATH的路径 • 如果没有配置DATA节,MapServer将认为它是一个ESRI shapefile(*.shp) Raster LayersLAYERNAME "bathymetry"TYPE RASTERSTATUS DEFAULTDATA "bath_mapserver.tif"ENDVector LayersVector layers 可以显示点、线和多边形。下面的例子演示了如何显示多边形的边线,利用OUTLINECOLOR 阅读全文

posted @ 2011-06-09 17:47 伊默宁 阅读(252) 评论(0) 推荐(0)
mapfile简介-MAP Object

摘要: MAPNAME "sample"EXTENT -180 -90 180 90 # GeographicSIZE 800 400IMAGECOLOR 128 128 255END• EXTENT 输出地图的范围• SIZE 地图图像的宽度和高度,以像素为单位 • IMAGECOLOR 默认的背景颜色 阅读全文

posted @ 2011-06-09 17:46 伊默宁 阅读(168) 评论(0) 推荐(0)
mapfile简介

摘要: *.map文件是MapServer关于数据访问和样式的最基础的配置文件。它是一个ASCII文本文件,由不同的对象组成。其中,每个对象都有一组可用的参数。所有这些参数都在mapfile reference中有详细说明。下面是一个显示一个图层的例子: MAPNAME "sample"STATUS ONSIZE 600 400SYMBOLSET "../etc/symbols.txt"EXTENT -180 -90 180 90UNITS DDSHAPEPATH "../data"IMAGECOLOR 255 255 255FONTSET 阅读全文

posted @ 2011-06-09 17:43 伊默宁 阅读(413) 评论(0) 推荐(0)
MapServer基本知识

摘要: 一个简单的MapServer应用包含:• Map File – 一个用来配置MapServer应用的结构化的配置文档。它告诉MapServer你的地图数据存放在什么位置,以及将结果输出到哪里;同时它也定义了你的地图图层,包括数据源、投影和符号。配置文档必须以.map结尾,否则MapServer将无法识别。• Geographic Data – MapServer可以应用多种地理数据源类型,默认的格式是ESRI shapefile。也支持多种其他的数据格式。 • HTML Pages – 是用户和MapServer之间的接口,MapServer将静态的地图图像放在html文件中。CGI是无状态的 阅读全文

posted @ 2011-06-09 17:40 伊默宁 阅读(784) 评论(0) 推荐(0)
创建方面的重构-用Factory Method引入多态创建

摘要: 一个类层次中的类都相似的实现一个方法,只是对象创建的步骤不同。在实践中,Factory Method通常在一个类层次中实现。通常的情形是,一个抽象类要么声明一个Factory Method,然后强制子类必须重写他,要么声明一个Factory Method 允许子类继承或重写这个默认实现。因为Factory Method的签名必须与其实现者一致,所以可能要为一些实现者传入一些不必要的参数。 【优缺点】减少因创建自定义对象产生的重复代码;有效表达了对象创建发生的位置,以及重写对象的创建;强制Factory Method使用的类必须实现统一的类型;可能会向一些实现者传递不必要的参数。 阅读全文

posted @ 2011-06-09 17:30 伊默宁 阅读(169) 评论(0) 推荐(0)
创建方面的重构-用Factory封装类

摘要: 把类的构造函数声明为非公共的,并通过Factory来创建他们的实例。如果一些类都处于同一个包结构、都实现同一个接口,并且他们不太经常发生变化,这时通过一个Factory类就可以将这些类与包之外的客户代码分离起来。 【优缺点】通过意图导向的Creation Method简化了不同种类的实例的创建;通过隐藏不需要公开的类减小了包结构的概念重量;帮助严格执行“面向接口编程而非面向实现编程”这一理念;当需要创建新种类的实例时,需要新建/修改Creation Method; 阅读全文

posted @ 2011-06-09 17:27 伊默宁 阅读(170) 评论(0) 推荐(0)
创建方面的重构-将创建知识搬移到Factory

摘要: 创建一个对象的知识散步在[X1]多个类中,将创建的职责放在了不应该承担创建对象任务的类中,产生了创建蔓延的问题(这是解决方案蔓延坏味的一种)。 Factory模式使用一个类封装创建逻辑和客户代码的实例化配置选项。客户代码告诉Factory如何配置实例化对象,然后使用同一个Factory实例在运行时执行配置实例化对象。 Factory不需要使用专门类实现,可以定义一个接口,让现有类实现这个接口。 如果Factory的创建逻辑过于复杂,就应将其改成Abstract Factory模式,完成后,客户代码可以配置使用具体的ConcreteFactory。[X1]客户代码需要根据一些选项配置对象,但是. 阅读全文

posted @ 2011-06-09 17:26 伊默宁 阅读(158) 评论(0) 推荐(0)

2011年5月30日

[转]浅谈测试驱动开发(TDD)

摘要: 背景一个高效的软件开发过程对软件开发人员来说是至关重要的,决定着开发是痛苦的挣扎,还是不断进步的喜悦。国人对软件蓝领的不屑,对繁琐冗长的传统开发过程的不耐,使大多数开发人员无所适从。最近兴起的一些软件开发过程相关的技术,提供一些比较高效、实用的软件过程开发方法。其中比较基础、关键的一个技术就是测试驱动开发(Test-Driven Development)。虽然TDD光大于极限编程,但测试驱动开发完全可以单独应用。下面就从开发人员使用的角度进行介绍,使开发人员用最少的代价尽快理解、掌握、应用这种技术。下面分优势,原理,过程,原则,测试技术,Tips等方面进行讨论。1. 优势TDD的基本思路就是通 阅读全文

posted @ 2011-05-30 15:40 伊默宁 阅读(245) 评论(0) 推荐(0)