我正在开发一些我使用Vehicle
模型的PHP应用程序。
该模型应包含一些数据,可能包含有关车辆控制,排放控制和一些常规服务的逻辑。这是代码:
class Vehicle extends Entity {
protected $name;
protected $registrationNumber;
protected $registrationCountry;
protected $seatsCapacity;
protected $obtainDate;
protected $color;
protected $comment;
protected $naviSerialNumber;
protected $fuelCardNumber;
protected $techicalStatus;
protected $transferStatus;
protected $ownership;
}
其中$technicalStatus
应该是此类的实例:
class VehicleTechnicalStatus extends ValueObject {
protected $tachoValue;
protected $vehControlDate;
protected $vehControlValidDue;
protected $emissControlDate;
protected $emissControlValidDue;
protected $lastRegServiceTachoValue;
protected $lastRegServiceDate;
protected $serviceInterval;
}
当然,它将包含有关车辆控制日期,服务等的一些逻辑。
将此类设为ValueObject
是否正确?它没有任何标识,但在Vehicle
中它会经常更改(替换为ValueObject
并且应该是不可变的。)
设计是否正确?或者我应该将所有这些属性和业务逻辑方法直接放到Vehicle
类?
答案 0 :(得分:0)
将此类设为ValueObject是否正确?它没有任何标识,但在Vehicle中它会经常更改(替换为,它是一个ValueObject,应该是不可变的)。
是。从根本上说,值对象是特定于域的类型,它们由其他特定于域的类型和域不可知原语组成。
也就是说:如果PHP有一个原生的VehicleTechnicalStatus
类型,你只需要使用它,但它不会让你自己滚动。
或者我应该将所有这些属性和业务逻辑方法直接放在Vehicle类中吗?
如果在VehicleTechnicalStatus
实体之外使用Vehicle
- 特别是,如果您希望将VehicleTechnicalStatus作为参数传递给某个函数,那么您可能需要将其视为封装类型,与Vehicle属性包不同。你会失去一些复杂性(两个不同的模块而不是一个大的模块),但你获得了上下文 - 当你处理技术状态时,你可以完全关注你的注意力,而不会分散车辆中其他不相关的领域。