溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

QT之界面與業(yè)務(wù)邏輯的分離(十二)

發(fā)布時間:2020-08-05 09:08:05 來源:網(wǎng)絡(luò) 閱讀:5051 作者:上帝之子521 欄目:開發(fā)技術(shù)
    我們在實現(xiàn)計算器的時候,得考慮到界面與邏輯的分離。

那么基本程序的架構(gòu)一般包含:1、用戶界面模塊(UI),用來接受用戶輸入及呈現(xiàn)數(shù)據(jù);2、業(yè)務(wù)邏輯模塊(Business Logic),根據(jù)用戶需求處理數(shù)據(jù)。
那么基本的設(shè)計原則是:功能模塊之間需要進(jìn)行解耦;核心思想是強(qiáng)內(nèi)聚,弱耦合:1. 每個模塊應(yīng)該只實現(xiàn)單一的功能;2. 模塊內(nèi)部的子模塊只為整體的單一功能而存在;3. 模塊之間通過約定好的接口進(jìn)行交互。
那么在工程開發(fā)中接口是什么呢?從廣義上來說,接口是一種契約(協(xié)議,語法,格式等)。從狹義上來說,分為面向?qū)ο蠛兔嫦蜻^程兩個方面。對于面向過程而言,接口是一組預(yù)定義的函數(shù)原型。對于面向?qū)ο蠖?,接口是純虛類(C# 和 Java 直接支持接口)。
那么我們實現(xiàn)的用戶界面與業(yè)務(wù)邏輯的交互可以用下圖來描述:
QT之界面與業(yè)務(wù)邏輯的分離(十二)
模塊之間僅通過接口進(jìn)行關(guān)聯(lián):必然存在模塊會使用接口,必然存在模塊實現(xiàn)對應(yīng)的接口。
模塊間的關(guān)系是單向依賴的:避免模塊間存在循環(huán)依賴的情況,循環(huán)依賴是最糟糕設(shè)計的標(biāo)準(zhǔn)之一。
我們建立一個 ICalculator 頭文件,包含兩個純虛函數(shù):virtual bool expression(const QString& exp) = 0; virtual QString result() = 0;
建立 QCalculator 類,頭文件如圖所示:
QT之界面與業(yè)務(wù)邏輯的分離(十二)
Qcalculator.cpp 文件實現(xiàn)如下:
bool QCalculator::construct()
{
m_ui = QCalculatorUI::NewInstance();

            if( m_ui != NULL )
            {
                    m_ui->setCalculator(&m_cal);
            }

            return (m_ui != NULL);
    }

    QCalculator* QCalculator::NewInstance()
    {
            QCalculator* ret = new QCalculator();

            if( (ret == NULL) || !ret->construct() )
            {
                    delete ret;
                    ret = NULL;
            }

            return ret;
    }

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

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

在 QCalculatorUI.cpp 中我們加入
void setCalculator(ICalculator* cal)
{
m_cal = cal;
}

ICalculator* getCalculator()
{
        return m_cal;
}

那么我們最終運(yùn)行得到的可執(zhí)行程序就是一個已經(jīng)可以進(jìn)行計算的計算器了,我們輸入 3 * (2 + 3)/ 5, 結(jié)果應(yīng)該為 3 。如下:
QT之界面與業(yè)務(wù)邏輯的分離(十二) QT之界面與業(yè)務(wù)邏輯的分離(十二)

 我們再除 0 ,結(jié)果為 Error。

QT之界面與業(yè)務(wù)邏輯的分離(十二)QT之界面與業(yè)務(wù)邏輯的分離(十二)
那么關(guān)于這個小項目計算器的學(xué)習(xí),我們就到此結(jié)束了。后面繼續(xù)學(xué)習(xí)QT其他相關(guān)的知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI