Yazılım mimarisinde kalıp: Model-View-Controller

Adanali

Active member
Yazılım mimarisinde kalıp: Model-View-Controller


  1. Yazılım mimarisinde kalıp: Model-View-Controller

Modeller, modern yazılım geliştirme ve yazılım mimarisinde önemli bir soyutlamadır. İyi tanımlanmış terminoloji, temiz belgeler ve en iyisinden öğrenme sunarlar.Model Görünüm Denetleyicisi (MVC), Pattern-Oriented Software Architecture, Cilt 1 kitabındaki klasik mimari modellerden biridir. insan arayüzü -esnek makine.







Rainer Grimm, uzun yıllardır yazılım mimarı, ekip lideri ve eğitim yöneticisi olarak çalışmaktadır. C++, Python ve Haskell programlama dilleri üzerine makaleler yazmaktan hoşlanır, aynı zamanda sık sık uzmanlık konferanslarında konuşmaktan da keyif alır. Modernes C++ blogunda yoğun bir şekilde C++ tutkusundan bahsediyor.







MVC, bir kullanıcı arabiriminin program mantığını tek tek model, görünüm ve denetleyici bileşenlerine ayırır. Model, uygulama verilerini ve kurallarını yönetir. Görünüm, verileri işler ve denetleyici, kullanıcıyla etkileşime girer.








Model görünümü denetleyicisi


Kapsam

  • Kullanıcı arayüzlerinin sık sık değiştirilmesi gerekiyor,
  • farklı kullanıcı arayüzleri desteklenmelidir e
  • veri modeli kararlıdır.
Çözüm


  • Uygulama, Model (veri modeli), Görünüm (çıktı bileşenleri) ve Denetleyici (giriş bileşenleri) bileşenlerine ayrılmıştır ve
  • birden fazla çıktı bileşeni aynı veri modelini kullanabilir.
yapı














Model

  • modelin merkezi bileşenidir,
  • verileri (ve iş mantığını) içerir e
  • bağımsızdır View VE Controller.
View

  • veri sunumundan ve kullanıcı etkileşiminden sorumludur
  • Ona bak Model VE
  • bir View biriyle birlikte Controller buna bağlı Model manipüle etmek.
Controller

  • bir veya daha fazla görünümü yönetir
  • Kullanıcı etkileşimlerini alır ve onları kullanıma hazırlar. Model veya yukarı bak,
  • Ona bak Model VE
  • güncelleme mantığını uygular.
MVC’nin iki ilginç yönü vardır: başlatma ve kullanıcı girişi:

başlatma

MVC’nin başlatılması sırasında aşağıdaki adımlar gerçekleştirilir:

  • Model oluşturulur ve verileri başlatılır.
  • Görünümler oluşturulur ve modele bakılır.
  • Denetleyici oluşturulur ve model ve görünümlere ilişkin referansları alır.
  • Kontrolör modeli gözlemler.
  • Uygulama olayları işlemeye başlar.
kullanıcı girişi

Bir kullanıcı olayında aşağıdaki adımlar gerçekleşir:

  • Denetleyici, kullanıcı girişini kabul eder, işler ve modeli etkinleştirir.
  • Model, dahili verilerini değiştirir.
  • Model, tüm görünümleri ve denetleyicileri dahili veri değişikliği konusunda bilgilendirir.
  • Ekranlar ve kontrolörler kendilerini günceller Örnek: Bir ATM’de PIN’in üçüncü kez yanlış girilmesi şu anlama gelebilir: Ekran, hesabın kilitli olduğunu gösterir. ATM banka kartına el koyacaktır.
  • Denetleyici olayları işlemeye devam eder.
Örnek


Aşağıdaki program mvc.cpp MVC’yi uygulayın.


// mvc.cpp

#include <iostream>
#include <string>
#include <unordered_map>


class DefectModel {
public: // (5)
mutable std::unordered_map<std::string, std::string>
defects_ = { {"XYZ" , "File doesn't get deleted."},
{"XAB" , "Registry doesn't get created."},
{"ABC" , "Wrong title get displayed."} };

std::string getDefectComponent(const std::string& component)
const {
return defects_[component];
}

int getSummary() const {
return defects_.size();
}

std::unordered_map<std::string, std::string> getAllDefects()
const {
return defects_;
}

};

class DefectView {
public:
void showSummary(int num) const {
std::cout << "There are " + std::to_string(num) +
" defects in total!n";
}

void showDefectComponent(const std::string& defect) const {
std::cout << "Defect of component: " + defect + 'n';
}

void showDefectList(const std::unordered_map<std::string,
std::string>& defects) const {
for (const auto& p: defects) {
std::cout << "(" + p.first + ", " + p.second + ")n";
}
}
};

class DefectController {
const DefectModel& defectModel;
const DefectView& defectView;
public:
DefectController(const DefectModel& defModel,
const DefectView& defView):
defectModel{defModel}, defectView{defView} { }

void showDefectComponent(const std::string& component)
const {
defectView.showDefectComponent(
defectModel.getDefectComponent(component)); // (6)
}

void showDefectSummary() const {
defectView.showSummary(defectModel.getSummary()); // (7)
}

void showDefectList() const {
defectView.showDefectList(
defectModel.getAllDefects()); // (8)
}

};

int main() {

std::cout << 'n';

DefectModel defectModel;
DefectView defectView;


DefectController defectController(defectModel,
defectView); // (1)
defectController.showDefectComponent("ABC"); // (2)
std::cout << 'n';
defectController.showDefectSummary(); // (3)
std::cout << 'n';
defectController.showDefectList(); // (4)

std::cout << 'n';

}


Denetleyici, modelini ve görünümünü yapıcısında (1) alır ve hata listesini görüntüler. defects_ (5) üç şekilde (2 – 4). Denetleyici, her çağrıyı dosyaya iter main işlevini kullanır ve görünümlerini model (6 – 8) tarafından sağlanan verileri görüntülemek için kullanır.

Aşağıdaki ekran görüntüsü programın çıktısını göstermektedir:








varyasyon

Sunum-Soyutlama-Kontrol, Desen Odaklı Yazılım Mimarisi, Cilt 1’den başka bir kalıptır ve MVC’ye benzer. Her bir aracının sunum, soyutlama (model) ve veri kontrolünden oluştuğu, aracıların hiyerarşik bir yapısını kullanır. denetleyiciyi kullanan diğer

Avantajlar ve dezavantajlar


Avantajlar


  • Çıkar Ayrımı: Model, denetleyiciden ve görünümlerden kesin olarak ayrılmıştır. Bu nedenle, birçok görünüm veya denetleyici aynı anda desteklenebilir ve çalışma zamanında değiştirilebilir.
  • Görünümler, aynı anda güncellendikleri için senkronize edilir.
Dezavantajları

  • MVC, küçük bir insan-makine arabirimi için çok karmaşık ve dağınık olabilir.
  • Modelde yapılan bir değişiklik, bağımlı görünümler ve denetleyiciler üzerinde bir dizi işlemi tetikleyebilir.
  • Görünüm ve denetleyici sıkı bir şekilde birleştirilmiştir. Birindeki değişiklik diğerini yok edebilir.
Sıradaki ne?


GUI’ler veya sunucular gibi olay odaklı uygulamalar genellikle Reactor mimari modelini kullanır. Bir reaktör aynı anda birden çok isteği kabul edebilir ve bunları farklı işleyicilere dağıtabilir.


(rm)



Haberin Sonu
 
Üst