java在我的模型类或其他类中应该有逻辑吗
我只是想对这个问题有其他的看法,我一直在思考,例如我有类用户\控制器,还有类用户
class User
attr_accessor :name, :username
end
class UserController
// do something about anything about users
end
问题是我的用户类中是否应该有逻辑
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更容易打字
编辑:有非常好的转换正在进行,但我很喜欢这里更多的人。谢谢大家
# 1 楼答案
是的,你应该在模型中保留逻辑!也就是说,如果您进行实际的面向对象编程(看起来是这样的)。引用Wikipedia:
如果您正试图进行域驱动设计(您的标记暗示了这一点),这一点尤其正确。DDD是关于用对象表示域的
Martin Fowler says putting the logic outside your model is an anti-pattern.
# 2 楼答案
大多数人会说,不应该在模型类中保留逻辑。例外情况可能包括:
addToList(Object o)
、getFromList(int index)
等)equals
、hashCode
、toString
、clone
、compareTo
等)因为人们不会期望模型类中有逻辑,所以您可能也应该避免它。这将使其他开发人员感到困惑,他们将来可能不得不查看和维护您的代码。毕竟,这就是为什么会有模式——帮助其他开发人员识别和维护您的代码
# 3 楼答案
我相信第一个更好,您有一个模型和一个类,它拥有操作该模型所需的所有信息,并且该模型可能需要一些其他信息来执行某些操作
尝试阅读更多关于信息专家的信息
# 4 楼答案
在这种情况下,应考虑权衡。 如果您确信用户类的大小今后不会增长,那么最好在用户类中添加accept_friend
另一方面,在以下场景中,最好将accept_friend移动到UserController之类的服务类中
以避免用户类的大小增加。这样的逻辑可以移动到这些子类(Usercontroller),从而使类看起来简单
可恢复性。明天,如果有一个名为superuser的类也需要accept\u friend功能,那么UserController类可以恢复如下