Alguns antecedentes:
Um colega e eu temos interpretações diferentes do MVC, o que significa que, dado o mesmo problema, estamos apresentando soluções radicalmente diferentes. Ele vem de um plano de fundo Java, onde todos os componentes do MVC podem modelar um objeto tradicionalmente, e eu sou de um plano de fundo Haskell e tenho pouca ou nenhuma experiência com OOP.
O espaço do problema:
O problema que estamos tentando modelar funciona um pouco como um ambiente de desktop. Temos uma noção da sessão do usuário (talvez o login, o plano de fundo da área de trabalho) e os processos na área de trabalho (por exemplo, iTunes, Finder, etc.), cada um com suas próprias propriedades de modelo (minimizadas, etc.).
Concordamos com o seguinte ponto: achamos que a HMVC é a melhor representação. Concordamos que temos dois objetos MVC Session((área de trabalho) e Process(aplicativo) e que não queremos Processque você tenha uma noção Sessionou um backlink.
Uma vez que discordamos, no entanto, é o significado principal do MVC e como isso afeta o local em que mantemos a lista de processos na área de trabalho dos usuários .
Sua interpretação:
Ele argumenta um ponto muito válido que tradicionalmente é fácil de modelar em código e em nosso sistema de renderização. Ele diz que a lista de processos deve ser uma lista de ProcessControllerobjetos dentro dos SessionControllerquais, por sua vez, têm seus modelos como objetos separados dentro deles. Isso significa que há uma quantidade significativa de estado dentro de ambos SessionControllere SessionModelque é relevante para o que SessionViewprecisa renderizar.
Isso parece estar muito em harmonia com o que conseguimos ler na internet em uma breve pesquisa.
Minha interpretação:
Minha interpretação requer a maior mudança de arquitetura e parece mais difícil de implementar no código, mas acredito que seja mais conceitualmente correto. Gostaria que alguém explicasse por que não é esse o caso, ou apresente um modelo diferente (se não o MVC) que se alinha com essa interpretação e destaque algumas forças e fraquezas dos dois padrões para que possamos tomar a decisão mais informada (nenhum de nós forte experiência em arquitetura de software).
Eu vejo o MVC como uma tríade com três componentes intercambiáveis: o Model, o Controllere o View. Isso concorda com o que eu posso ler na internet, e algumas fontes dirão coisas como 'visões, controladores e modelos com a mesma interface devem ser intercambiáveis para efeitos diferentes'. A maneira como imagino que isso funcione é a seguinte:
- Ao trocar o modelo, você está alterando a maneira como os dados são validados ou armazenados
- Ao trocar o controlador, você está alterando o comportamento da página , mas nada que possa alterar o conteúdo de dados conceituais da página.
- Quando você troca a visualização, está alterando a maneira como a página é exibida
A partir disso, raciocinei que, dado algum Modele View, a troca apenas do controlador não deve alterar os dados que a página renderiza inicialmente, porque o controlador deve alterar apenas o comportamento e não o 'conteúdo' da página. Eu acho que isso está alinhado com a visualização conceitual do controlador como um 'controlador de estação' em um sistema ferroviário, um plano da via férrea como modelo e a manifestação física real e a aparência / aparência dos trilhos (em diferentes sabores, digamos ' Real 'ou' Virtual 3D ') como a exibição.
Aqui é onde discordamos:
Argumento que, como os dados que serão exibidos para o usuário no SessionViewsão alterados pelos diferentes processos na área de trabalho (eu modelo os processos como dados relevantes ), eles SessionModeldevem conter a lista de instâncias de ProcessModel. Isso significa que o uso de qualquer aleatório SessionControllercom o mesmo SessionViewdeve mostrar conceitualmente os mesmos dados (processos na área de trabalho).
Ele argumenta que faz mais sentido Modelnunca se conhecer outro modelo. Isso significa que SessionControllerele teria uma lista de ProcessControllers e cada Controllerobjeto tem um link para seu modelo. Dado a SessionViewe o mesmo, SessionModelmas diferente, SessionControlleros dados exibidos para o usuário devem ser radicalmente diferentes.
Por favor, discuta a favor / contra cada interpretação e ajude-nos a alcançar o resultado mais informado.
Obrigado pelo seu tempo!