联盟挑战的实施

时间:2014-05-13 15:58:01

标签: design-patterns laravel laravel-4 business-logic

我正在寻找一些关于如何与Laravel一起为我的应用程序设计逻辑的建议。到目前为止,我已经创建了基础设施;但是,我目前在联盟桌上工作并向前迈进我想确保它足够灵活以允许未来的变化,而且我还想更多地利用Laravel的功能而不仅仅是基础。

到目前为止,我有一个班级'联盟'其中包含' id,title,rules,status,created_at,updated_at'以及' LeagueController'列出了当前打开的联赛,并允许用户注册每个联赛。

每次用户报名参加联赛时,都会有一个联盟内线'创建包含' id,league_id,wins,loss,draw',即联赛表中显示的统计数据。到目前为止足够简单:)

在表格中,用户可以选择挑战联盟中的任何一个其他玩家。这就是我的困境所在。我可以简单地创建一个名为“挑战”的新单独对象。并使用' ChallengeController'为了管理两个参与者之间存在的积极挑战,我正在寻找更好的方法来实现这一点。

这种担忧的另一个原因是我将实施一场比赛'以后上课,也将使用“挑战”。 class(每次玩家设置为在淘汰赛中挑战另一个)。

这样做的一种方法是创建一个抽象类'挑战'并且有一个' LeagueChallenge'和' TournamentChallenge'延伸这种抽象;但是,有人告诉我,Laravel不可能做到这一点。如果不是这样,请纠正我。在这种情况下,最好使用存储库设计模式吗?

正如您所看到的,我想创建我的挑战'尽可能灵活地上课,我正在寻找我可能忽略的任何Laravel特色,以及我没有想过的任何基本设计原则。

非常感谢有关如何更好地解决此问题的任何想法。

2 个答案:

答案 0 :(得分:1)

  

这样做的一种方法是创建一个抽象类   '挑战'并且有一个' LeagueChallenge'和' TournamentChallenge'   延伸这种抽象;但是,我已被告知这一点   Laravel是不可能的。

根据您上面给出的问题,您可以使用抽象类,并且在创建子类时可以extend,但如果您需要通过扩展Eloquent模型来使用Eloquent,那么您不能同时扩展两个类,PHP不限Laravel,但您可以使用不同的方法。

只需通过扩展Base来创建Eloquent课程:

// Challenge Model
abstract class Challenge extends Eloquent {
    // Force Extending class to define this method
    abstract public function someMethod();
}

然后通过扩展Challenge类来创建子类:

// LeagueChallenge Model
class LeagueChallenge extends Challenge {
    public function someMethod()
    {
        //...
    }
}

// TournamentChallenge Model
class TournamentChallenge extends Challenge {
    public function someMethod()
    {
        //...
    }
}

您可以在应用程序中使用repository pattern,它可以帮助您轻松维护和测试您的应用程序,但您不一定会使用它。

答案 1 :(得分:0)

我建议你查看这个https://github.com/LaravelIO/laravel.io,这是由一位laravel贡献者提出的。他如何处理和构建他的文件真的很有趣。