1

一、界面与逻辑

基本程序架构包含:
用户界面模块(UI):
接受用户输入及呈现数据
业务逻辑模块:
根据用户需求处理数据

二、基本设计原则

功能模块之间需要进行解耦
核心思想:强内聚,若耦合
每个模块应该只实现单一的功能
模块内部的子模块只为整体的单一功能而存在
模块之间通过约定好的接口进行交互

接口是什么?

广义:
接口是一种契约(协议、语法、格式)
狭义:
面向过程:接口是一组预定义的函数原型
面向对象:接口是纯虚类(C#和java直接支持的接口)
image.png

模块之间仅通过接口进行关联
必然存在模块会使用接口
必然存在模块实现对应的接口

模块间的关系是单向依赖的
避免模块间存在循环依赖的情况
循环依赖是糟糕设计的标准之一

计算器应用程序的整体架构:
image.png

三、计算器程序集成测试

QCalculator.cpp

#include "QCalculator.h"

QCalculator::QCalculator()
{
}

bool QCalculator::construct()
{
    m_ui = QCalculatorUI::NewInstance();

    if( m_ui != NULL )
    {
        m_ui->setCalculator(&m_cal); //ui与核心算法关联起来
    }

    return (m_ui != NULL);
}

QCalculator* QCalculator::NewInstance()
{
    QCalculator* ret = new QCalculator(); //第一阶段 new

    if( (ret == NULL) || !ret->construct() ) //第二阶段 构造
    {
        delete ret;
        ret = NULL;
    }

    return ret;
}


void QCalculator::show()
{
    m_ui->show();
}

QCalculator::~QCalculator()
{
    delete m_ui;
}

QCalculator.h

#ifndef _QCALCULATOR_H_
#define _QCALCULATOR_H_

#include "QCalculatorUI.h"
#include "QCalculatorDec.h"

class QCalculator
{
protected:
    QCalculatorUI* m_ui;
    QCalculatorDec m_cal;

    QCalculator();
    bool construct();
public:
    static QCalculator* NewInstance();
    void show();
    ~QCalculator();
};

#endif // QCALCULATOR_H

四、小结:

模块之间的交互需要通过接口完成
接口是开发中模块之间的一种“契约”
模块之间不能出现循环依赖
基本设计原则:强内聚,若耦合。


YingLi
6 声望4 粉丝

From zero to hero.