我的方法应该去哪里

时间:2009-06-09 17:39:54

标签: design-patterns oop agile

我有一个表示表中一行的类。我想添加一个操作行中数据的函数。我应该在哪里添加功能?

1)在课堂内因为它与班级有关 2)在一个单独的帮助类中的课外?

在过去,我总是会选择数字1.我开始认为数字2是一个更好的答案,因为它将逻辑分离到它自己的封装类中,并降低了数据类的复杂性。我认为数据类应该尽可能地保留,并且只包含绝对没有逻辑的数据成员。

最敏捷/最好的方法是什么?

5 个答案:

答案 0 :(得分:3)

这取决于您是否更喜欢“活动记录”或“存储库”。我不确定是否有正确的答案,只是在你的代码库中有意义的。我还会考虑设计其余代码的设计,因为一致性和良好的设计一样重要。

答案 1 :(得分:2)

在纯粹的MVC意义上,2号是你最好的选择。创建一个数据模型,并将其保留为所有实现逻辑。这将允许您跨应用程序重用模型。然后,Controller可以存放操作数据的特定于应用程序的实现逻辑。

答案 2 :(得分:2)

单一责任原则已被陈述为“只有一个理由可以改变一个对象”。使用选项1,对象可以更改有两个原因:您可以更改对象中存储的数据,或者您可以更改为其他数据库系统(例如mySQL到PostgrSQL)。

当然,就像所有事情一样,这是一种权衡。将所有代码放在一个地方有一些好处。如果您将来不太可能切换到不同的RDBMS,那么将所有内容组合到一个类中可能是一个很好的调用。

但是如果您确实希望将来切换到不同的数据库 - 甚至支持多个数据库后端 - 那么您可能最好将持久性放在单独的类中。

答案 3 :(得分:1)

正确的答案是“它取决于”; “操纵行中的数据”可以证明答案是正确的。

在关注点分离方面,您需要确定此函数操作的抽象。它是数据库中一行的抽象吗?把它放在那个班里。它是数据模型中的对象是按照数据库中的行实现的吗?把它放在那个班里。

更一般地说,您应该将函数放在它们应用的抽象级别,这在很大程度上取决于您的整体设计。

答案 4 :(得分:0)

取决于功能是什么。一般来说,类的意思是封装函数和数据。

如果该函数特定于行类中保存的数据类型,并且行类是通用的,那么您可以从该行继承并将该函数粘贴在那里。

帮助程序类对于分解类的复杂性非常有用,但是您应该确保帮助程序与类的作用是明确定义的,以便将来的维护不会使该合同变得混乱。