我对概念感兴趣,而不是实现。考虑一种CarBookingRequest
场景,其中用户通过界面请求预订汽车。让我们在以下约束条件下进行讨论,并通过保持View
和Controller
的简单性来只考虑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 }}(事件或显示),而连接和获取数据代码保持不变。
答案 0 :(得分:0)
MVC模式的核心思想是将应用程序的三个方面-模型,视图和控制器-彼此分开 。
您介绍您的解决方案的方式,似乎并没有坚持这一原则。让我建议,可以帮助你实现良好的MVC,遵循这些规则的方法。我正在描述通用规则,然后可以根据您的应用程序,框架等的具体内容进行修改:
您的模型不应该了解控制器。模型令人担忧的是,以实现预定的车。它不知道它正在做什么(例如控制器是否要访问它然后将其传递给其他人)。例如,它可以具有接口,例如
CarBooking:
constructor();
书();
unbook();
...
它执行构建请求,预订请求或删除预订的业务逻辑。的期间强>
你如何做到这一点,模型,视图和控制器或适当地隔离?好吧,一种方法是从内部开始,然后向外移动。也就是说,从模型开始,然后是控制器,然后是视图。实际上,您可能无法按此顺序进行操作,因为您必须考虑所有这些方面。但是,我要说的是更多的逻辑意义。