遵循SRP和KISS原则我设计了一个仅具有属性的对象,但我需要使用方法来处理对象。分离实体对象数据和实体集对象方法的最佳方法是什么?
目前我创建了以下对象:
宠物实体对象
属性名称
属性年龄
宠物实体设置对象
宠物对象列表
宠物引擎对象
宠物实体集的方法LoadPets
宠物实体的GetPetByName方法
宠物实体集的方法GetPetsByAge
这是设计物体的最佳方法吗?
我正在开发.net
感谢。
答案 0 :(得分:6)
您已实施Anemic Domain Model反模式。类应该实现他们需要的方法,这不会破坏SRP,但无论如何,恕我直言的SRP都会被评级。
答案 1 :(得分:4)
一般的想法是使方法接近他们操作的数据。组合数据和操作的构造称为类。
说真的,为什么你认为将数据与运营分开是一个好主意?这与我们几十年来的发展方向相反!
答案 2 :(得分:0)
使用支持模式匹配的函数式语言。因为你在.net上,F#是显而易见的选择。
这适用于面向消息的系统,其中您主要拥有无状态节点,这些节点会转换消息,然后将消息传递给其他节点。在这些场景中,您不关心是否改变消息中的数据,也不关心消息的身份;你关心推进每个节点的处理并发送更多的消息。
你没有做面向对象的设计,面向对象的语言也不能很好地支持这种范例 - 它们将一个可变数据包绑定到一个具有身份的对象,而不是创建一个消息变换器的被动系统。
实际上,这需要你采用系统的dual - 被动系统中的消息对应于面向对象系统中的方法和参数。粗略地说,在OO程序的对象的字段中的状态保持被动程序的调用堆栈,并且作为OO程序的调用堆栈的状态被保存在被动程序中的消息的字段中。