仅在业务逻辑中设置对象的属性?

时间:2012-11-20 16:24:04

标签: java model-view-controller java-ee

如果我有一个对象,例如

class Car {
  boolean sold = false;
}

并且对象出现在视图层中,如果我想更改该值,则更好:更改视图类中的sold值,如

class CarView {
  Car car;

  onButtonAction() {
      car.setSold(true);
      //or: carService.sellCar(car)
  }
}

使用carService.sellCar(car);等后端服务

class CarService {
    sellCar(car) {
        car.setSold(true);
    }
}

我应该在哪一层放置这些动作?从设计的角度来看,在视图类中应用这样的对象更改是错误的吗?

1 个答案:

答案 0 :(得分:1)

当您有多个相互排斥的选项时,设计始终意味着找到最佳选择。所以永远不会有一个正确的设计,它总是只会对你的设计目标更好或更差(这也不是普遍有效/好的)。

如果服务经常更改或您的UI需要将数据提供给多个类似的服务,请创建服务,否则,您将发现自己一直在更改视图。另一个很好的理由是服务是可插拔的(即客户可以将应用程序配置为使用多种预定义服务之一)。

如果您发现自己编写了数百种服务,而且每种服务只使用一次,每种服务只有一种方法,等等,您可能会浪费时间。