Yazılım Mimarisindeki Modeller: Model Görünüm Denetleyicisi
Modeller, modern yazılımın geliştirilmesinde ve yazılımın mimarisinde önemli bir soyutlamadır. Açıkça tanımlanmış terminoloji, temiz dokümantasyon ve öğrenme en iyisinden sunarlar. Model View Controller (MVC), “Modellere Odaklı Yazılım Mimarisi, Cilt 1” kitabının klasik mimari motiflerinden biridir. İnsan makinesi için esnek bir arayüze sahip etkileşimli uygulamalara yöneliktir.
Rainer Grimm yıllardır yazılım mimarı, ekip ve eğitim müdürü olarak çalıştı. C ++ programlama dilleri, Python ve Haskell hakkında makaleler yazmayı seviyor, ancak uzman konferanslarla konuşmayı da seviyor. Modern C ++ blogunda, C ++ tutkusuyla yoğun bir şekilde ilgileniyor.
MVC, bir kullanıcı arayüzü programının mantığını, tek tek bileşenlerin modeline, görüntülemesine ve denetleyicisine böler. Model, uygulamanın verilerini ve kurallarını yönetir. Görünüm verileri temsil eder ve denetleyici kullanıcı ile etkileşime girer.
Model Görünüm Denetleyicisi
Kapsam
Model
başlatma
MVC'nin başlatılması sırasında aşağıdaki adımlar gerçekleşir:
Bir kullanıcı etkinliği durumunda aşağıdaki adımlar gerçekleşir:
Aşağıdaki program mvc.cpp MVC kullanı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 bakış açısını üreticisinde alır (1) ve hata listesini gösterir defects_ (5) üç türde (2-4). Denetleyici her çağrıyı ekler main İşlev ve model tarafından belirtilen verileri görüntülemek için görünümlerini kullanır (6 – 8).
Aşağıdaki ekran görüntüsü programın baskısını göstermektedir:
varyasyon
Sunum kontrolü kontrolü, “Model, Cilt 1'e yönelik yazılım mimarisinin, MVC'yi hatırlar ve her ajanın sunum, soyutlama (model) ve veri kontrolünden oluştuğu ajanların hiyerarşik bir yapısını kullanır.
Avantajlar ve dezavantajlar
Avantajlar
GUI veya sunucu gibi olaylar tarafından kontrol edilen uygulamalar genellikle reaktör mimarlık modelini kullanır. Bir reaktör farklı araştırmaları aynı anda kabul edebilir ve bunları farklı bir yöneticiye dağıtabilir.
(RME)
Ne yazık ki, bu bağlantı artık geçerli değil.
Boşa harcanan eşyalara olan bağlantılar, 7 günlük daha büyükse veya çok sık çağrılmışsa gerçekleşmez.
Bu makaleyi okumak için bir Haberler+ paketine ihtiyacınız var. Şimdi yükümlülük olmadan bir hafta deneyin – yükümlülük olmadan!
Yazılım Mimarisindeki Modeller: Model Görünüm Denetleyicisi
Modeller, modern yazılımın geliştirilmesinde ve yazılımın mimarisinde önemli bir soyutlamadır. Açıkça tanımlanmış terminoloji, temiz dokümantasyon ve öğrenme en iyisinden sunarlar. Model View Controller (MVC), “Modellere Odaklı Yazılım Mimarisi, Cilt 1” kitabının klasik mimari motiflerinden biridir. İnsan makinesi için esnek bir arayüze sahip etkileşimli uygulamalara yöneliktir.

Rainer Grimm yıllardır yazılım mimarı, ekip ve eğitim müdürü olarak çalıştı. C ++ programlama dilleri, Python ve Haskell hakkında makaleler yazmayı seviyor, ancak uzman konferanslarla konuşmayı da seviyor. Modern C ++ blogunda, C ++ tutkusuyla yoğun bir şekilde ilgileniyor.
MVC, bir kullanıcı arayüzü programının mantığını, tek tek bileşenlerin modeline, görüntülemesine ve denetleyicisine böler. Model, uygulamanın verilerini ve kurallarını yönetir. Görünüm verileri temsil eder ve denetleyici kullanıcı ile etkileşime girer.

Model Görünüm Denetleyicisi
Kapsam
- Kullanıcı arayüzleri genellikle değiştirilmelidir
- Farklı kullanıcı arayüzleri desteklenmelidir e
- Veri modeli sabittir.
- Uygulama bileşen modeline (veri modeli), görünüm (çıktı bileşenleri) ve denetleyiciye (giriş bileşenleri) ve
- Birkaç çıkış bileşeni aynı veri modelini kullanabilir.


Model
- Modelin merkezi bileşenidir,
- Veri (ve şirket mantığı) içerir e
- Bağımsız View VE Controller.
- Verilerin sunulmasından ve kullanıcının etkileşiminden sorumludur
- Gözlemliyor Model VE
- A View Biriyle Controller Buna bağlı Model manipüle.
- Bir veya daha fazla görüntülemeyi yönetir
- Kullanıcının etkileşimlerini kabul edin ve bunları buna hazırlayın Model veya görüntüleyin,
- Gözlemliyor Model VE
- Güncelleme mantığını uygular.
başlatma
MVC'nin başlatılması sırasında aşağıdaki adımlar gerçekleşir:
- Model oluşturulur ve verileri başlatılır.
- Görünümler oluşturulur ve modeli gözlemler.
- Denetleyici oluşturulur ve model ve görünümlere referans alır.
- Kontrolör modeli gözlemler.
- Uygulama olayların işlenmesiyle başlar.
Bir kullanıcı etkinliği durumunda aşağıdaki adımlar gerçekleşir:
- Denetleyici kullanıcının girişini kabul eder, detaylandırır ve modeli tetikler.
- Model dahili verilerini değiştirir.
- Model, dahili verilerin değiştirilmesi konusunda tüm görünümleri ve denetleyicileri uyarır.
- Görünümler ve kontrolörler kendilerini günceller. Örnek: Pin bir ATM'de üçüncü kez yanlış eklenirse, bu, ekranın hesabın engellendiği gösterildiği anlamına gelebilir. ATM banka kartına el koyar.
- Denetleyici olayları işlemeye devam ediyor.
Aşağıdaki program mvc.cpp MVC kullanı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 bakış açısını üreticisinde alır (1) ve hata listesini gösterir defects_ (5) üç türde (2-4). Denetleyici her çağrıyı ekler main İşlev ve model tarafından belirtilen verileri görüntülemek için görünümlerini kullanır (6 – 8).
Aşağıdaki ekran görüntüsü programın baskısını göstermektedir:

varyasyon
Sunum kontrolü kontrolü, “Model, Cilt 1'e yönelik yazılım mimarisinin, MVC'yi hatırlar ve her ajanın sunum, soyutlama (model) ve veri kontrolünden oluştuğu ajanların hiyerarşik bir yapısını kullanır.
Avantajlar ve dezavantajlar
Avantajlar
- Endişenin ayrılması: Model denetleyiciden ve görünümlerden titizlikle ayrılmıştır. Bu nedenle, birçok görünüm veya denetleyici aynı anda desteklenebilir ve değiştirilebilir.
- Görünümler senkronize edilir, çünkü aynı anda güncellenirler.
- MVC, küçük bir insan arayüzü için çok karmaşık ve aşırı yük olabilir.
- Modeldeki bir değişiklik, manzaralar ve çalışanlardaki operasyon şelalesini tetikleyebilir.
- Görünüm ve denetleyici güçlü bir şekilde bağlanmıştır. Bunlardan birinde bir değişiklik diğerini yok edebilir.
GUI veya sunucu gibi olaylar tarafından kontrol edilen uygulamalar genellikle reaktör mimarlık modelini kullanır. Bir reaktör farklı araştırmaları aynı anda kabul edebilir ve bunları farklı bir yöneticiye dağıtabilir.
(RME)
Ne yazık ki, bu bağlantı artık geçerli değil.
Boşa harcanan eşyalara olan bağlantılar, 7 günlük daha büyükse veya çok sık çağrılmışsa gerçekleşmez.
Bu makaleyi okumak için bir Haberler+ paketine ihtiyacınız var. Şimdi yükümlülük olmadan bir hafta deneyin – yükümlülük olmadan!