关于:复杂是软件的死敌

   最近看了一遍文章<复杂是软件的死敌>http://news.csdn.net/a/20110424/296461.html,而自己刚好在整合flash, ppt, image, video播放器的逻辑处理,且程序写了大半。原来只有video play方面的功能,若在当时要是先看到这遍文章,估计会再三考虑是否要做整合方面的工作。

   Thinkvd软件播放结构简单如下图:
  
 

  此播放模式以PlayUI为核心,是界面基本的逻辑操作,如play的start, pause, resume, stop, snapshot等。它对下操作具体控制的逻辑处理接口(或者说调用方法),对上就是界面业务的需要,实现不同的布局。分离业务逻辑与界面逻辑以利于将来扩展。如将来想支持pdf,且只需要在control上加上pdf方面的控制处理及UI布局,它不会影响先前的video, flash等模块。
如flash的播放方式与ppt的不同,需要实现不同的逻辑来处理。

 

此次整合,把原来的video与PlayUI分离了,新的play control接口更新如下:

 

 

class ImPlayBase : public QObject

{  

public:  

ImPlayBase (lpShareMemData data, QObject *parent=0)

: QObject(parent)

, m_parent(parent)

, m_lpSMD(data){

m_atTimer = new QTimer(this);

m_atTimer->setInterval(40);

};  

virtual ~ImPlayBase ()  

{  

}  

 

virtual int init() = 0;

virtual int open() = 0;

virtual int start() = 0;  

virtual int pause() = 0;  

virtual int resume() = 0;

virtual int stop() = 0;  

virtual int close() = 0;  

virtual int seek(int pos) = 0;  

virtual int shotsnap() = 0;  

virtual void render() = 0;  

virtual void renderFresh() = 0;  

virtual void setVolume() = 0;  

virtual int getVolume() = 0;

virtual int isRunning() = 0;

virtual void changeAudio(int pos) = 0;

virtual void next(){;}

virtual void prev(){;};

 

void setData(lpShareMemData data){ m_lpSMD = data; }

lpShareMemData getData(){ return m_lpSMD; }

void setListItem(ImListTreeItem *item) { m_listItem=item; }

ImListTreeItem *getListItem() { return m_listItem; }

 

public:

lpShareMemData m_lpSMD;

QTimer  *m_atTimer;

 

protected:  

/* data */  

QObject  *m_parent;

ImListTreeItem *m_listItem;

};  

 

在此过程中,也遇到不少问题,从逻辑关系上来说,主要把原来的继承关系改成组合关系, 并把原来的功能按业务逻辑拆分。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值