Differenza tra MVC ed ECS

2

Leggendo la risposta di Thomas Owens (molte grazie a lui) su È ragionevole creare applicazioni (non giochi) usando un'architettura componente-sistema-entità? e la sua spiegazione su ciò che è ECS rispetto ad altri modelli di progettazione dell'architettura.

Uso Angular5 e Unity molto. Mi sto chiedendo quale sia la differenza tra ECS e MVC, mi sembrano simili ma anche diversi, ho difficoltà a girarmi intorno.

    
posta Ambroise Rabier 26.09.2018 - 22:04
fonte

2 risposte

4

Chiedere la differenza tra Entity-Component-System e Model-View-Controller è come chiedere la differenza tra un martello e una sega. Sono entrambi strumenti nella tua casella degli strumenti, ma usati per cose diverse.

Con ECS e MVC, sono entrambi modelli di progettazione software, ma risolvono diversi problemi.

Tutto il resto su di loro è completamente e completamente diverso.

    
risposta data 26.09.2018 - 23:34
fonte
4

Quindi MVC è uno stile / pattern architettonico incentrato su GUI / presentazione e riguarda (a) il controllo dell'accoppiamento (interdipendenze) tra logica di presentazione (elementi relativi all'interfaccia utente) dalla logica business / dominio (la cosa principale che l'applicazione fa) e (b) in alcune varianti, anche sul controllo di ciò che accade all'interno del livello di presentazione stesso (dove potrebbe estrarre i dati e il comportamento dalla GUI in una classe separata che rappresenta un'astrazione della vista).

In realtà non prescrive nulla su come strutturare il resto dell'applicazione, o più specificamente la logica del dominio, il nucleo della vostra applicazione - che nel contesto di MVC ricade semplicemente sotto il termine "Modello".

Qui ci sono componenti specifici definiti (View, Controller / Presenter, Model), e ci sono delle aspettative su quale componente dovrebbe dipendere da quale altro (in sostanza, il Modello non dovrebbe dipendere da nulla, e la View e il Controller possono dipendere l'un l'altro a vari livelli, a seconda della variazione del modello (e talvolta possono esserci meccanismi specifici che vengono utilizzati, come l'associazione dati, o il supporto per notifiche di aggiornamento basate su una convenzione di denominazione, ecc.)

Nota: c'è anche "Web MVC" (lato server) che prende in prestito alcune delle stesse idee, ma fa anche qualcosa di diverso, ma lo menziono solo per sapere che ci sono questi cose diverse che vengono chiamate uguali, se fai ulteriori ricerche.

ECS , d'altra parte, riguarda la strutturazione di un sistema complesso con molte relazioni intricate tra varie entità e sottosistemi (relazioni che possono estendersi su diversi sottosistemi che dovrebbero essere concettualmente separati), e aspettativa che i requisiti (e quindi le specifiche del codice) possano cambiare spesso (e selvaggiamente) durante lo sviluppo. Questo è davvero il problema che sta cercando di risolvere. Di nuovo, ci sono alcune parti concettuali definite, così come le direzioni delle dipendenze. L'idea è che questi sottosistemi (in caso di game dev, cose come il renderer o il sistema fisico) non dovrebbero dipendere da varie entità che devono manipolare (perché questo porta a dover cambiare questi sottosistemi ogni volta che qualcosa cambia entità). Invece, la dipendenza viene invertita facendo in modo che i (sotto) sistemi e le entità dipendano da un'astrazione rappresentata dai vari componenti. Nella variante orientata ai dati, i Componenti stessi sono in realtà solo buste dati e non comportano alcun comportamento, ma puoi leggere i dettagli nel post (davvero fantastico) a cui ti sei collegato nella tua domanda. La linea di fondo è, in questo approccio, un (sotto) sistema è qualcosa che fornisce un servizio ad un altro codice, prendendo in un (sotto) componente specifico del sistema (potrebbe quindi eseguire qualche elaborazione sul componente, magari modificare alcuni dati , o potrebbe usarlo come una sorta di configurazione che specifica cosa dovrebbe essere fatto, o entrambi); Le entità sono oggetti che contengono una raccolta di tali componenti.

Come nota finale: se dovessi utilizzare questi modelli insieme, allora, in MVC, molto probabilmente utilizzeresti l'approccio ECS all'interno del componente "Modello" (la logica del dominio).

    
risposta data 27.09.2018 - 02:57
fonte