将对象方法与对象数据分开

时间:2009-04-09 11:55:27

标签: oop

遵循SRP和KISS原则我设计了一个仅具有属性的对象,但我需要使用方法来处理对象。分离实体对象数据和实体集对象方法的最佳方法是什么?

目前我创建了以下对象:

宠物实体对象
属性名称
属性年龄

宠物实体设置对象
宠物对象列表

宠物引擎对象
宠物实体集的方法LoadPets 宠物实体的GetPetByName方法 宠物实体集的方法GetPetsByAge

这是设计物体的最佳方法吗?

我正在开发.net

感谢。

3 个答案:

答案 0 :(得分:6)

您已实施Anemic Domain Model反模式。类应该实现他们需要的方法,这不会破坏SRP,但无论如何,恕我直言的SRP都会被评级。

答案 1 :(得分:4)

一般的想法是使方法接近他们操作的数据。组合数据和操作的构造称为

说真的,为什么你认为将数据与运营分开是一个好主意?这与我们几十年来的发展方向相反!

答案 2 :(得分:0)

使用支持模式匹配的函数式语言。因为你在.net上,F#是显而易见的选择。

这适用于面向消息的系统,其中您主要拥有无状态节点,这些节点会转换消息,然后将消息传递给其他节点。在这些场景中,您不关心是否改变消息中的数据,也不关心消息的身份;你关心推进每个节点的处理并发送更多的消息。

你没有做面向对象的设计,面向对象的语言也不能很好地支持这种范例 - 它们将一个可变数据包绑定到一个具有身份的对象,而不是创建一个消息变换器的被动系统。

实际上,这需要你采用系统的dual - 被动系统中的消息对应于面向对象系统中的方法和参数。粗略地说,在OO程序的对象的字段中的状态保持被动程序的调用堆栈,并且作为OO程序的调用堆栈的状态被保存在被动程序中的消息的字段中。