这个应用程序的设计模式?

时间:2009-04-03 22:48:03

标签: design-patterns

您正在撰写管理在线课程的应用程序。课程以多种方式完成。用户必须执行以下一项或多项操作才能完成课程:

  • 在课程中花费x小时
  • 参加考试,并通过考试(每门课程的及格分数可能不同)
  • 在课程中学习所有课程
  • 您尚未了解的其他一些要求

当课程完成时,某些事件需要发生。该活动取决于课程。可能需要执行以下一项或多项操作:

  • 为用户创建自定义证书
  • 通过电子邮件,HTTP回调或其他方式提醒组织
  • 您尚未了解的其他一些要求

许多课程在要求方面几乎相同,但有些课程完全独特。有很多课程,超过50个,还有更多课程。

你会如何设计这样的应用程序?是否有可用于消除冗余代码的设计模式,并且可以轻松添加/编辑课程?

3 个答案:

答案 0 :(得分:1)

用于处理最终阶段的消息总线和用于确定它们何时通过的状态机。实际上所有这些都可以使用消息总线完成。一本好读的书是企业集成模式,它可以解决这些问题。棘手的部分是确保软件的错误不会导致学生失去信用。

也许我只是有jms / esb发烧。

答案 1 :(得分:1)

在这里我将如何开始草绘它......

你有一个Course对象在它的构造函数中接受一个Requirements对象和一个OnCompleteActions对象......我将把构造函数设置为内部并创建一个将知道如何构建所有不同课程的CourseBuilder但是...... / p>

当课程更新时,它会通过将自身传递给Requirements对象来检查是否满足要求。如果它符合要求,则将其自身传递给OnCompleteActions。

private void OnCourseUpdate()
{
        if (this._Requirements.AreMetBy(this))
        {
            this._OnCompleteActions.Execute(this);
        }
}

Requiremetns对象只是一个IRequirement聚合列表,您可以根据您创建的课程进行微调... AreMetBy方法简单列举列表中的所有IRequirements并检查您的课程是否满足所有要求...

interface IRequirement 
{
    public bool IsMetBy(Course course);
}

然后你可以有各种不同的要求来实现IRequirement ......

class CourseHoursRequirement : IRequirement
{
    public CourseHoursRequirement(int minimumHours)
    {...}

    public bool IsMetBy(Course course)
    {
        return course.NumberHours >= this._MInimumHours 
    }
}

相同的想法,OnCompleteActions将有一个或多个IOnCompleteAction的列表,将执行每个。恩。 CreateCertificateOnCompleteAction,SendEmailOnCompleteAction等

通过将每个可能的Requirement封装在自己的类中,您可以构建一个具有MinimumHourRequirement,PassedAllTestRequirement等的课程。您可以轻松添加新的需求,因为它们都在实现相同的界面。您可能需要添加一些限制属性(如minimumHours),但实际工作是在IsMetBy()方法内完成的......

祝你好运!

答案 2 :(得分:0)

由于任何课程都有固定的步骤,那么我们可以在这里使用模板模式吗? 喜欢

interface Course{
timeSpent();
testTaken();
lessonLearnt();
miscllenious();

}

所有课程都将实现此界面并相应地实施该方法。 请提供您的意见,以便我能够清楚我是否理解。