OO设计问题

时间:2010-12-12 12:16:09

标签: oop design-patterns

如何设计OO论坛。它将具有哪些类别和功能。 谢谢!

  Class User 
    {
     $name;
     $useid;
    $fname;
    $lname;
    Topic createTopic() ;
    postMessage(Topic topic_id);
    login ($userid)
    logout($userid)

    }

    Class Adminuser extends User
    {
       CreateForum()
    }

    Class Normaluser extends User
    {

    }

    Class Forum
    {
     Topic[]  topic_objs;
    $forum_id;
    $forum_name;
    $forum_desc;
    getAllTopics();
    }


    Class Topic
    {
    $topic_id;
    $topic_name;
    $topic_desc
    Replies[] reply_objs ;
    getAllMessages() ;

    }

    Class Replies
    {
       Topic topic_obj;
       $content ;
      }
    Class Site 
   {
     Users[] users_obj;
     Forum[] forums_obj;
   getUsersList();
   getForumsList();

   }

任何人都可以提出一些想法,以便我可以改进和完善设计。

3 个答案:

答案 0 :(得分:3)

让我们从一个场景开始。

  

论坛用户Joe查看该网站

     

Joe输入论坛的URL   他的浏览器。

     

Joe登录论坛。他选择了   要登录的选项   下次自动

     

乔看到了他的论坛列表,分组   分类,标题和   简短说明。

     

存在其他论坛,但他看不到   那些。

     

包含新主题或新主题的论坛   回答自乔上次以来的话题   观看论坛时突出显示。

     

Joe查看其中一个论坛   自上次访问以来的活动。他   按顺序查看主题列表   最后一项活动(创建日期为   新主题或最后回复日期)。

     

自Joe上次查看以来,主题发生了变化   它们突出显示。

     

Joe看了几个主题   他上次访问后改变了。该   主题和任何回复都列在   创作顺序(不是修改 -   可以编辑主题和回复,但是   这不会改变顺序)

     

主题有主题行,标签,an   作者姓名,创作日期和   最后编辑和一个正文。乔出现了   所有这些,除了最后一个编辑日期   仅在与其不同时显示   创作日期。回复刚才   作者姓名,创作日期和   最后编辑日期。再次,最后一次编辑   日期仅在不是时显示   与创建日期相同。

     

Joe重新访问了文章列表   论坛。这一次,他的文章   现在已经不再看了   突出显示,但其他文章   自从他的拉特访问后他改变了   还没读过。

     乔回顾了一篇文章,并制作了一篇文章   回复其中一个回复。该   该回复的正文包括在内,   引用,作者归属,在   他回复的编辑窗口。他   删除一些身体并添加他的   自己的回应。他选择“发送”并且是   回到了主题。

     

他被警告说另一个回复了   在他编辑的时候加入了   要求确认他仍然想要   帖子。他确认,然后回来了   主题显示添加了他的回复   到最后。他回到论坛。   刚刚添加的主题不是   突出显示,自改变以来   由他。

现在,这可能比您想要考虑的功能更多。但如果你确实想要支持它,它会影响你的设计(显然)。我的观点是,您必须确定用例,要支持的功能,以便说明设计是否足够或缺少什么,或者它将难以实现。

从上面的场景中,我们可以提取一些用例。我们还可以确定需要进入域模型的内容 - 用户,论坛,主题,回复,还有那些属性 - 上次修改日期 - 和操作(按类别划分的论坛列表,每个论坛的主题列表,日期订单等)。

我建议首先集中精力识别关键域对象和操作,因为这可以让你推迟判决。例如,您将需要一个操作“自上次访问用户以来主题已被修改”,但您无需确定主题是否知道哪些用户访问过何时或用户是否知道何时访问了哪些主题。实际上,如果你的高级/接口设计只指定操作,你使用哪一个可以是一个实现细节,并且可以随时更改而不会影响其他任何操作。

假设你的问题来自作业的措辞,请注意你说

  

“它会是什么类别和功能   有。 “

。这些类不具备哪些字段,尽管这主要是您的问题中的代码所涵盖的内容。因此,作业要求您了解哪些关键对象,哪些类型以及需要用什么来完成

如果我有时间,我可能会回来并提出一些设计思路,但是(因为我假设这是一项任务),如果你仔细考虑,那会更好。

答案 1 :(得分:0)

是的,我建议您为这些对象添加一些关系。我本来希望论坛有用户和主题的集合,因为每个中只有一个不会有趣。

答案 2 :(得分:0)

我认为,首先要做的是用例。您打算支持哪些功能?之后,您可以考虑要制作的课程。

一眼就看出来的是消息不是一个对象。如果它是一个对象,它将更容易操作(例如删除或隐藏将更优雅)。但是,由于我不知道你的用例,我不确定它是如何工作的。

如果您希望论坛包含Topics,那么您的ForumsTopics应该是多对一关系。我不确定你的用例,但有一个建议是给每个论坛一个子论坛列表(我的意思是Forum[] subforums)和一个可选的高级论坛链接。所以你可以分层次地组织你的论坛。