初学COM,征集方案:你会如何设计下面的组件和接口
初学COM,征集方案:你会怎么设计下面的组件和接口?
学了几天的COM,现在想把以前写的一个 学生信息管理( 控制台的) 改成COM的形式,只是想应用一下,谁知道思考了蛮久就是不知道如何下手,不知道怎样才能比较好的设计接口和组件,想来很是郁闷啊。。
想来对大家来说应该很简单,想听听大家的意见,谢谢
以前的功能设计大致如下:
struct address /*家庭地址*/
{
char city[10]; /*城市*/
char town[10]; /*县城*/
char village[10]; /*乡镇*/
};
struct telephone /*联系方式*/
{
char SJ[50]; /*手机*/
char JD[30]; /*家庭电话*/
char XD[30]; /*学校电话*/
};
struct person /*个人信息*/
{
char name[20]; /*名字*/
char sex[10] ; /*性别*/
char MZ[16]; /*民族*/
char GJ[17]; /*国籍*/
char XL[19]; /*学历*/
};
struct score //成绩
{
char num[20]; //学号
char english[20];
char chinese[20];
char math[20];
char physics[20];
};
typedef struct linknode //定义节点的类型
{
char address[100]; //地址
char birthday[100]; //出生日期
struct score sc; //成绩
struct person pe; //个人信息
struct telephone te; //联系方式
bool flag;
struct linknode* next;
}nodetype;
class List
{
nodetype* head;
public:
List();
List::~List();
linknode* creatlist(int); //创建链表
int listlen(); //返回链表长度
nodetype* findnode(int);//通过查找序号返回节点的指针
nodetype* find(char c[]); //通过查找姓名返回节点的指针
int find2(char c[]);//通过查找姓名返回节点的序号
nodetype* insnode(int);//插入节点
void delnode(int); //删除节点
nodetype* load(); //初始化:从外部读入数据
void readstr(FILE *f,char *string);//读行函数
bool check(char *a, char *b);//对比两个字符串是否相等
void help();//显示帮助菜单
void editperson(nodetype*); //编辑个人说明
void editscore(nodetype*);//编辑学科成绩
void edittelephone(nodetype*);//编辑联系方式
void dispname(); //显示所有学生姓名
void dispnode(nodetype* p); //显示一个学生的所有信息
void dispperson(nodetype*); //显示一个学生的个人说明
void dispscore(nodetype*); //显示一个学生的学科成绩
void disptelephone(nodetype*);//显示一个学生的联系方式
};
------解决方案--------------------
把以上你列出的所有函数改成COM标准的接口就可。
------解决方案--------------------
是的,你这些东西也不存在封装,直接做成DLL就行了
------解决方案--------------------
尽量不要传结构体,虽然大多数的程序目前都这样做.
字符串的传递尽量使用BSTR,如果你的程序不提供给VB等弱类型语言则例外.
------解决方案--------------------
应该从组件使用者的角度--来看组件接口。
这样只暴露对用户必要的接口,对其它方法则隐藏。
这样,有一个好处是:对用户简单明了。
感觉组件的关键在于接口的设计是否合理。
既做到强内聚,也要松耦合。
要从软件的宏观角度思考问题。
------解决方案--------------------
BSTR 是一个指向 UNICODE 字符串的指针,且 BSTR 向前的4个字节中,使用DWORD保存着这个字符串的字节长度( 没有含字符串的结束符)。
学了几天的COM,现在想把以前写的一个 学生信息管理( 控制台的) 改成COM的形式,只是想应用一下,谁知道思考了蛮久就是不知道如何下手,不知道怎样才能比较好的设计接口和组件,想来很是郁闷啊。。
想来对大家来说应该很简单,想听听大家的意见,谢谢
以前的功能设计大致如下:
struct address /*家庭地址*/
{
char city[10]; /*城市*/
char town[10]; /*县城*/
char village[10]; /*乡镇*/
};
struct telephone /*联系方式*/
{
char SJ[50]; /*手机*/
char JD[30]; /*家庭电话*/
char XD[30]; /*学校电话*/
};
struct person /*个人信息*/
{
char name[20]; /*名字*/
char sex[10] ; /*性别*/
char MZ[16]; /*民族*/
char GJ[17]; /*国籍*/
char XL[19]; /*学历*/
};
struct score //成绩
{
char num[20]; //学号
char english[20];
char chinese[20];
char math[20];
char physics[20];
};
typedef struct linknode //定义节点的类型
{
char address[100]; //地址
char birthday[100]; //出生日期
struct score sc; //成绩
struct person pe; //个人信息
struct telephone te; //联系方式
bool flag;
struct linknode* next;
}nodetype;
class List
{
nodetype* head;
public:
List();
List::~List();
linknode* creatlist(int); //创建链表
int listlen(); //返回链表长度
nodetype* findnode(int);//通过查找序号返回节点的指针
nodetype* find(char c[]); //通过查找姓名返回节点的指针
int find2(char c[]);//通过查找姓名返回节点的序号
nodetype* insnode(int);//插入节点
void delnode(int); //删除节点
nodetype* load(); //初始化:从外部读入数据
void readstr(FILE *f,char *string);//读行函数
bool check(char *a, char *b);//对比两个字符串是否相等
void help();//显示帮助菜单
void editperson(nodetype*); //编辑个人说明
void editscore(nodetype*);//编辑学科成绩
void edittelephone(nodetype*);//编辑联系方式
void dispname(); //显示所有学生姓名
void dispnode(nodetype* p); //显示一个学生的所有信息
void dispperson(nodetype*); //显示一个学生的个人说明
void dispscore(nodetype*); //显示一个学生的学科成绩
void disptelephone(nodetype*);//显示一个学生的联系方式
};
------解决方案--------------------
把以上你列出的所有函数改成COM标准的接口就可。
------解决方案--------------------
是的,你这些东西也不存在封装,直接做成DLL就行了
------解决方案--------------------
尽量不要传结构体,虽然大多数的程序目前都这样做.
字符串的传递尽量使用BSTR,如果你的程序不提供给VB等弱类型语言则例外.
------解决方案--------------------
应该从组件使用者的角度--来看组件接口。
这样只暴露对用户必要的接口,对其它方法则隐藏。
这样,有一个好处是:对用户简单明了。
感觉组件的关键在于接口的设计是否合理。
既做到强内聚,也要松耦合。
要从软件的宏观角度思考问题。
------解决方案--------------------
BSTR 是一个指向 UNICODE 字符串的指针,且 BSTR 向前的4个字节中,使用DWORD保存着这个字符串的字节长度( 没有含字符串的结束符)。