论坛首页 Java企业应用论坛

对象建模应该如何确定对象有哪些方法?

浏览 6391 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-09  
最近正在自学建模。打算以设计一个论坛做为目标。初步确定了论坛中有用户、管理员、论坛、帖子等对象。我想问一下,像添加帖子这种功能是否应该属于哪个对象?是应该放在用户对象还是帖子对象中?还有,像注册用户、消息的发送管理这些功能是应该独立出来成为一个服务还是放到用户对象中去?
思考来思考去,感觉一脑袋浆糊。而且感觉几乎所有的方法都跑到用户、管理员这两个对象中去了。是否吧对象设计的太大了?到底应该如何确定功能应该放到那个对象中去呀。
还有就是对象持久化。程序结构上我想参考JIVE的代理模式,但是带来一个问题。我打算在论坛中使用Spring之类的IOC管理类的创建。比如用户对象,有一个User接口,一个ProxyUser做为代理。实际工作的是一个DBUser类(先这么叫吧。这个类用ORM工具持久化到数据库)。从数据库中取出的是DBUser,用户要操作ProxyUser。我应该怎么做?new一个ProxyUser然后把DBUser放到ProxyUser里头,最后返回ProxyUser?感觉把ProxyUser写死了,我应该怎么写?用一个ProxyUser的工厂类处理?还是用IOC?感觉这里用BeanFactory得到ProxyUser的话,框架侵入程序太厉害。用工厂方式也觉得不太对劲。
说了这么多,自己也不知道有没有把意思表示清楚。这种设计思想方面的东西,我总是有点说不清楚。请大家多多帮忙。
   发表时间:2007-03-09  
魔力猫咪 写道
最近正在自学建模。打算以设计一个论坛做为目标。初步确定了论坛中有用户、管理员、论坛、帖子等对象。我想问一下,像添加帖子这种功能是否应该属于哪个对象?是应该放在用户对象还是帖子对象中?还有,像注册用户、消息的发送管理这些功能是应该独立出来成为一个服务还是放到用户对象中去?
思考来思考去,感觉一脑袋浆糊。而且感觉几乎所有的方法都跑到用户、管理员这两个对象中去了。是否吧对象设计的太大了?到底应该如何确定功能应该放到那个对象中去呀。
还有就是对象持久化。程序结构上我想参考JIVE的代理模式,但是带来一个问题。我打算在论坛中使用Spring之类的IOC管理类的创建。比如用户对象,有一个User接口,一个ProxyUser做为代理。实际工作的是一个DBUser类(先这么叫吧。这个类用ORM工具持久化到数据库)。从数据库中取出的是DBUser,用户要操作ProxyUser。我应该怎么做?new一个ProxyUser然后把DBUser放到ProxyUser里头,最后返回ProxyUser?感觉把ProxyUser写死了,我应该怎么写?用一个ProxyUser的工厂类处理?还是用IOC?感觉这里用BeanFactory得到ProxyUser的话,框架侵入程序太厉害。用工厂方式也觉得不太对劲。
说了这么多,自己也不知道有没有把意思表示清楚。这种设计思想方面的东西,我总是有点说不清楚。请大家多多帮忙。


其实怎么设计都可以。你可以把所有用户相关的功能都放在User对象里面(RoR就会这样做),也可以分离出来,建立相应的UserService类。
0 请登录后投票
   发表时间:2007-03-10  
总觉得有些地方还是应该独立出来。比如论坛中消息的处理。我觉得应该更多的做为一种服务出现。但很多分的都不是很清楚,有时候很难确定。看来光在脑袋里想是不成的,不实际编写的话还真是难以确定。还有就是如果绝大部分操作都被封到User等几个少数接口的话,感觉变成外观模式了。
0 请登录后投票
   发表时间:2007-03-10  
这个问题需要一定时间适应。答案不是唯一的。

我的经验是,把它作为一个模型来考虑,把每个对象当作一个人,一个角色,你指挥这些人,你愿意为每个人分配什么“职责”。

作为例子,论坛模型中,用户对象不该有添加帖子的功能,它仅表示用户本身的信息,如果有,那么你加个其它功能,那也到这个对象上了。分离他们,让他们足够小,但彼此可以“通信”、关联,这样就找到感觉了。

0 请登录后投票
   发表时间:2007-03-12  
快速实现一遍 -> 重构 -> 重写 -> 重构 就差不多了.
0 请登录后投票
   发表时间:2007-03-14  
怎样设计都是可以实现,关键是把你设计的思想写下来,让后来看 代码的人知道你为什么这样设计。也便于自己忘记的时候知道自己当初的想法。比如项目结束半年后,你不得不修改某一个地方的时候。
0 请登录后投票
   发表时间:2007-03-14  
所有的代码都能实现功能时
就是人思考的方式写程序
那样子修改时就可以顺思路达到要改的地方
人与人的思考方式不同所以设计也有不同

我喜欢将user的所有动作都交给usermanager去作而不是放在user中
0 请登录后投票
   发表时间:2007-03-14  
那你的user对象不就成伪对象了?
抛出异常的爱 写道
所有的代码都能实现功能时
就是人思考的方式写程序
那样子修改时就可以顺思路达到要改的地方
人与人的思考方式不同所以设计也有不同

我喜欢将user的所有动作都交给usermanager去作而不是放在user中
0 请登录后投票
   发表时间:2007-03-14  
论坛中好像有一个关于贫血和涨血模型的讨论
0 请登录后投票
   发表时间:2007-03-14  
关于贫血模型的讨论,ms已经n久了...
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics