MVC-应该有主视图,模型和控制器,还是特定于实现的?

时间:2019-02-01 12:28:58

标签: model-view-controller design-patterns

我对概念感兴趣,而不是实现。考虑一种CarBookingRequest场景,其中用户通过界面请求预订汽车。让我们在以下约束条件下进行讨论,并通过保持ViewController的简单性来只考虑Model

  • 只有一个控制器类/代码,其中包含代表相关动作的所有功能
  • 有一个模型类/代码只处理很少表的单个数据库(没有其他数据模型)

可以有许多接口可以通过其发出请求:

1。桌面应用程序

用户单击触发Button事件的Click,该事件又被预先编程为使用请求BookingController来调用NewBooking。像这样:

 Event OnClick() { 
    C = New BookingController
    C.Request('NewBooking')
 }

2。移动应用

用户点击Button会触发Touch事件,该事件又被预先编程为使用请求BookingController调用相同的NewBooking。像这样:

 EventListener OnTouch() { 
    C = New BookingController
    C.Request('NewBooking')
 }

3。自动贩卖机

用户在触发事件的机器上按下PushButton,该事件已预先编程为通过请求BookingController调用相同的NewBooking。像这样:

 Event OnPress() { 
    C = New BookingController
    C.Request('NewBooking')
 }

假设 Web界面服务界面具有类似的实现,其中请求是由另一个系统或预定任务发出的。显然,所有这些实现都是用非常不同的语言和平台编写的 BookingViews 的不同版本。现在,如果我事先知道这些实现并且正在制作Booking MVC,那么我的View,Controller和Model类应该是什么样的?或多少?为什么?

我是否应该有一个具有以下功能的“ Main” BookingView类:

 Function CallController(Command) { 
    If Command = 'NewBooking' {
       Return New BookingController
    }
    or some good implementation of controller/action registry to fetch appropriate controller
 }

和每个特定的View应该依次调用此函数,然后该函数将BookingController调用为:

 Event OnClick { 
    C = MainView.CallConroller('NewBooking')
 }

还是每个View应该以自己的方式分别调用控制器?

可能有太多问题,但我认为我的View,Controller和Model应该可重用,并且每个新的Interface(移动,机器或Web)都只需要对{{1 }}(事件或显示),而连接和获取数据代码保持不变。

1 个答案:

答案 0 :(得分:0)

MVC模式的核心思想是将应用程序的三个方面-模型,视图和控制器-彼此分开

您介绍您的解决方案的方式,似乎并没有坚持这一原则。让我建议,可以帮助你实现良好的MVC,遵循这些规则的方法。我正在描述通用规则,然后可以根据您的应用程序,框架等的具体内容进行修改:

  • 您的控制人不应该知道这些视图。此规则有助于从控制单独的“视图”。如果您遵循此规则,则控制器无需担心客户端的类型,而只需返回一种类型的资源(例如JSON资源,在本例中为Booking)。然后,每个客户端(Web,移动设备,计算机)都必须以他们希望的方式处理此资源的表示。但重要的一点是,它不是控制器的关注。
  • 您的模型不应该了解控制器。模型令人担忧的是,以实现预定的车。它不知道它正在做什么(例如控制器是否要访问它然后将其传递给其他人)。例如,它可以具有接口,例如

    CarBooking:

    constructor();

    书();

    unbook();

    ...

它执行构建请求,预订请求或删除预订的业务逻辑。的期间

你如何做到这一点,模型,视图和控制器或适当地隔离?好吧,一种方法是从内部开始,然后向外移动。也就是说,从模型开始,然后是控制器,然后是视图。实际上,您可能无法按此顺序进行操作,因为您必须考虑所有这些方面。但是,我要说的是更多的逻辑意义。