日期:2014-05-18  浏览次数:20401 次

面向对象类的设计 问题。大家帮忙了。
问大家一个类的问题。

我现在做个项目 想用标准的面向对象来做,顺带学习下。 但是

设计类的时候 我有些疑问。
举个例子:
商品 有 ID 名称 品牌 价格,评论 等。 用户可以对商品 评论

。 评论 有 评论ID,题目,内容,发表时间,评论人。 用户 

有ID 姓名。 品牌 又有 品牌ID 名称
我的分析上面共有
商品,品牌,用户,评论 这4个对象
商品拥有品牌,用户可以操作(添加,删除,修改)商品,用户

可以发表评论。 商品拥有评论。

写成类的时候我有些疑惑了。
我认为的几种写法:
第一种:
class object
{
string id;
}
class user:object // 用户类
{
string name;
}
class brand:object //品牌类
{
string name;
string summary;
}
class pro:object //商品类
{
string name;
class brand;
class comment;

void add(){}
void void edit(){}
void update(){}
void delete(){}
}
class comment:object //评论类
{
string title;
string context;
datetime time;
class user;

void postcontext(){}
}
第二种:
class object
{
string id;
}
class user:object // 用户类
{
string name;
}
class brand:object //品牌类
{
string name;
string summary;
}
class pro:object //商品类
{
string name;
string brandid;
string commentid;

void add(){}
void void edit(){}
void update(){}
void delete(){}
}
class comment:object //评论类
{
string title;
string context;
datetime time;
string userid;

void postcontext(){}
}

============
第一种 是 类包含类,第2种是 类和类是独立的。 没关系。
第一种 看起来 规范些(我看起来而已)
但是 new 一个 类的时候,会 连带new 很多子类。会不会 占资

源? 效率底?
比如 商品类
class pro:object //商品类
{
string name;
string brandid;
class brand;
public setInfo()
{
  取出商品的基本信息 name brandid赋值;
}
public pro(string proid)
{
  setInfo();
  brand = new brand(brandid);//为了这个 我加了个brandid 

属性 我觉得和brand 这个类有点 重复了 不知道如果处理。
}
}

这样 用起来 很方便 要得到 商品的品牌的信息 只需要
class pro = new pro(id);
pro.brand.summary 就可以得到了
第2种 就要分别 再去 操作brand类 得到summary
但是 这样对吗? 标准的类 是如何设计的?
我觉得上面2个设计的都不太好,不知道标准的是怎么做的。

麻烦大家了。 说说这个例子上的类应该如何设计。
我在网上查页查不到资料。

------解决方案--------------------
对于类的继承,如果没必要就不继承。一般都是类单独
------解决方案--------------------
例子来说,简单一点,设计成四个单独的类就行,类的属性跟数据库的字段对应,然后需要什么其它的再增加

------解决方案--------------------
C# code

public class User
    {
        #region 私有成员

        private int _userID;        //用户ID
        private string _loginName;    //用户登录名
        private string _userName;    //用户姓名
        private string _password;    //用户密码
        private string _address;    //用户地址
        private string _homepage;    //用户主页
        private string _email;        //用户Email

        private bool _exist;        //是否存在标志

        #endregion 私有成员

        #region 属性

        public int UserID
        {
            set
            {
                this._userID = value;
            }
            get
            {
                return this._userID;
            }
        }
        public string LoginName
        {
            set
            {
                this._loginName = value;
            }
            get
            {
                return this._loginName;
            }
        }
        public string UserName
        {
            set
            {
                this._userName = value;
            }
            get
            {
                return this._userName;
            }
        }
        public string Password
        {
            set
            {
                this._password = value;
            }
            get
            {
                return this._password;
            }
        }
        public string Address
        {
            set
            {
                this._address = value;
            }