Archive for the ‘JonFTP’ Category.

AIR开源项目教程系列(三)测试与涂鸦并举

终于到了编码阶段,写code大家都熟悉不细讲,有兴趣可以上svn下载jonFTP的代码,带有一些注释应该容易看懂。我这里要谈到的不是如何写code,而是写code的过程。在此之前,有些知识需要提前弄明白(每个AIR项目都有不同的知识基础,要在编码之前学习,边学边写不是啥好习惯),如FTP协议,命令等。

就我个人来讲,测试驱动和设计图是两条主轴,两条故事线。而设计图应该在测试驱动之前。

设计涂鸦

是UML吗,不一定,设计图主要是为了理清思路,知道哪里抽象,哪里改写。基于这个目的,是不是UML,要不要遵守UML语法并不是问题核心,关键自己要有数,看不懂不行。而设计图也应该先从逻辑层开始,下面是我涂鸦出来的JonFTP的架构:

GLFTPClient

这里最重要的就是GLFTPClient,GLProcess和GLGroup:

  • GLFTPClient代表一个session,管理socket,处理发送和接收字节。
  • GLProcess代表一个处理单元(将FTP命令分类管理,组织成不同的逻辑单元),是个抽象类,子类都是具体的逻辑单元,比如GLList,就是取得当前远程路径下的文件信息。GLProcess向GLFTPClient发送指令,并分析GLFTPClient获得的字节。
  • GLGroup,一个特殊的GLProcess,管理逻辑组合,比如批量删除,上传和下载。

这只是一个大致的结构(实际上我都是在草稿纸上画的),反正就一个意思。设计图帮助你理清逻辑层的架构,时时刻刻保证路线正确。

差点忘了,时刻重构来修改设计图。

测试驱动

我不是要讲TDD怎么怎么好,这里只是要提醒,时刻准备好测试你的代码,如果你先有算法,那么就测试算法;如果你有一些单元功能,就准备一个简单的UI来展示一下。反正就是说,时时刻刻要测试你的工作。这样可以尽早发现问题。

AIR开源项目教程系列(二)细化结构设计

假设之前已经有一张列表,描述操作流程(也就是初定下的需求)。下面就可以开始设计程序结构了。我觉得,拉起来就写code并不是多好的习惯,至少脑子里也该有个结构概念吧。

还是MVC

MVC是个永恒经典的结构模型,不光可以脱离UI的束缚,而且可以让人形成一种习惯,就是,没了UI也叫程序,让逻辑决定程序的走向。试想下,如果AIR项目没有UI那算啥。设计就要先从没有UI开始。这一点,flex和flash做得不是太好,因为程序的开头总是sprite或mxml。

所以说,细化程序结构的第一步就是拆分逻辑层和视图层。拿JonFTP为例,现在抛弃UI的概念,试想下一个FTP流程该什么样子。登录,上传,关闭。一个主要的流程就是如此。

workflow1

workflow1

若干流程的集合就是逻辑层,不需要想的太复杂,比如用户该怎么选怎么点,这是视图层该干的事情。

怎么把若干流程揉合在一起

我以前总是到最后才考虑怎么把各个功能综合起来,其实它应该在考虑细节之前考虑。比如上面讲的,登录,上传,关闭是一条路,登录,上传,下载,关闭也是条路,中间的操作可以任意组合而不应该含有冲突。也就是说,无论怎么变化,有几点是肯定的:

  • 登录,关闭一定是一条流程的首尾
  • 中间的操作可以任意变化,且不能相互冲突
  • 流程之前不能有联系(新的session需要用户身份)

于是,我就设计了这么个结构:

  • 准备一个“工厂”,产生,托管和消灭一条流程(Session)
  • 流程以登录操作为开始,以关闭操作为结束
  • 任何操作方式(包括登录和关闭)设计为独立的过程(process),过程之间可能要有联系。不要忘了,过程组合也是过程的一种。

初期我是这么考虑的,到了后来还是出现了一些变化,这是后话。

转换到计算机语言

有了上面的“大白话”结构,就可以用计算机语言(AS3)来描述了。相应的就是:

  • 准备一个全局的FTPClient类,代表一个session,实例由工厂方法或者工厂类产生。
  • 准备一个树状的继承结构,顶层为CProcess,代表一个过程(向FTP服务器请求并获得数据,解析),子类包括一个CGroup,可以add若干个CProcess,它代表一个过程组合(比如批量删除)。
  • FTPClient接受CProcess作为输入,执行并处理数据,CProcess以事件方式通知UI执行成功与否。

初期的设计就是如此,不过随着开发的进展,肯定会有修改甚至是推翻。不过都是正常的。这里总结下我的设计步骤

  1. 拆分逻辑层和视图层
  2. 先设计逻辑层
  3. 逻辑层以流程(session)为主导,不可依赖用户操作
  4. 以书面化形式描述各种流程,并寻找相同点和不同点
  5. 转换用计算机语言描述,并形成一个大致的架构
  6. 开发过程中不断修改

AIR开源项目教程系列(一)准备你的项目

今天开始系列教程的第一篇了,准备把我自己的AIR项目JonFTP的开发经验分享下。

调整你的精神状态

今天看了部片子叫《校花我爱你》(《I Love You, Beth Cooper》),我觉得用它来强调我们做事的动力再合适不过了。这部片子强调的一个主题就是“只留青春,不留遗憾”。当你要做一件事的时候,能避开人的惰性,避开世俗的眼光,才能不留遗憾。想做就做吧。

坚定你的想法

当你开始准备一个自己的项目的时候,初期的准备往往是很重要的。兵马未动粮草先行,用在项目开发上同样适用。拿JonFTP(一个FTP客户端)来说,首先需要考虑,这个项目是用来干嘛的,最好不要让你的概念模糊,不然以后会乱套,直接打击你并使你失去兴趣。所以第一桩事情就是反复对自己讲:这个东西是干嘛使的。目的就是给自己一个继续的理由,给项目一个目标。最好给自己准备一张白纸,写下你对这个项目的理解以及产品描述,贴在你的桌子上。

查看同类产品

你不会牛到发明吧(这样的话不必看下去了),呵呵,不管你的目的是不是抄袭,先看看同类产品。我这里说的看,不是去找源码,要明白的是,编码是后面的事情,初期先把自己当成一个不懂编码的普通用户,查看同类产品的目的。就是来坚定你的想法并核实产品描述的正确性,或者给自己一个直观体验,让描述更加具体。还是拿JonFTP来说,我需要做的就是找找比较有名的几个FTP客户端产品,比如FileZilla,这类成熟的产品往往在用户体验(操作体验)上也是成熟的。要借鉴的就是它的操作体验。你可以拿张纸随便涂鸦,先从简单的开始。还是拿FTP客户端为例,用FTP的操作大体上是:

  1. 准备host,用户名,密码连接远端的ftp服务器
  2. 连接失败后返回上一步,连接成功后到下一步
  3. 显示远端服务器的文件系统
  4. 做各种操作
  5. 关闭连接
  6. 退出程序

当然我的blog上只能用1234的标号,如果自己写的话可以随意的用树的方式组织(因为操作的流程总不可能是流线型的吧,分支合并非常常见),但一定要让自己看懂。不详细不要紧,因为借鉴总是反反复复的。

除了程序还需要什么

这个容易被忽视因为我们是写程序的。为啥要提到这个,我们的用户总不是写程序的吧,那么就需要照顾他们的感受。我觉得开源项目需要:

  • 官网 — 放你的blog里吧,包括系统介绍,和截图。
  • 用户手册 — 一定要的,不然没人会用,即使你的程序傻瓜到极点,要知道,没有最懒只有更懒的人。
  • 更新Log — 展示每次升级带来的好处。
  • 升级系统 — 最好不要每次都让用户去下载,尽量在程序中集成自动升级(不是强制升级)
  • 留言板 — 给反馈一个通道

[置顶]基于Adobe AIR技术的FTP客户端

最初的话:

利用很多的业余时间炮制出来的,一款基于AIR的FTP客户端程序终于出炉了。从最初的构思到设计,我花了不少心思来学习和修改,也学到和实践了不少东西。这个过程能让人受益良多。我还希望利用将来的业余时间来继续完善和开发新功能,争取赶上并超过目前主流的FTP客户端工具,很欢迎大家帮忙测试和提出建议,感兴趣的朋友可以发邮件交流。下载和帮助见这里

Continue reading ‘[置顶]基于Adobe AIR技术的FTP客户端’ »

FTP指令格式列表

想用AS写FTP传输,了解下FTP协议是必要的。wiki百科有不错的解释:

http://en.wikipedia.org/wiki/List_of_FTP_commands

http://www.nsftools.com/tips/RawFTP.htm

另外,其实还有一类更直观的方式。ftp客户端大家都有吧,看看它的log就行了,通常都很详细,而且很清楚它的步骤。下面是FileZilla的一个例子:

FileZilla sample

FileZilla sample

其中就有request命令和response code,很清楚。