最近,我与一位同事进行了交谈,并就模型视图控制器范例进行了对话。我们谈论的是文件的正确组织等等,我提到我认为那些瘦弱的控制器和胖模型"是要走的路。这意味着控制器只是调用"胖模型"包含业务逻辑的方法:
public class CreditCard {
//instance vars
//constructor
//getters
//setters (if you want mutability)
public boolean makeCreditCardPayment(Cart cart) {
//implementation details...
}
}
我的同事提到了其他方面。他说这些模特不应该真的变胖了#34;并包含任何其他业务逻辑。该模型应该只是一个数据结构,并且包含零方法(显然,如果您使用Java,则需要setter和getter)。就像C风格的结构一样,显然有数据字段有mutators和accessors:
public class CreditCard {
//instance vars
//constructor
//getters
//setters (if you want mutability)
}
public class PaymentService {
public boolean makeCreditCardPayment(CreditCard card, Cart cart) {
//implementation details...
}
public boolean makePayPalPayment(PayPal paypal, Cart cart){
//implementation details...
}
甚至为实现接口的每种付款类型都有一个PaymentService。所以类似于' CreditCardPaymentService实现了付款'或者' PayPalPaymentService支付付款'。
对我来说,使用服务方法似乎我们只是回到程序式编程。
另一个例子是'车辆'使用getSpeed方法的对象与接收Vehicle对象并返回速度的服务进行比较。
我查看了其他stackoverflow答案,但他们有不同的答案。在一个问题中,其中一个用户提到服务层是MVC模型部分的一部分。我正在寻找其他答案。
答案 0 :(得分:0)
我遇到了许多声称属于MVC保护伞的不同哲学。
我的位置:
模型直接管理某种后备存储,并且应该包含变异和验证逻辑。
控制器应该看起来像其他控制器和视图的模型(使它们可组合),并包含验证从控制器接口到模型接口的映射所需的任何其他逻辑。
视图只包含他们需要运行的状态和逻辑;他们的目的是显示数据并收集输入。
您的PaymentService
似乎试图成为多个控制器,因此我会选择单独的CreditCardPaymentService
和PayPalPaymentService
路线。