Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pytanie o MVA i poprawność myślenia

Ostatnio zmodyfikowano 2016-03-21 13:02
Autor Wiadomość
Alan468
Temat założony przez niniejszego użytkownika
Pytanie o MVA i poprawność myślenia
» 2016-03-19 23:17:52
Dzień Dobry. wieczór
Chciałem się skonsultować czy podany niżej kod (niedokończony) spełnia (zmierza w kierunku spełnienia) założeń MVC ,nie jest dokończony gdyż ponieważ wolę się upewnić czy dobrze myślę ,a jeśli nie to po co utrwalać błędy ... . Rozumiem że trzeba podzielić projekt na 3 typy klas Model ,Widok i Kontroler. Pierwsze dwa o sobie nie wiedzą ,trzeci łączy pozostałe.

To tan kod:
C/C++
#include <iostream>
#include <conio.h>
#include <string>

#define TAX 5

using namespace std;

class BankModel { // TODO
private:
    float fStatus;
    float fDebet;
   
public:
    BankModel()
        : fStatus( 0 )
         , fDebet( 0 )
    { } // Construktor
    ~BankModel() { } // Destruktor
   
    void setNewMaxDebet( float fNewMaxDebet ) {
        fDebet = fNewMaxDebet;
    } // Sets new max debet
   
    void addCashToAccount( float fCashToAdd ) {
        if( fCashToAdd > 0 )
             fStatus += fCashToAdd;
       
    } // Adding cash to bank account
    float takeCashFromAccount( float fCashToTake ) {
        if( fCashToTake > 0 ) {
            if(( fStatus - fCashToTake ) >= fDebet ) {
                fStatus -= fCashToTake;
                return fCashToTake;
            } else {
                float fAvilableCash = fStatus +( - fDebet );
                fStatus -= fAvilableCash;
                return fAvilableCash;
            }
        }
    } // Take cash from bank account
   
    float getAccountStatus() { return fStatus; } // Get cash status in account
    float getAccountDebet() { return fDebet; } // Get debet status in account
   
    void takeTaxForBank( float fTax ) {
        takeCashFromAccount(( fStatus * fTax ) / 100 );
    } // Take tax for bank from account
   
    int readInt() {
        int iInt;
        cin >> iInt;
        return iInt;
    }
    int readFloat() {
        float fFloat;
        cin >> fFloat;
        return fFloat;
    }
};

class BankView { // TODO
private:
   
   
public:
    void iBankMenu() {
        cout << endl;
        cout << "1 - Add cash to account." << endl;
        cout << "2 - Take cash to account." << endl;
        cout << "3 - Change max debet." << endl;
        cout << "4 - Check account status." << endl;
        cout << "5 - Take taxes." << endl;
        cout << "6 - Exit." << endl;
        cout << "What to do: ";
    }
   
    void printAccountStatus( float fCash, float fDebet ) {
        cout << "\tStatus: " << fCash << " ,Debet: " << fDebet << endl;
    }
   
};

class BankController { // TODO
private:
    BankModel * bBankM;
    BankView * bBankV;
    bool bExitProgram = false;
   
    void printAccountInformation() {
        bBankV->printAccountStatus( bBankM->getAccountStatus(), bBankM->getAccountDebet() );
    }
   
    int bankMenuChoice() {
        bBankV->iBankMenu();
        return bBankM->readInt();
    }
   
public:
    BankController( BankModel * BankModel, BankView * BankView )
        : bBankM( BankModel )
         , bBankV( BankView )
    { }
   
    void run() {
        do {
            switch( bankMenuChoice() ) {
            case 1:
                cout << "Cash to add: ";
                bBankM->addCashToAccount( bBankM->readFloat() );
                cout << endl;
                break;
            case 2:
                cout << "Cash to take: ";
                bBankM->takeCashFromAccount( bBankM->readFloat() );
                cout << endl;
                break;
            case 3:
                cout << "Set new max debet: ";
                bBankM->setNewMaxDebet( bBankM->readFloat() );
                cout << endl;
                break;
            case 4:
                printAccountInformation();
                break;
            case 5:
                cout << "Teke tax: ";
                bBankM->takeTaxForBank( TAX );
                cout << endl;
                break;
            case 6:
                bExitProgram = !bExitProgram;
                break;
               
            }
           
        } while( !bExitProgram ); // TODO
       
    }
};

int main()
{
    BankModel * bBankM = new BankModel();
    BankView * bBankV = new BankView();
    BankController * bBankC = new BankController( bBankM, bBankV );
   
    bBankC->run();
   
    delete bBankC;
    delete bBankV;
    delete bBankM;
   
    _getch();
    return 0;
}
P-146250
DejaVu
» 2016-03-21 13:02:16
Wydaje mi się, że View powinien odpowiadać za wszelkie wyświetlanie komunikatów oraz za przyjmowanie inputa.

http://stackoverflow.com​/questions/3984296​/model-view-controller-design-pattern-code-example

Czyli:
Model = dostęp do danych
View = renderowanie wszystkiego (moim zdaniem to powinno wczytywać dane użytkownika)
Controller = logika działania (to powinno otrzymać odczytane dane i przekazać je do dalszego przetwarzania)

http://www.codeproject.com​/Articles/25057​/Simple-Example-of-MVC-Model-View-Controller-Design

http://www.bogotobogo.com​/DesignPatterns​/mvc_model_view_controller_pattern.php

http://www.tomdalling.com/blog​/software-design​/model-view-controller-explain​ed​/
P-146333
« 1 »
  Strona 1 z 1