我对敏捷开发了解不多,但好象没有人提到“接口编程”??大家来讨论一下
很多年前,不知道在什么地方,可能是书上或论坛中提到,接口编程,可以降低程序的耦合性。
在自己学习了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;
virtualBOOL 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.先定义接口,可暂不实现,把相关接口都定义出来,再多人,逐步去实现。
[解决办法]
针对抽象接口编程不是一种非常非常非常普遍的做法吗-_-几乎所有的书中都会提到啊。
实现和接口分离,客户不需要关心实现,这也是非常非常非常普遍的做法啊。
重用更重要的是考虑模块之间的依赖性,不完全由单纯的接口抽象决定。
至于敏捷的意义,“敏捷宣言”从基本概念上做了总结,测试驱动是具体的技术之一。没足够的实践经验很难来谈这个话题。软工的很多“好”技术,其核心都是依赖性。
[解决办法]
呵呵 楼上的说的比较实在,楼主的意思大概是 针对抽象编程,这里一个很好的地方是 抽象封装变化。
这是一个基本的设计思想,看看 GOF 的设计模式 就知道了。
但这些和敏捷是两个范畴的东西。
[解决办法]
敏捷的核心是快速迭代和重构,
快速迭代和重构需要有完整和全面的自动化测试的保障,
于是有了测试驱动(TDD)的概念,即要先写测试程序来程序化用户需求。
于是很自然的敏捷就引入了面向接口的编程方式。
在BOB大叔的《敏捷软件开发》一书中有很大篇的讲解面向接口编程。
面向接口的编程方式不仅将内部各个模块解耦,
对敏捷而言,更明显的作用是将测试与实现解耦。
个人实践表明,大部分的设计模式从敏捷的观点看是很容易导致过度设计的,
完全可以简化为面向接口编程。
[解决办法]
关注~~