Standup Timer的MVC模式及项目结构分析
前言
学习android一段时间了,为了进一步了解android的应用是如何设计开发的,决定详细研究几个开源的android应用。从一些开源应用中吸收点东西,一边进行量的积累,一边探索android的学习研究方向。这里我首先选择了jwood的 Standup Timer 项目。
Standup Timer的项目结构
项目结构划分、以及各种设计模式分析我并不在行,所以如何写这篇博文让我相当的头疼。还决定从项目的结构谈起介绍一下每个包的职责,在结合MVC的概念进一步的了解如此划分项目的好处。
在src文件夹中net.johnpwood.android.standuptimer包对应MVC中的控制器,它包含了项目中的所有Activity。
net.johnpwood.android.standuptimer.dao是数据持久层负责数据的存储访问。
net.johnpwood.android.standuptimer.model对应MVC中的M模型处理绝大多数的业务(在Standup Timer中可能因为项目小,体现不出来)。
net.johnpwood.android.standuptimer.utils是个工具包。
另外res文件夹对应了MVC模式中的View。
About.java和Help.java是用于展示项目信息和帮助的Activity类,本身并没有复杂的业务逻辑。事实上about和Help是在ConfigureStandupTimer中,通过选择某项目录然后以对话框方式展示。当ConfigureStandupTimer接受用户的输入请求,ConfigureStandupTimer.java控制器将请求移交给About.java控制器进行处理,最后About.java将决定选择那个View来响应用户的请求,这里是about.xml。
ConfigureStandupTimer是项目的起始Activtiy,它调用视图main.xml接收到的一些会议开始前的信息配置(如参加人数、团队和会议时间等),处理验证用户输入数据的合法性,然后决定调用哪个Model或者移交给其他控制器。
MeetingDetails用于展示会议的细节,它调用视图meeting_details.xml和用户交互,并将请求转交给Model里的Meeting来处理具体业务。
Prefs是一个PreferenceActivity,它负责系统的配置。
StandupTimer是项目的业务核心,通过倒计时方式控制会议的进程。使用timer.xml和用户交互,由Team负责具体业务处理(多为数据存储访问)。
TeamDetails用记录团队的所有参加过的会议和会议统计信息。team_details.xml负责和用户交互,其主要业务交由Team.java和MeetingStats.java处理。
TeamList团队列表,由teams.xml和用户交互,调用Team来处理核心业务(从数据库中选取所有的团队名称)。