首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC:我应该在哪里存储模型使用的可互换算法(其名称也需要为视图所访问)?

MVC:我应该在哪里存储模型使用的可互换算法(其名称也需要为视图所访问)?
EN

Software Engineering用户
提问于 2014-05-08 13:50:08
回答 1查看 969关注 0票数 0

请考虑一个程序,用户从列表中选择一个算法,并使用策略模式将该算法设置为模型的操作。

例如,图像处理应用程序。有许多算法可以用来操纵图像(暗、亮、对比度等)。它们都封装在对象中,控制器将模型设置为使用此列表中的算法。这些算法还需要在UI上以名称表示。

这就是它的工作方式:

用户可以从GUI上的列表中选择一个算法。当他/她这样做时,会通知控制器,并在模型中设置合适的算法。稍后,当模型被称为model.operate()时,它将把操作委托给它当前的算法。经典策略模式。

此外,视图需要访问算法的名称,以便允许用户从列表中选择一个。

我的问题是:

是否应该将算法存储在某个地方,当控制器需要在模型中设置一个算法时,控制器会从中获取它们吗?或者,控制器应该在需要在模型中设置算法时实例化一个新算法吗?

如果答案是,将算法存储在某处是好的--而不是在哪里?

在模型中?-这是有意义的,因为模型封装了应用程序的业务逻辑和数据。但是视图将如何获取算法的名称?

在控制器中?-这是有意义的,因为控制器是在模型中设置算法的控制器。同时还可以为视图提供一个方法getAlgorithmNames()。但从技术上讲,它不应该包含业务逻辑对象,这就是算法的本质。

在另一个类中,有兴趣的人可以从哪里获取算法或他们的名字?

我确信,在很多应用程序中,用户选择一个操作,并在模型中设置了适当的算法。其他应用程序是如何做到这一点的?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2014-05-08 14:13:46

为了避免可能的误解,在MVC模式中,模型部分不包含单个类,而是包含所有未与用户接口的类。

简单地说:

  • 视图:向用户显示某些内容的类(它们呈现输出)
  • 控制器:对用户操作作出反应的类。
  • 模特:其他的一切。

现在请回答你的问题:

算法和它们的名称列表属于应用程序的Model部分。

算法本身是业务逻辑的一部分,因此属于模型中。如果该模型正在维护一组算法,那么该模型也可以同时为Controller和View提供可用算法列表,这是很自然的。

从列表中选择可以以两种方式工作:

  1. 该模型只提供了一个名称列表。视图将所选的名称与Controller通信,控制器要求Model使用指定的name.查询算法的实例--这很容易,但需要在模型中进行字符串比较,并且可能会造成本地化的严重破坏。
  2. 该模型提供了一组(键,值)对,其中键是模型可以用来检索算法的特定实例的不透明ID,该值是algorithm.的默认名称--这需要做更多的工作,但在本地化应用程序(视图可以显示已翻译的名称而不会破坏内容)或在本地运行的应用程序中(模型可以使用指针/引用实际算法对象作为键)。
票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/238392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档