Me han encargado crear una aplicación web vanilla js mvc. Nunca he hecho esto antes y tengo un conocimiento limitado de cómo se deben hacer las cosas (mejores prácticas y similares). Me gustaría algún consejo sobre cómo se pueden pasar datos/información entre los controladores. Sería bueno si pudiera usar el patrón Observer (he visto mucho contenido y explicaciones sobre esto y entiendo lo básico, pero ¿puedo implementarlo por mi cuenta al 100 por ciento? No.). He buscado respuestas anteriores aquí, pero aún no puedo entenderlas.
Déjame darte un ejemplo de mi código hasta ahora. Dentro de GeneralModel.js, que se usa solo para hacer AJAX y mostrar elementos:
export default class GeneralModel{ url = 'webshop_clothes.csv'; constructor(){ } sortValues = { "Id": "id", "Product name": "product_name", "Price usd": "price_usd", "Size": "size", } loadData = () =>{ return fetch(this.url) .then(data=>data.text()) .then(dataAsText=>{ let result = dataAsText.split('\r\n'); let properties = result.shift().split(','); this.data = result.map(row=>row.split(',').reduce((acc,item,i)=>{ acc[properties[i]] = item; return acc; }, {})); return this.data; }); } loadProperties = () =>{ return fetch(this.url) .then(data=>data.text()) .then(dataAsText=>{ let result = dataAsText .split('\r\n'); [,...this.properties] = result .shift() .split(','); return this.properties; }); }loadProperties se usa dentro de mi SortingController para generar los campos para la clasificación, en función de lo que se debe hacer la clasificación. Código dentro de SortingController:
import GeneralModel from "../general-output/general-model.js"; import SortView from "../sorting-output/sorting-view.js"; export default class SortController{ constructor(pub){ this.model = new GeneralModel(); this.view = new SortView(this.onClick); this.pub = pub; this.model.loadProperties() .then(data=>{ this.view.render(data); }); } onClick = (ev)=>{ this.pub.notifySubscribers(this.pub.events.SORT_ITEMS_BY, ev.target.innerText) } }Me han dicho que cargar el modelo general dentro de mi controlador de clasificación no es una buena idea. Pensé que lo reutilizaría. Sin embargo, esto significa que estoy haciendo dos solicitudes AJAX cuando solo se puede hacer una. También tengo una clase Publisher que intenta implementar el patrón de observador. Puedo modificar la publicación y agregarla o simplemente puedo agregar todo el repositorio si eso es mejor.
Me gustaría saber cuál es una mejor manera de compartir/enviar información entre Controladores si mi forma no es buena. Esa es mi pregunta. Todas y cada una de las críticas son bienvenidas, solo me gustaría aprender más sobre MVC. Cualquier recurso/libros/cursos o simplemente consejos son bienvenidos ya que soy un novato.