有个用户类和管理员类,按照OOP的思想,添,删,改,查用户到数据库中的方法是放在用户类还是管理员类中

解决方案 »

  1.   

    应该专门独立出来一个类把,因为用户和管理员都会用到curd操作,然后用户和管理员类持有对方的引用!!
      

  2.   

    Userpackage com.tsinghuait.test;public class User {
    /**
     * User类是不是只保存User的一些属性、及set、get方法啦?
     * */
    private int id;
    private String name;
    private int age;
    private String email; public int getId() {
    return id;
    } public void setId(int id) {
    this.id = id;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public int getAge() {
    return age;
    } public void setAge(int age) {
    this.age = age;
    } public String getEmail() {
    return email;
    } public void setEmail(String email) {
    this.email = email;
    }

    }UserToolpackage com.tsinghuait.test;public class UserTool {

    public void add(User user) { } public void del(User user) { } public void select(User user) { } public void update(User user) { }}
      

  3.   

    我随便写了一下,各位批评!用户类:
    public class User {

    private long id;
    private DBQuerier querier;

    public User(long i) {
    id = i;
    querier = new DBQuerier(this);
    }

    public long getId() {
    return id;
    }

    public void doSomething() {
    querier.select("someTable");
    querier.delete("someTable", "someConditions");
    }}
    数据库查询类:public class DBQuerier {

    private boolean connected;
    private User user;

    public DBQuerier(User u) {
    user = u;
    }

    public boolean connect() {
    // connect to the db
    connected = true;
    return connected;
    }

    public void select(Object... args) {
    try {
    checkPrivilege(PrivilegeSystem.Privilege.SELECT);
    ensureConnection();
    // do selecting...
    System.out.println("user #" + user.getId() + " is selcting...");
    } finally {
    // disconnect...
    }
    } public void insert(Object... args) {
    try {
    checkPrivilege(PrivilegeSystem.Privilege.INSERT);
    ensureConnection();
    // do inserting...
    System.out.println("user #" + user.getId() + " is inserting...");
    } finally {
    // disconnect...
    }
    } public void update(Object... args) {
    try {
    checkPrivilege(PrivilegeSystem.Privilege.UPDATE);
    ensureConnection();
    // do updating...
    System.out.println("user #" + user.getId() + " is updating...");
    } finally {
    // disconnect...
    }
    } public void delete(Object... args) {
    try {
    checkPrivilege(PrivilegeSystem.Privilege.DELETE);
    ensureConnection();
    // do deleting...
    System.out.println("user #" + user.getId() + " is deleting...");
    } finally {
    // disconnect...
    }
    }

    private void checkPrivilege(PrivilegeSystem.Privilege p) {
    if (!PrivilegeSystem.hasPrivilege(user.getId(), p))
    throw new NotEnoughPrivilegeException();
    } private void ensureConnection() {
    if (!connected)
    connect();
    }}
    权限系统类:public class PrivilegeSystem {

    public static enum Privilege { SELECT, INSERT, UPDATE, DELETE };

    public static boolean hasPrivilege(long userId, Privilege privilege) {
    // verifying the privilege for the user ...

    // only for demonstration

    if (userId == 1)
    return true;  // administrator has all privileges.

    else
    return (privilege == Privilege.SELECT);   // other users have only the privilege for selection.

    }}
    权限不够异常:public class NotEnoughPrivilegeException extends RuntimeException {}
    测试类:public class Demo {

    public static void main(String[] args) {

    User admin = new User(1);
    User user1 = new User(2);

    admin.doSomething();
    user1.doSomething();
    }}