第一讲:oop
一:如何开始一个新项目
1:首先要明确做什么
2:做成什么样子,基本分析,要实现什么功能
3:市场有什么可以参考的
4:细化自己的需求 (需求可行性分析)
5:准备设计项目
二:如何设计一个项目
1:明确项目类型
2:工具型软件有什么特点
1:)分析类
2:)设计类
3:)组合类
三:工具型软件设计方法
1:初始化数据
2: 保存数据 ,保存配置信息,以便以后初始化
3:核心任务 (把握核心任务实现)
4:次要任务细分
1:)辅助功能
2:)用户体验
一个类能否映射成一个对象,要看这个类是否具有类的基本特征 (属性和方法)
第01讲:基于OOP的音乐播放器设计
一、如何开始一个新的项目?
【1】首先要明确你要做什么?客户端的音乐播放器!
【2】做成什么样子?也就是基本的需求分析!明确你要实现的功能。
【3】当前市场同行软件有什么参考?比如我们这个,参考的是酷我音乐播放器(UI设计、核心功能的取舍)
【4】细化自己的需求。(进一步的对需求进行可行性分析)
【5】准备开始设计项目。
二、如何设计一个新的项目?
【1】明确项目类型?一般数据库应用系统?(模式单一)or 工具应用型系统?
【2】工具型应用软件有哪些特点:
1. 分析类
2. 设计类
3. 组合类
三、 工具类型的软件设计入手方法
1. 初始化数据。(来源:本地or网络,本地一般的配置文件或者序列化文件等,网络可以通过json格式)
2. 保存数据。及时的,或者在必须的情况下,保存配置信息,以便下次处初始化使用。
xml-->文本文件/ini-->对象序列化(单一对象、集合对象,嵌套集合对象,计算机模拟考试系统)
-->json格式(不仅跨平台,本地,网络都在大量的使用,通用性极强)
3. 核心任务。把握核心任务的实现。其他的次要任务(包含辅助的其他功能,和用户体验的改进--UI操作的方便性/美化)
四、项目设计(核心类)
1. 播放器类(Player)
2. 播放模式(枚举!我们这次讲课其实我故意没有用枚举)
3. 播放列表类、文件操作类?
汽水:播放器类 + 歌曲的实体类!
类能否映射成一个对象或者最终成为我们要选择的对象?要看这个类是不是具有对象的基本特性!(属性 or 方法)
你要看这个类是不是“成品类”还是“组件”类!
基于以上思考,我们可能筛选了一部分类,但是这个筛选不是绝对的!尤其是当我们设计一个类以后,如果这个类的功能要素(属性、方法)太多了,我们就要独立分解!
taobao--》天猫/聚划算/。。。。。
播放器类:
系列功能A,里面包含很多功能!当我们独立的时候,再次可以组合进去,也就是作为这个类的一个属性
class Player
{
//。。。。
public FunA funA{get;set;} 一对一
public List<FunB> funB{get;set;} 一对多
//以上内容,如果你在学习EF的时候,导航属性!
}
实操联系:
播放器类的设计 属性(当前播放的文件、路径、格式、....) 方法(播放方法,选择文件、上一曲、下一曲、歌词显示、另存为、当前调准、开始/暂停....)
技巧:首先想到核心功能类,一般我们当前设计的这个项目名称,就是一个核心功能类。其次,我们要想到,当前核心功能类处理数据所用到的各种“实体类”。实体类就是用来封装数据的。一般核心功能类会对应一个实体类!
播放器类的属性:播放列表、播放模式(其他扩展:皮肤等)
播放器类的方法:
补充:工具型软件项目中我们一般需要几种类?核心功能类、从核心功能类中分离的辅助类,边界类(UI)因为我们用的这个播放器控件是提前封装好的,相关的操作功能大部分都已经做好了。我们只需要配置,所以,当我们分析好核心类的功能时,请思考,哪些功能,是能够直接在UI中完成的,我们要分配给UI去实现,而不是单独封装,除非必要情况(这个功能的实现非常复杂,需要其他算法或业务,可以独立)
核心功能是否需要给UI边界类去实现,这个看你用的什么!如果我们没有用第三方的控件,那肯定是我们自己封装了!
歌曲实体类:名称、大小、歌手、时长、格式、歌词....(请根据自己的需要选择即可)
五、项目框架设计
1. 小项目,可以直接用文件夹区分。
2. 大点的项目,或者后续充分考虑扩展升级的,请务必设计独立的模块。
建议:
【1】实体模块
【2】业务模块(里面主要是我们分析找到的各种功能类,如果你的项目非常大,那么可以把业务模块再次独立)
【3】控制模块(这里面主要是封装业务模块中各个对象之间的关系)
【4】UI模块 (如果大项目中,没有控制模块,UI编程会变得非常复杂,如果有控制模块,UI调用的时候,使用的接口会非常小)
六、后续改进(功能模块)
1. 软件换肤(把界面中核心的面板和面板上的控件颜色统一设计并保存,当用户切换的时候,统一更改就行)
2. 数据保存(请大家改成json格式,纯粹是为了练习)
3. 文件比较(拖放的时候,防止重复文件,可以使用md5,需要单独去学习)
4. 歌词添加(歌词的格式,请参考酷我播放器的歌词格式,自己解析,解析完以后,封装到对象里面)
显示歌词的地方,放到哪个位置合适,请大家思考。如果我们播放和歌词显示想更好的体验,可以使用多线程。
5. 网络下载:
【1】我们需要提前把一部分歌曲或者MV连同歌词,放到web服务器上面。然后我们对外提供下载的URL就行。
更好的建议,我们把能够下载的歌曲和歌词,做成一个网络文件(你可以是文本,xml,也可以是json)
{
“Name”:***,
""
}
我们通常把能够下载的对象,直接封装后,直接转换成json文件。
【2】把json文件,直接从web服务器上下载下来,然后解析,并用列表展示。
【3】下载的话,建议使用多线程下载。webclient...
七、后续改进(框架设计)
1、现有结构(Models文件夹来区分)
2、建议修改1:单独设计实体模块和逻辑模块(也可以两者合一)
3、建议修改2:建议大家借鉴AOP思想和依赖注入Ioc,思考如何动态扩展。
AOP,其实不仅更好的遵循了开闭原则,使得程序的扩展更加灵活。
建议尝试使用装饰器方式(虽然这个不是AOP最终的方法,但是可以很好的让你体会动态扩展)
最好,是你在扩展完毕其他功能的时候,再考虑基于AOP“重构”!
以上,作为作业,请大家自行完成。