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

标签 java ruby design-patterns domain-driven-design

我只想对我一直在思考的这个问题有其他意见,例如我有 class user_controller 和 class user


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​​ 更容易打字。

编辑:确实正在进行很好的转换,但我非常喜欢这里更多来自人们的信息。谢谢大家。

最佳答案

是的,您应该在模型中保留逻辑!也就是说,如果您进行实际的面向对象编程(看起来像您这样做)。引用Wikipedia :

Object-oriented programming (OOP) is a programming paradigm using "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs.

如果您尝试进行域驱动设计(您的标签暗示),则尤其如此。 DDD 就是用对象来表达你的领域。

Martin Fowler says putting the logic outside your model is an anti-pattern.

关于java - 我的模型类或其他类中应该有逻辑吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9884891/

相关文章:

c# - 我们还需要迭代器设计模式吗?

java - Android 网络类(class)

java - 最小化 Spring Boot 启动时间

ruby - 对数组中的特定对象进行排序

java - 就像我们搭建乐高一样聚合 JSP 页面的最佳方式

c++ - 策略模式 C++

java - 启动时的 Liquibase 迁移无法使用 Spring-Boot

java - 如何将-t参数传递给fabric8 docker-maven-plugin?

英国格式的 Ruby strftime,即 dd/mm/yy

ruby - 在 ruby​​ 中使用 Mechanize 进行网页抓取时如何解决 HTTP500 错误?