MVC模式在j2me项目中的应用(二)

项目

MVC模式在j2me项目中的应用(二)
作者:FavoYang Email:favoyang@yahoo.com 欢迎交流
Keywords:MVC 案例 模式

内容提要:
如果想试验一下自己对一个知识到底有几分的掌握,最好的方法就是实践她。结合一个名为“NOTE”的项目(记事本),运用MVC模式进行构建,一起体会一下MVC的强大与灵活。请注意的是,本文中关于不再使用MVC这样的术语,而是使用边界类、控制类、实体类、生命周期类这样的称呼。关于MVC的在j2me上的种种变化请看本文的(一),尤其看看我的习惯做法,否则交流上有困难。
本文重视的是总体设计,细节上没有过多的谈。
I want a good sleep.

版权声明:
本文同时发表在www.j2medev.com和我的Blog(blog.csdn.net/alikeboy)上,如果需要转载,有三个途径:1)联系我并经我同意;2)和www.j2medev.com有转载文章合作协议的 3)通过Rss聚合我的Blog。另外网上转载需要全文转发(包括文章的头部的声明),不要断章取义。

正文:

Note项目描述

手机是一个真正随身携带的数字终端,我们除了利用手机打电话、发信息外,往往让他帮助我们记录文字性的信息。PDA有较大的屏幕和手写输入的功能,而手机上的记事功能有限,记录的内容很简单。可以说利用手机记录信息是一种被视为理所应当的功能,也造就了一个一系列的应用——将手机作为随时随地的信息收集器。不难设想此类应用会用一定的市场,我们今天选择的Note记事本项目,正是此类应用的单机版的原形。

Note是很多手机的内建应用程序,一般叫做记事本或便签,说明这是一个非常常用的服务。也许朋友们可能认为开发一个已有的程序没有挑战性。是的,在开发上最忌讳的就是重作车轮,但对于教学则可两说着。毕竟一个简单的原型程序不会让我们陷入太多的细节,我的主旨是向大家介绍MVC模式的应用方法。

Note为手机用户提供记录一些简短信息的功能,用户可以添加记录,打开浏览记录,并可以随时修改已经保存在手机上的记录,当然也可以删除它们。就好象Windows下的记事本一样,只不过多了管理的功能。

用例分析

首先设想一下谁在使用这个程序:手机用户。好,我们以后就称这个参与者为用户(user)。
然后设想一下,用户都利用我们的NOTE(中文我们叫做记录好了)干些什么呢?很显然,用户可以添加新的记录,浏览他添加的记录,修改他所添加的记录,并且他还可以删除记录。一条记录应该简单的包括用户对记录起的名字,记录的创建或修改时间,以及最重要的记录的内容。

一般的情况开发人员是很反感这种文字性的描述的,往往是因为开发人员习惯于对待硬梆梆的PC机,而不愿意去面对客户,收集这种需求。其实文字性的东西,既是一个对系统的概述,又是我们发现开发要素的土壤。试想如果你的软件要发布了,你却无法组织起语言让用户恰当的理解软件的功能与使用对象,是多么的让人烦恼。

精练用户的需求(其实是我的教学需求哈哈)。很显然添加记录与修改记录同属于对记录进行编辑操作,就叫做编辑记录用例(NoteEdit)好了。浏览记录也是一个很明显的用例,就叫做浏览用例(Notepad)。删除是对记录进行的一种管理,叫做管理记录用例(NoteManager)。到此,我们已发现并精练了三个主要用例,还不错,系统正一步步变的清晰。在这里提醒大家,这个阶段是站在客户的观点(这里是用户的观点)想问题的,你的工作是发现并系统化客户的想法,不必站在开发者的角度思考任何细节。

So,let ‘go。
编辑记录用例(NoteEdit)
事件流1:
1) 显示用户Note的内容
2) 用户编辑内容
3) 用户放弃修改,note内容不变,正常退出

事件流2:
1) 显示用户Note的内容
2) 用户编辑内容
3) 用户save,退回主菜单

事件流3:
1) 显示用户Note的内容
2) 用户编辑内容
3) 用户save As,提示让用户输入新的文件名
4) Save,退回主菜单

浏览用例(Notepad)
事件流1:
1) 显示用户的Note的标题、创建时间、内容
2) 用户选择退出,返回主菜单

事件流2:
1) 显示用户的Note的标题、创建时间、内容
2) 用户显示编辑,转向编辑用例

管理记录用例(NoteManager)
事件流1:
1) 显示用户的Note列表
2) 用户打开选择的Note,转向浏览用例

事件流2:
1) 显示用户的Note列表
2) 用户编辑选择的Note,转向编辑用例

事件流3:
1) 显示用户的Note列表
2) 用户新建一个Note,转向编辑用例

事件流4:
1) 显示用户的Note列表
2) 用户删除选择的Note
3) 出现确认提示
4) 用户确认,删除Note
5) 更新显示,回到Note列表

三个用例的事件流一经被分析出来了,很显然应该在第一次迭代全部完成。

寻找类(oo分析)
首先是实体类(Entity),只需要从事件流中提取名字就可以缩小范围。
Note,显然是个对象。
内容(content)、时间(datetime)、标题(title),恩,应该是Note的元素。
Note的方法包括对域成员的操作set/get。因为要保存,所以需要序列化反序列化方法。

一般实体类都是由一个对应的生命周期类(lifecycle)用于他的产生、存储、消亡等等操作,一般把这样的操作独立出来大大有利用实体类的重用。不过此阶段还用不着分析他,一会儿画顺序图时,自然就会发现它。

习惯上为了高效的画顺序图,边界类和控制类的方法都需一一列出。不过我们省了,大家只知道每个用例都对应着一个边界类就好了。

设计实践
我举三个用例中管理记录用例(NoteManager)的一部分和浏览用例(Notepad)的一部分来介绍详细的设计过程。在这里,我们试图从一个客户的角度转化到一个开发者角度。要面对很多的挑战,可能包括一部分细节。应该学习从分离的角度思考整个系统。MVC的精华就在这里。

记录用例(NoteManager)事件流1:

NoteManagerUI并不知道Note列表的具体组织形式,它通过预先商定好的接口getNoteTitleList向控制类NoteManagerWorkflow所要数据,控制类返回一个String[]数组。
同样,NoteManagerWorkflow需要向生命周期类NoteLocator所要数据,不过NoteManagerWorkflow知道数据的细节。为了能够识别数据,除了返回记录的Title这一信息外,还要同时返回一个唯一识别的ID作为整个系统内识别Note的方法。所以NoteManagerWorkflow就有了两个域一个是TitleList、一个是IdList。
这里有几个细节:
1) NoteManagerUI、NoteManagerWorkflow如何通信,这不成问题,我们有理由相信他们是紧密相关的。
2) NoteManagerWorkflow如何找到NoteLocator,一般情况下,NoteLoator都是单件Singlton。
3) 当NoteManagerUI的showNote(index),调用的时候,他会调用NoteManager的showNoteDispose(index),而showNoteDispose会根据内部的实现,将这一Index转化为id用于识别Note

浏览用例(Notepad)事件流1:

NotepadUI向控制类所要标题,控制类有域note、和noteid,但是控制类通过getNode,这里很明显的可以使用惰性初始化技术,向生命周期类所要Note。取得记录对象的引用后,你可以方便的像实体类请求数据了。

经验分享

当然了,打好骨架后你就可以开始时coding了,画图的好处是强迫你在设计阶段做好各个部件之间的接口设计。这可以有效地减少你返工的几率,但是往往我们在设计阶段过多的思考了细节,比如NoteLocator是如何和Rms交流的等等。这都是很不好的习惯,但是不太容易改正。因为无论是学校里,还是陪训等等都是训练,反复的训练我们对coding的敏感。我们太依赖于从代码的角度思考问题了,这阻碍了我们从大局思考问题,发现更通用的模式。

如果要开始coding了,也不要一开始就全面铺开,一般实体类具有很强的独立性。可以独立开发,而开发其它类的时候可以从边界类开始,如果想一边开发一边测试一下,大可把控制类、生命周期类的方法暂时用fade data(伪支撑数据),这都是大大降低复杂性的好办法。

有条件的话请进行单元测试,不然测试效率实在是低。(Ps,有人写篇j2me下使用单元测试的文章好吗,我好想让测试自动化)

惰性初始化是我使用的最为频繁的技术,我觉得它可以大大降低代码混乱的程度。
整个系统的UML

有人说看不懂UML,但如果给我这么大的代码,我肯定看不懂。UML吗,有可能看懂:)

屏幕快照
开始后的画面:(管理用例)

新建后的画面:(编辑用例)

按下save,输入title名字

更新显示:

选择你喜欢的浏览,比如标题是easy的记录:(浏览用例)

屏幕导航:

代码种种
有朋友不愿意公开自己的代码,但是对于java来说,反编译太容易了。你没有什么秘密可言。相对于设计来说,代码是个很细碎的东西。如果有人愿意为你修改代码,共同完善的话,那是打着灯笼也找不到的呀,我用eclipse开发,就是在使用开放源码的结晶呀。当然这是对文章的附加代码而言。真正的项目如果开源一定要在GPL下进行。谁也不想再出现divx那样的事了。转载的朋友,再说一遍免费不但等于 not copyright。

csdn 的朋友,因为我不知道如何上传出了图像外的附件,要code作参考开始去www.j2medev.com吧。

时间: 2024-10-28 18:58:23

MVC模式在j2me项目中的应用(二)的相关文章

MVC模式在j2me项目中的应用(二)

版权声明:本文同时发表在www.j2medev.com和我的Blog(blog.csdn.net/alikeboy)上 ,如果需要转载,有三个途径:1)联系我并经我同意:2)和www.j2medev.com有转载文章合 作协议的 3)通过Rss聚合我的Blog.另外网上转载需要全文转发(包括文章的头部的声明), 不要断章取义. 正文: Note项目描述 手机是一个真正随身携带的数字终端,我们除了利用手机打电话.发信息外,往往让他帮 助我们记录文字性的信息.PDA有较大的屏幕和手写输入的功能,而手

MVC模式在j2me项目中的应用(一)

项目 MVC模式在j2me项目中的应用(一)作者:FavoYang Email:favoyang@yahoo.com 欢迎交流Keywords:MVC j2me UI模式 内容提要:本文简要的介绍了MVC模式的思想,并分析了MVC模式的利弊,最后结合MIDP平台给出几种常见的MVC模式实践.相信此文对任何一个使用midp平台的商务程序开发者都或多或少的有所帮助. 版权声明:本文同时发表在www.j2medev.com和我的Blog(blog.csdn.net/alikeboy)上,如果需要转载,

MVC模式在j2me项目中的应用(一)

版权声明:本文同时发表在www.j2medev.com和我的Blog(blog.csdn.net/alikeboy)上 ,如果需要转载,有三个途径:1)联系我并经我同意:2)和www.j2medev.com有转载文章合 作协议的 3)通过Rss聚合我的Blog.另外网上转载需要全文转发(包括文章的头部的声明), 不要断章取义. 正文: 初识MVC模式 第一次认识到MVC模式是从Microsoft MFC框架所采用的"文档-视图"模型开始的.第一 次接触到这个概念让我兴奋不已,很长时间困

MVP模式在Android项目中的使用

  以前在写项目的时候,没有过多考虑架构模式的问题,因为之前一直做J2EE开发,而J2EE都是采用MVC模式进行开发的,所以在搭建公司项目的时候,也 是使用类似MVC的架构(严格来讲,之前的项目还算不上MVC模式,只是简单将网络请求与界面分离,然后通过Handle通知更新界面).这种写法,在后 面随着项目越来越大,Activty或者Fragment中代码也会越来越多,导致项目的维护变的越来越复杂.所以需要另外一种架构模式来解决这个问题, 在网上浏览了一圈,发现适合Android开发的架构模式非M

基于MVC模式的J2ME应用程序框架设计

1 J2ME应用程序框架的现状 Sun公司在1999年6月推出了J2ME(Java 2 MicroEdition,Java 2袖珍版).J2ME是专门为那些使用有限电源.有限网络连接以及有限图形用户界面能力的设备开发的,满足了消费电子和嵌入式设备开发的需要. 而7年后的今天,消费电子和嵌入式设备发展迅速.硬件设备速度越来越快,存储容量也越来越大,这也就自然带动了软件的发展.MIDP 2.0和CLDC 1.1也相继问世,各种各样的JSR也层出不穷. 硬件平台和软件平台的飞速发展自然带动了人们需求的

MVC模式在ASP.NET中的应用

介绍 在网上搜寻了很长时间后却不能够找到一个演示ASP.NET的MVC模型的例子. 于是我实现了一个很好的能够领略MVC模型的简单实例. 有关 MVC 在一个传统的应用程序中,一个单一代码要处理所有事物. 藉由MVC模型,你可以将你的应用程序有机的分成三个协作的部份: 模型,视图和控制器.视图是直接面向用户使用的部份.它格式化数据使数据以各种形式展现在荧屏上.然而实际上,它不包含数据.数据包容在模型中.最后,控制器部分接受用户操作命令进而 修正模型内的数据.更多的有关MVC方面的知识可以到下面的

谈谈23种设计模式在Android项目中的应用

前言 本文将结合实际谈谈23种设计模式,每种设计模式涉及 定义:抽象化的定义与通俗的描述,尽量说明清楚其含义与应用场景 示例:如果项目中有使用过该模式,则会给出项目中的代码,否则会给出尽可能简单好理解的java代码 Android:该设计模式在Android源码框架中哪些地方有使用到 重构:项目中是否存在可以用该模式进行重构的地方,如果有会给出重构前与重构后的代码或者思路 用这种方式进行介绍设计模式,旨在结合每天都在接触的Android实际项目开发更好地理解设计模式,拉近与设计模式的距离,同时在

《Pro ASP.NET MVC 3 Framework》学习笔记之三【MVC模式介绍】

主题:MVC模式 1.MVC的历史: MVC(model-view-controller)这个概念在20世纪70年代就已经被使用了,MVC是从Smalltalk项目中提出的.所以原始的MVC模式所包含非常好的细节跟Smalltalk项目的具体概念是紧密相关的.我们假定View是无状态的,跟mvc的应用程序的交互遵循这样一个的过程:用户产生行为造成view更新,这刚好跟Web应用程序通过HTTP请求和响应的本质吻合.而且,mvc强调分解关注点的思想--领域模型和控制逻辑跟UI的松耦合,这意味着大量

MVC模式的PHP实现

MVC模式在网站架构中十分常见.它允许我们建立一个三层结构的应用程式,从代码中分离出有用的层,帮助设计师和开发者协同工作以及提高我们维护和扩展既有程式的能力. 视图(View) "视图"主要指我们送到Web浏览器的最终结果--比如我们的脚本生成的HTML.当说到视图时,很多人想到的是模版,但是把模板方案叫做视图的正确性是值得怀疑的. 对视图来说,最重要的事情可能是它应该是"自我意识(self aware)"的,视图被渲染(render)时,视图的元素能意识到自己在更