发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 云架构 框架 开发教程 SOA 大数据 扩展性 并发编程 EDA 分布式 函数编程
1 2 3 下一页 Go 3

请教,这样需不需要使用对象池,这样设计有问题吗?

    
2002-11-16 09:56
赞助商链接

自己的班级网站,不用什么EJB,Struts的模式,简单的javabean+servlet+jsp,但是想设计的好一点,刚写到User部分遇到一个问题
User.java

public interface User {
public abstract User getUserById(long userid);// like a static method
public abstract int insert(Connection conn);
public abstract int delete(Connection conn);
public abstract int update(Connection conn);
public abstract long getUserid();
public abstract void setUserid(long id);
......
}

AbstractUser.java

public abstract class AbstractUser implements User {
protected long userid;
.......
public abstract User getUserById(long userid);// like a static method
......
}

以前这部分是直接写User Class的,现在改成以上的模式,但发现原来用到的静态方法不可写在Interface中,只能写成非静态的(是不是像EJB2的Home方法?)
那么在以下的UserManager需要用到很多次User中的这些"静态方法",那么我就想用一个User的静态变量来调用那些方法
UserManager.java

public class UserManager {
private static Logger logger =
(Logger) Logger.getLogger(UserManager.class.getName());
private static User USER = DAOFactory.getUser();
......
}


DAOFactory.java

public class DAOFactory {

private static Logger logger =
(Logger) Logger.getLogger(DAOFactory.class.getName());

public static User getUser() {
User user = null;
try {
InitialContext ic = new InitialContext();
String className = (String) ic.lookup(JNDINames.USER_DAO_CLASS);
user = (User) Class.forName(className).newInstance();
} catch (NamingException ne) {
logger.error("DAOFactory.getUser occured a error about JNDI name: ", ne);
} catch (Exception se) {
logger.error(
"DAOFactory.getUser occured a unknown error: ", se);
}
return user;
}

}



但我又担心这些方法中的数据在共享访问中会出现不一致,而同步这些方法开销太大了吧,那么我就是要用对象池?

不知道这样考虑是不是有必要,关于数据在共享访问,以及使用同步方面我理解不深,很不确定,谢谢解答 ^_^

2002-11-16 10:17

我觉得你的类之间的职责划分好象不是很明确, User类中的getUserById(),
insert(), delete()方法应该放在UserManager类中, 如果这样getUserById
就可以是static的.
你可以参考一下Jive中的User和UserManager类, Jive中的User类只包含与某个用户有关的属性的set/get方法, 而UserManager中则包含Create,Delete,
GetUser等属于管理者的方法, 这样划分概念很明确.
我也是Java新手, 希望多探讨.

2002-11-16 10:42

谢谢!
insert,delete,update,getUserById等方法我觉得是属于User的基本原子方法
放在User中也有道理呀,所以才要用interface-abstrace这样设计,就是要封装User,而UserManager只是调用User的各种方法来达到一定的目的,否则DAO的意义就不大了,或者用在另一个地方,反正我看jive的那一套还不是很好,不能说服我完全学他的,或许我看得还不够全面^ ^

2002-11-16 14:03

我的理解是User类应该代表某一个用户, 从对象角度来理解, 它有自己的
属性和方法, 在问题域每个用户都有自己的name, id等属性这一点应该没有
争议, 另外我们可以请求一个用户修改他自己的name, 但若我们请求一个用户
create或delete(不知能否和你的User中的insert和delete对应另外一个用户
好象不合逻辑; 还有一个用户已经有一个唯一的, 你若要求一个用户根据ID
查找出另一个用户(对应getUserById)是不是也不合逻辑呢?
想听一下你觉得Insert等方法是User的"原子方法"的理由.

2002-11-17 08:28

谢谢,你说的有道理^ ^

不过我现在只是想把User相关的最基本方法(insert....)由自身实现,其实我还不觉得分开有什么太大的好处,因为这些基本方法是由属性决定的。不过现在外面很多例子确实如你所说,应该是有一定道理的。但到我现在应用的层次还没感觉出来。

insert(),update(),delete()当然只对自身了,就根据主键嘛
而getUserById我上面也说了,本应是静态方法,本不应该与实例有联系的

可以看看那我原来提的问题吗?^ ^

3Go 1 2 3 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com