JavaFX:MVC 命名约定
JavaFX: MVC naming conventions
我正在构建一个库并且(我想我是)遵循 MVC。
- 模型定义 specs/instructions.
- 视图解释指令以创建添加到场景的视觉对象。
- 控制器提供了一个 GUI(Java 控件,即滑块),用户可以通过它更改模型。
图书馆的组织结构如下:
控制器 -> 模型 -> 视图
Wrt 命名约定,class 名称应该反映库中 class 的功能角色:例如 ShapeView,还是应该反映其实际的 class 类型(形状组)?
在这种情况下,ShapeView 解释来自 ShapeModel class 的指令并创建形状,然后将它们添加到其子项中。然后将 ShapeView/Group 添加到窗格中。
目前我正在为命名约定使用角色,原因有以下三个:
- 从名称中更清楚地理解class的作用。
- class 类型是有限的,因此如果与它们绑定,我的命名约定将受到限制。
- 我可以重建同一个库,而不必受限于某种编程语言的 classes 的名称。
我的直觉是正确的吗?我意识到有很多方法可以解决这个问题,所以我正在寻求专家的智慧。
Model defines the specs/instructions.
View interprets the instruction to create a visual that is added to
the scene.
Controller provides a GUI (Java controlsv ie. Sliders) through which
the user changes the model.
So the library is organised as: Controller -> Model -> View
您似乎正确地构建了 MVC 模式。然而,我一直发现 MVC 模式的细微差别比其他 MV 更多... un-intuitive...模式。因为 'view-controller' 的概念通常包含但不是 MVC 名称的一部分,并且 'how' 控制器的 UI/UX 是 "different" 而视图的通常定义不明确如我所愿(因为现在用户通常与数据进行交互)并且使用 MVC,您在 'view' 和 'input' 中有 UI/UX 'output' 'controller'.
您可能还想考虑的另一种设计是 MVP 模式。 Model=data,View=passiveUI,Presenter处理两者的交互。
我发现 MVP 更容易 implement/think 关于(个人),因为它具有 non-cyclical 性质(好吧......不是真的......因为逻辑流基本上仍然是一个循环,但是 Presenter 的 API 边界比 MVP 中的 'View' 边界更清晰)这有助于解耦 MVP 中的 V 和 M,而不是 MVC 中的可能。
此外,这还允许您在对方不知情的情况下独立更改模型或视图。 (从技术上讲,MVC 允许这样做,但如果不在模型和视图之间包含 'view-controller',就不能像 obvious/clear 那样做到这一点。)
例如,您有一个 'widgets' 的数据库以及将其作为模型访问的逻辑。并且您有一个可以显示来自用户的 them/get 交互的视图。如果您将所有(单向)API(总共 4 个)定义为接口,那么您可以在工作时轻松地交换视图(或让另一个 team/dev)在 UI/UX 上工作在 controller/model 上。 (这是我发现的最大好处,是 UI 代码位于中心位置,而不是分布在 'view' 的 1/2 和控制器的 1/2 之间。
MVP 的一个缺点是您可以多次调用 'passing through' 演示者,而在他们到达视图之前几乎没有或没有任何变化。这可能有点令人困惑并且更难理解,但是当您将 code/logic more 推入模型和视图时通常会出现这种情况。 (这可能是合适的),但是让演示者在那里允许您在需要时将其视为本质上只是一个 'bridge' 对象,即使您最初没有使用它。
我正在构建一个库并且(我想我是)遵循 MVC。
- 模型定义 specs/instructions.
- 视图解释指令以创建添加到场景的视觉对象。
- 控制器提供了一个 GUI(Java 控件,即滑块),用户可以通过它更改模型。
图书馆的组织结构如下: 控制器 -> 模型 -> 视图
Wrt 命名约定,class 名称应该反映库中 class 的功能角色:例如 ShapeView,还是应该反映其实际的 class 类型(形状组)?
在这种情况下,ShapeView 解释来自 ShapeModel class 的指令并创建形状,然后将它们添加到其子项中。然后将 ShapeView/Group 添加到窗格中。
目前我正在为命名约定使用角色,原因有以下三个: - 从名称中更清楚地理解class的作用。 - class 类型是有限的,因此如果与它们绑定,我的命名约定将受到限制。 - 我可以重建同一个库,而不必受限于某种编程语言的 classes 的名称。
我的直觉是正确的吗?我意识到有很多方法可以解决这个问题,所以我正在寻求专家的智慧。
Model defines the specs/instructions.
View interprets the instruction to create a visual that is added to the scene.
Controller provides a GUI (Java controlsv ie. Sliders) through which the user changes the model.
So the library is organised as: Controller -> Model -> View
您似乎正确地构建了 MVC 模式。然而,我一直发现 MVC 模式的细微差别比其他 MV 更多... un-intuitive...模式。因为 'view-controller' 的概念通常包含但不是 MVC 名称的一部分,并且 'how' 控制器的 UI/UX 是 "different" 而视图的通常定义不明确如我所愿(因为现在用户通常与数据进行交互)并且使用 MVC,您在 'view' 和 'input' 中有 UI/UX 'output' 'controller'.
您可能还想考虑的另一种设计是 MVP 模式。 Model=data,View=passiveUI,Presenter处理两者的交互。
我发现 MVP 更容易 implement/think 关于(个人),因为它具有 non-cyclical 性质(好吧......不是真的......因为逻辑流基本上仍然是一个循环,但是 Presenter 的 API 边界比 MVP 中的 'View' 边界更清晰)这有助于解耦 MVP 中的 V 和 M,而不是 MVC 中的可能。
此外,这还允许您在对方不知情的情况下独立更改模型或视图。 (从技术上讲,MVC 允许这样做,但如果不在模型和视图之间包含 'view-controller',就不能像 obvious/clear 那样做到这一点。)
例如,您有一个 'widgets' 的数据库以及将其作为模型访问的逻辑。并且您有一个可以显示来自用户的 them/get 交互的视图。如果您将所有(单向)API(总共 4 个)定义为接口,那么您可以在工作时轻松地交换视图(或让另一个 team/dev)在 UI/UX 上工作在 controller/model 上。 (这是我发现的最大好处,是 UI 代码位于中心位置,而不是分布在 'view' 的 1/2 和控制器的 1/2 之间。
MVP 的一个缺点是您可以多次调用 'passing through' 演示者,而在他们到达视图之前几乎没有或没有任何变化。这可能有点令人困惑并且更难理解,但是当您将 code/logic more 推入模型和视图时通常会出现这种情况。 (这可能是合适的),但是让演示者在那里允许您在需要时将其视为本质上只是一个 'bridge' 对象,即使您最初没有使用它。