B2 · 第10集 · 5:14
JavaFX中的MVC架构
本集讲解JavaFX中模型-视图-控制器(MVC)的设计思想与实际应用,强调代码分离与组件复用。
来源:Nicolas Hurtubise / classe.iro.umontreal.ca · 许可:CC BY-SA 4.0
字幕
Même chose si je vais exécuter mon programme en mode ligne de commande,
如果我在命令行模式下运行我的程序,情况也是一样的,
si j'affiche 10, 20 puis
如果我依次显示10、20,然后
30, ce qui est affiché ici c'est
30,那么这里显示的
la moyenne de mes trois nombres.
这三个数字的平均值。
Donc vraiment ici, j'ai la possibilité de modifier le modèle sans toucher à
因此,这里我确实可以修改模型,而无需改动
l'interface graphique,
图形界面,
sans toucher au contrôleur, et inversement, je peux
也不用改动控制器;反过来,我也可以
changer complètement l'interface, faire
彻底更换界面,比如用另一套图形库
une autre interface dans une autre librairie graphique, sans toucher au modèle.
重新开发一个新界面,而完全不碰模型。
Ça peut être particulièrement pratique si
这在实际中特别有用,例如,
vous faites un petit jeu, puis que vous voulez porter ce jeu- là sur Android,
你开发了一个小游戏,之后又想把它移植到安卓平台,
par exemple. Vous pouvez commencer par développer votre petit jeu avec JavaFX.
比如。你可以先用JavaFX来开发你的小游戏。
puis plus tard décider de réécrire la vue dans quelque chose de complètement
之后再决定将视图重写为一种完全不同的实现,
différent, dans une librairie qui est complètement différente,
采用一套完全不同的图形库,
avec d'autres fonctions, avec d'autres façons de faire,
它提供不同的功能和不同的实现方式,
sans toucher à la logique de votre jeu.
同时完全不改动游戏的核心逻辑。
Fait que voilà, vous avez la possibilité en MVC, si vous faites bien ça,
所以你看,在MVC架构中,只要你正确实现,
d'avoir un contrôleur qui peut faire le pont entre plusieurs vues,
控制器就能充当多个视图之间的桥梁,
plusieurs modèles, puis vous avez la possibilité de réutiliser votre modèle tel quel
也能连接多个模型;而且你还可以直接复用你的模型,
dans d'autres programmes.
用于其他程序。
Cette architecture- là, cette façon
这种架构、这种编写代码的方式
d'écrire votre code est assez puissante et assez flexible,
功能强大且灵活度高,
et c'est ça qui va vous être demandé de faire pour la suite de vos programmes en
后续你在JavaFX中开发程序时,就要求你采用这种方式。
JavaFX. Bon, une petite note sur modèle vue contrôleur en pratique.
好了,关于MVC在实践中的一个小提示。
Tout le monde s'entend sur le fait que c'est une bonne idée de séparer le code qui
大家一致认为,把定义界面的代码
définit l'interface, du code qui gère les interactions entre l'affichage et la
与处理界面显示和业务逻辑之间交互的代码,
logique, et du code qui s'occupe de la logique du programme.
以及负责程序业务逻辑的代码,分开来写是明智的。
Dans le fond, tout le monde s'entend sur le fait que c'est une bonne idée de séparer
归根结底,大家一致认为,将模型与控制器的视图分开是个好主意。
la vue du modèle et du contrôleur.
视图、模型与控制器。
Le concept est cependant pas défini de façon
然而,这一概念的定义
parfaitement unique, parfaitement exacte.
并不完全统一,也不完全精确。
Et le code que je viens de vous montrer pour mon petit compteur,
而我刚刚向你们展示的这个小计数器代码,
c'est un exemple d'application de modèle vue contrôleur.
就是一个模型-视图-控制器(MVC)架构的应用实例。
D'une librairie à l'autre, d'un contexte à l'autre,
不同类库之间、不同应用场景之间,
vous allez tomber sur toutes sortes d'implantations du modèle vue contrôleur.
你们会遇到各种各样的MVC实现方式。
Vous avez ici cinq diagrammes différents qui essaient tous d'expliquer ce que c'est
这里展示了五张不同的示意图,
le modèle vue contrôleur, et
它们都试图解释什么是模型-视图-控制器,
qui ont toutes des flèches dans tous les sens qui partent n'importe comment.
但每张图里的箭头方向杂乱无章、毫无规律。
Dans le fond, le concept à la base,
归根结底,其核心思想,
c'est vraiment d'être capable d'isoler les différentes composantes,
确实是能够将各个组件彼此隔离,
mais la façon dont on définit les événements,
但事件的定义方式、
la façon dont on définit qui appelle qui, qui connaît quoi, va
比如谁调用谁、谁了解谁,
changer selon le contexte.
会随具体场景而变化。
Dans le fond, la structure de code que je vous montre dans mon exemple sur Studium,
实际上,我在Studium示例中展示的这种代码结构,
c'est un exemple, mais ça
只是一个示例,
peut pas tout le temps s'appliquer.
并不能在所有情况下都适用。
mettons qu'on essaie d'appliquer le modèle vue contrôleur sur un site web plutôt que
假设我们尝试把MVC模式应用到网站上,而不是应用到图形界面软件中,
sur un logiciel à l'interface graphique.
那么情况就不同了。
la façon d'interagir avec le site web va principalement se faire via la barre du
用户与网站的交互主要通过浏览器地址栏和超链接进行;
navigateur via les hyperliens mettons que vous allez sur perdu com
比如你访问perdu.com,
C'est pas la vue qui définit c'est quoi l'événement qui peut se produire,
并非由视图来决定哪些事件可能发生,
c'est vraiment juste que l'événement qui peut se produire,
真正能发生的事件其实很简单,
c'est on veut afficher telle page, on veut afficher telle vue.
“我们要显示某一页”或“我们要显示某个视图”。
Fait que la façon de faire le modèle vue contrôleur ici,
这里,模型-视图-控制器(MVC)模式的实现方式
ce sera pas forcément de commencer par les vues qui définissent les événements.
未必是从定义事件的视图开始。
Dans le cas d'un logiciel graphique,
对于图形化软件而言,
vous avez pas le choix de partir de l'interface graphique.
你别无选择,只能从图形界面入手。
L'utilisateur va interagir directement avec la vue, donc c'est
用户会直接与视图交互,因此
la vue qui va aller appeler le contrôleur puis lui dire qu'il vient de se passer ça.
由视图调用控制器,并告知它刚刚发生了什么。
Mais donc dans les faits, il y a vraiment plusieurs façons d'arriver au même
实际上,达到同一目标的方法确实有多种,
résultat, puis toutes les façons sont pas tout le temps possibles selon le contexte
但并非所有方法在任何情境下都可行,
dans lequel vous êtes.
这取决于你当前所处的具体环境。
Notez finalement que modèle- vue- contrôleur,
最后请注意,模型-视图-控制器(MVC)
c'est une architecture logicielle parmi d'autres.
只是众多软件架构中的一种。
Le code MVC qu'on va vous demander d'écrire dans le cadre du cours,
本课程要求你们编写的MVC代码,
le code qu'on vous montre dans le cadre du cours,
以及课程中向你们展示的代码,
ça va faire office de code- école, ça va vous permettre de saisir
将作为教学示例代码,帮助你们更好地理解这一概念,
mieux le concept, puis ça va vous donner des bases sur la
并为你们打下各组件职责分离的基础。
séparation des différentes composantes.
(这种分离)
Mais sachez que si vous vous intéressez à JavaFX en dehors du cours,
另外,请注意:如果你在课程之外对JavaFX感兴趣,
il y a d'autres patterns de développement qui sont utilisés en pratique.
实践中还会用到其他开发模式。
Les bonnes pratiques de JavaFX vont demander plus de notions que ce qu'on a le temps
JavaFX的最佳实践涉及的知识点,
de voir, vont demander d'autres types d'architecture que ce qu'on a le temps de
远超本课程所能涵盖的范围,
voir, ça dépasse les buts du cours,
也涉及其他类型的架构设计,这些同样超出本课程目标。
donc si jamais c'est quelque chose qui vous intéresse,
因此,如果这让你感兴趣,
si vous voulez continuer à écrire du JavaFX,
如果你想继续深入学习JavaFX,
mais sachez que ce que vous allez écrire dans le cadre du cours,
请务必知道:你在本课程中编写的代码,
c'est plus un code école, c'est plus quelque chose qui va vous permettre de
更多是教学性质的示例代码,旨在帮你理解通用概念,
comprendre le concept général que de vraiment
而非真正专门教你掌握JavaFX本身。
apprendre JavaFX en particulier.
(它不等于真正的JavaFX实战能力)
Donc voilà pour ça, ça fait le tour des interfaces graphiques.
因此,关于图形界面的内容就介绍到这里。
Si vous avez des questions, je vous invite à aller les poser sur le forum sur
如果您有任何问题,欢迎前往
Studium. S'il y a des choses qui sont pas claires,
Studium 论坛提问。如果某些内容不够清晰,
on va répondre à vos questions sur le forum.
我们会在论坛上为您解答。