很多年前,不知道在什么地方,可能是书上或论坛中提到,接口编程,可以降低程序的耦合性。
在自己学习了com知识后,觉得对接口编程其实是一种非常不错的方法。
他的好处不光是,模块划分清淅,降低了耦合性,而且对于迭代,重构或快速开发都有好处,功能重复的模块基本上可以不变或改动非常小,或可以增加新的接口。
我个人觉得做为软件开发来说,接口编程是可以应用到大多开发项目中,各种开发语言中的。但没有提升到一个理论高度,其实让我很吃惊,在csdn上还没有看到过多的计论这的贴子,也可能是自己刚在这个板块来混 的原因。
举个例子,我在前段时间,做了一个传输模块,定义了一个接口,
class IUdxSink
{
public:
virtual void OnConnected(SOCKADDR * pAddr) = 0;
virtual void OnUdxReadEvent(BYTE* pData,long len) = 0;
virtual void OnUdxWriteEvent(BYTE* pData,long len) = 0;
virtual void OnRemoteBroken() = 0;
};
class IUdx
{
public:
virtual BOOL Create(short port = 0) = 0;
virtual BOOL Connect(char* ip,short port,BOOL bSync = FALSE) = 0;
virtual BOOL IsConnected() = 0;
virtual long GetBuffWindow() = 0;
virtual void SetBuffWindow(long size) = 0;
virtual void ClearBuffWindow() = 0;
virtual BOOL IsFullBuffs() = 0;
virtual void Close() = 0;
virtual BOOL SendBuff(BYTE* pData,int len) = 0;
virtual SOCKADDR GetLocalAddr() = 0;
virtual void SetSink(IUdxSink * pSink) = 0;
virtual void Destroy() = 0;
virtual CUdxInfo* GetUdxInfo() = 0;
virtual BOOL Attach(SOCKET s) = 0;
};
这个接口,在我以后的工程经常用到,而且很成功,这算不算是敏捷开发?
后来,我又增加了新的接口
class IUdxFile : public IUdx
{
public:
virtual void SendFile(char* filename) = 0;
virtual double GetPercent(BOOL bSend) = 0;
virtual BOOL IsDone() = 0;
virtual void SetSaveFileDir(char* savedir) = 0;
virtual void SetSink(IUdxFSink * pSink) = 0;
virtual void Cancel() = 0;
};
在以前的基础上实现,相当简单。
而使用者并不关心实现,高度的复用,对于重构什么的,我想好处也是非常大的,而且对于我的实现的更新,使用者也不用关心。
请问,这算不算是敏捷的具体体现?那接口编程是不是该在编程活动中,广泛应用?在各种理论中是否应该去推广?
------解决方案--------------------------------------------------------
敏捷开发注重工作方法方面,重构属于其中的设计实现层面,肯定是敏捷开发的一个实例
敏捷还强调时间箱管理,增量开发,持续集成,轻量级的文档,可视化的项目管理。很多内容。
具体来说,敏捷还有很多变形,比如XP,Scrum这些瑟
------解决方案--------------------------------------------------------
"敏捷"的确关注人而不是其他的因素,一般说项目管理,就会考虑三个因素:时间,成本,范围或者期望目标.人被归属到成本一类,人对项目成功的决定性作用没有被特别地强调。敏捷在这里应该是充分认识到了人对项目成功的作用
比如人不能也不可能完全对未来做出完全正确的预测,所以引入了世间箱迭代,渐进地开发。
传统的开发方法结合敏捷的一些开发实践,但是我认为单纯的“接口编程”不能被认为是敏捷的,必须考虑项目开发的其他方面。
------解决方案--------------------------------------------------------
to wwwllg: 不懂com,所以只能猜着看你的代码,再加上你的文字,感觉你在强调的这些应该属于重构和设计模式的范畴。
敏捷说的还不是这个东西。当然敏捷会用到很多设计模式。但是这只是敏捷用的一种技术,而并不是敏捷之所以称为敏捷的原因。
敏捷强调的是小步快跑、测试驱动迭代。你可看看sp1234的相关发言,我觉得他理解得还是挺到位的。
------解决方案--------------------------------------------------------
1.接口编程是一个好的编程习惯。
2.接口编程不要单纯的理解写一个接口。
3.接口编程是讲究的是分而治之的思想。
4.先定义接口,可暂不实现,把相关接口都定义出来,再多人,逐步去实现。
------解决方案--------------------------------------------------------
针对抽象接口编程不是一种非常非常非常普遍的做法吗-_-几乎所有的书中都会提到啊。
实现和接口分离,客户不需要关心实现,这也是非常非常非常普遍的做法啊。
重用更重要的是考虑模块之间的依赖性,不完全由单纯的接口抽象决定。
至于敏捷的意义,“敏捷宣言”从基本概念上做了总结,测试驱动是具体的技术之一。没足够的实践经验很难来谈这个话题。软工的很多“好”技术,其核心都是依赖性。
------解决方案--------------------------------------------------------
呵呵 楼上的说的比较实在,楼主的意思大概是 针对抽象编程,这里一个很好的地方是 抽象封装变化。