第一讲: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“重构”!
 
     
    以上,作为作业,请大家自行完成。
posted @ 2019-04-08 18:03  瀚海行舟  阅读(152)  评论(0编辑  收藏  举报