【问题标题】:Implementation for League Challenges联赛挑战的实施
【发布时间】:2014-07-01 09:54:12
【问题描述】:

我正在寻找一些关于我应该如何结合 Laravel 为我的应用程序设计逻辑的建议。到目前为止,我已经创建了基本的基础设施;但是,我目前正在制作一个联赛表并继续前进,我想确保它足够灵活以适应未来的变化,并且我还想更多地利用 Laravel 的功能,而不仅仅是基础。

到目前为止,我有一个“联赛”类,其中包含一个“id、标题、规则、状态、created_at、updated_at”和一个列出当前开放的联赛并允许用户注册的“LeagueController”对于他们每个人。

每次用户注册联赛时,都会创建一个“LeagueEntry”,其中包含“id、league_id、wins、loss、draws”,即联赛表中显示的统计数据。到目前为止就足够了:)

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

引起这种担忧的另一个原因是我将在稍后实现一个“锦标赛”类,该类也将使用“挑战”类(每次玩家在淘汰赛中挑战另一个玩家时) .

这样做的一种方法是创建一个抽象类“Challenge”,并拥有一个扩展此抽象的“LeagueChallenge”和“TournamentChallenge”;但是,有人告诉我,这在 Laravel 中是不可能的。如果不是这种情况,请纠正我。在这种情况下,最好使用存储库设计模式吗?

如您所见,我希望创建具有尽可能多的灵活性的“挑战”类,并且我正在寻找我可能忽略的 Laravel 的任何功能,以及我尚未发现的任何基本设计原则想到。

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

【问题讨论】:

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


    【解决方案1】:

    这样做的一种方法是创建一个抽象类 'Challenge',并有一个 'LeagueChallenge' 和 'TournamentChallenge' 扩展这个抽象;但是,有人告诉我,这 使用 Laravel 是不可能的。

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

    只需像这样扩展Eloquent 来创建一个Base 类:

    // 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,它将帮助您轻松地维护和测试您的应用程序,但您不一定要使用它。

    【讨论】:

    • 我知道我应该遵循我最初的直觉,谢谢!
    【解决方案2】:

    我建议你看看这个 https://github.com/LaravelIO/laravel.io ,这是由 laravel 贡献者之一制作的。他如何处理和组织他的文件真的很有趣。

    【讨论】:

    • 谢谢!到目前为止有一个简短的了解,它很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多