大家一起来谈谈这两种设计方法的哪一种好?

amwggyy504 2008-08-04 10:47:46
现在我要做一个日志插入模块的功能,那日志插入可以包括:
用户注册,用户基本操作,用户登录,用户注销。系统每执行以上功能时,系统都要插入相应的日志,现在实现有两种方法:
1、写出四个不同的插入方法 ,在使用时,只需要调用不同的方法即可。如
UserRegister(){...};UserOperater(){...};UserLogin(){...};UserLogout(){...}.
2、第二种方法,只写一个方法,在调用时,传入不同的参数。如:
UserLogs(int UserID,string 操作内容,string 操作时间){...};
请问,以上两种哪种方法会比较好一点??

我觉得第一种,在调用的时候,非常方便,不需要再写任何东西,但在设计的时候,非常麻烦。
第二种方法,在设计的时候很方便,但在调用的时候,很麻烦。
...全文
70 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhfu 2008-08-05
  • 打赏
  • 举报
回复
用第二种会好一些,作为log库的设计者,它应该不关心要记多少种log (login logout 。。。 等等),而应该提供一个统一的接口给调用者。
gaoteng1984 2008-08-05
  • 打赏
  • 举报
回复
甚至可以把“往map里加入不同的操作的实例”的操作,通过读取配置文件来进行。用上Reflection机制,根据名字来new具体的对象。这样,当新写一个操作以后,只要将具体的这个操作编译好,就可以了,原来那堆代码不必重新编译。
如果是C++,可以通过LoadLibrary动态加载DLL库,来实现。
gaoteng1984 2008-08-05
  • 打赏
  • 举报
回复
第一种方法直观,是大众法,易于理解,可读性好。缺点是不易扩展,例如再加个功能,就要重新编译代码。
第2中方法跟第一种相反。不易理解,但易于扩展。UserLogs函数所在的类,加个成员变量map<string, Operator>,key是操作内容标志,Operator是具体操作的父类或者接口,下面派生下来几个类,各自负责用户注册,用户基本操作,用户登录,用户注销。这些类使用同一个接口。在这个类构造的时候,往map里加入不同的操作的实例。UserLogs函数里,根据操作内容标志,从map里取到Operator,调他的函数,就可以了。
amwggyy504 2008-08-04
  • 打赏
  • 举报
回复
好的,谢谢,我去找找看。。。
sky911911 2008-08-04
  • 打赏
  • 举报
回复
去看看博客园的设计模式 那里面有个人写的文章 感觉和你这个log有点像
amwggyy504 2008-08-04
  • 打赏
  • 举报
回复
这两种可以一起结合吗??我觉得不能并用。。。
现在我就是想明确,倒底用哪一种方法来让别人调用。
freeren17 2008-08-04
  • 打赏
  • 举报
回复
哈哈,工厂模式把第一种封装起来,通过注入动态的参数告诉工厂你想要什么!
amwggyy504 2008-08-04
  • 打赏
  • 举报
回复
而且第一种方法,扩展性也不是很好,每添加一个日志类型,都需要写一系列的方法。如新增删除用户的日志的话,需要重新写一个删除用户的操作方法。
amwggyy504 2008-08-04
  • 打赏
  • 举报
回复
没人回复。。一起讨论一下。。
amwggyy504 2008-08-04
  • 打赏
  • 举报
回复
一下子不好找呀。。sky911911 请问URL还记得吗?

3,405

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 设计模式
社区管理员
  • 设计模式
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧