设计一系列OO类的正确方法

时间:2013-01-29 16:12:29

标签: php oop interface model

我正在设计一个系统来与几个不同的LMSs进行交互(目前:Moodle,BlackBoard,Canvas)。目前,我的内容如下:

ModelFactory
     |
MoodleModel     -\
BlackboardModel -|-- LMSInterface
CanvasModel     -/

从我的终点来看,我正在做

$mf = new ModelFactory($app, $ioc);

ModelFactory确定(来自$app)要加载哪些模型,创建模型,并允许通过$mf->model->调用后端模型。

在每个后端模型中,我都有get_coursesget_categoriesget_quizzes等方法。我现在需要从测验中获取问题。

我最初的想法是在我的后端模型中添加get_quiz_questions,但这看起来很脏。

是否有“建议”的方法?

3 个答案:

答案 0 :(得分:2)

get_quizzes返回什么?一个Quiz对象?如果是这样,您只需将get_questions添加到此对象,而不必担心LMS对象的层次结构。您的Quiz对象将是测验的后端不可知表示。

答案 1 :(得分:0)

认为它应该非常依赖于您使用的对象和模型。如果问题是测验的100%部分,而不是模型的数据,则允许模型返回测验问题会令人困惑。但是,如果测验问题只是模型的第一级问题 - 那么允许模型返回问题是很正常的。

此外,例如,如果测验是一些复杂的对象,并且可能返回问题并节省一些资源而不构建/发送测验实例。在其他情况下,我同意Brian的观点。

而且,如果你的LMS接口是某种远程接口 - 那么你需要让它尽可能简单并保证它只返回整个对象,避免微调用。

答案 2 :(得分:0)

如果您向后端模型添加get_quiz_questions,那就没问题了。我希望这样一个函数(提供一系列测验问题)来返回通用对象(可能使用Adapter pattern,或者Facade,这取决于设计的其余部分。)