我的模型类或其他类中应该有逻辑吗?

toy*_*toy 5 ruby java design-patterns domain-driven-design

我只是希望得到关于这个我一直在辩论的其他意见,例如我有类user_controller和类用户


class User
   attr_accessor :name, :username   
end

class UserController
   // do something about anything about users
end


问题是我的User类中应该有逻辑吗?


user = User.new
user.do_something(user1)

or it should be 

user_controller = UserController.new
user_controller.do_something(user1, user2)

我不确定哪一个是最好的设计,我个人非常喜欢第一个,所以例如它会读起来像


john = User.new
john.accept_friend(jane)

instead of 
user_controller = UserController.new
user_controller.accept_friend(john, jane)


这些模式的优缺点是什么?这不仅仅是针对Ruby的,因为我的东西ruby在打字时更容易.

编辑:真的有很好的转换,但我更喜欢这里的人.感谢大家.

Den*_*men 8

是的,您应该在模型中保留逻辑!也就是说,如果你做了实际的面向对象编程(看起来像你那样).引用维基百科:

面向对象编程(OOP)是一种使用"对象"的编程范例 - 由数据字段和方法及其交互组成的数据结构 - 用于设计应用程序和计算机程序.

如果您尝试进行域驱动设计(您的标签意味着),则尤其如此.DDD就是用对象来表达你的域名.

Martin Fowler表示,将逻辑置于模型之外是一种反模式.