我正在开发一个必须在不同页面上显示图表的Web应用程序。每个页面对应一个Controller,每个需要图表的Controller都有一个ChartService接口。该服务请求来自第三方供应商的图表。然后,它将包含在某些HTML中的图像作为字符串直接返回到输出流中。 ChartService需要提供数据和一些其他参数,如时间段和模板文件。
我是否应该将图表功能抽象到自己的控制器中? ChartController上的不同Action方法可以提供每种不同类型的图表。
但是,当我从多个控制器提供一些页面时会出现问题吗?确定何时应为其自身的控制器提供功能的准则是什么?
答案 0 :(得分:1)
听起来你根本不需要改变任何东西。您已经从包装器中抽象出第三方服务,这样您的控制器就不会直接依赖于该特定服务。在这种情况下创建一个新控制器相当于在包装器周围创建一个包装器。
如果要向应用程序添加行为,请创建新控制器。
答案 1 :(得分:0)
戴夫,
我有一个你的主控制器继承的抽象基础控制器。基本控制器将具有子控制器覆盖适当部分所需的所有功能。在不了解您的困境的完整背景的情况下,这可能是也可能不是可行的(或可取的)方法,但它是我目前在所有控制器中使用的方法。
[edit] - 这种方法的优点在于,如果您很幸运,75%的基本控制器功能将保留,只有25%的功能被覆盖和/或添加了定制功能为那个孩子控制器。这会给你一个非常干净的范例,因为每个新的图表类型都有它自己的模型/控制器,可能有相同的动作方法名称,因此使新图表类型的“输入”成本非常低廉。
吉姆
答案 2 :(得分:0)
IMO,如果你有一个“图表”部分,其中包含网址
charts/income
charts/expenditure
然后图表控制器才有意义。此外,如果你的图表控制器是由各种页面的ajax查询专门调用的,那么chartingController仍然有意义。但是,如果你有像
这样的网址products/list
products/yearlyStockChart
employees/details
employees/performanceChart
然后你想要一个带有List()和annualStockChart()动作的ProductsController,以及一个带有details()和performanceChart()动作的employeesController,两个控制器都使用chartingService。