S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

代码坏味3

Posted on 2008-12-20 23:57 S.l.e!ep.¢% 阅读(1444) 评论(4)  编辑 收藏 引用 所属分类: Design Pattern
class CServerContext
{
public:
    CServerContext();
    ~CServerContext();
};

它需要有写Log的功能, 于是
class CServerContext : public ILogInterface
{
public:
    CServerContext();
    ~CServerContext();

    virtual void log(const char* pszLog);
};

它也需要网络通信的功能, 于是
class CServerContext : public ILogInterface,  public INetWorkInterface
{
public:
    CServerContext();
    ~CServerContext();

    virtual void log(const char* pszLog);

    virtual void send(const void* pBuf, int nSize);
    virtual void onrecv(const void* pBuf, int nSize);
};

它还需要访问数据抽象层的功能,于是乎
class CServerContext : public ILogInterface,  public INetWorkInterface
                                    puclic IDBAbstractLayer
{
public:
    CServerContext();
    ~CServerContext();

    virtual void log(const char* pszLog);

    virtual void send(const void* pBuf, int nSize);
    virtual void onrecv(const void* pBuf, int nSize);

    virtual bool writeData(int nData);
    virtual int    readData();   
};

Feedback

# re: 代码坏味3  回复  更多评论   

2008-12-20 20:27 by 陈梓瀚(vczh)
这三个接口都可以是IStream。

# re: 代码坏味3  回复  更多评论   

2008-12-20 22:48 by S.l.e!ep.¢%
楼上的,ILogInterface, INetWorkInterface, IDBAbstractLayer 是三个不同的东西,总不是直接一个 IStream 搞定吧??

# re: 代码坏味3[未登录]  回复  更多评论   

2008-12-22 15:02 by cppexplore
一句话,多用组合,少用继承。

# re: 代码坏味3  回复  更多评论   

2008-12-22 20:21 by 肥仔
我的几个观点,供参考
1、从代码看来,你的设计是面向功能的,按功能分解是结构型程序设计方法的模式;
2、OOP应该是面向对象的,非:pulic 功能,应该是:public 基础对象;
3、好的设计不应该出现多继承;

请参见转贴的这篇博文,有更好的对如何继承的原则描述
http://www.cppblog.com/woaidongmao/archive/2008/12/16/69567.html

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理