Ankündigung

Einklappen
Keine Ankündigung bisher.

Zwei Module funktional gleich -> 1 Modul machen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zwei Module funktional gleich -> 1 Modul machen

    Hallo,

    ich verwende seit geraumer Zeit Codeigniter und mache mir viele Gedanken, wie man was wohl am einfachsten/effektivsten/elegantesten/... löst.

    Ob das jetzt Codeigniter ist oder nicht spielt erstmal eine untergeordnete Rolle, da das Thema doch allgemeiner ist.

    Man spricht ja oft von "Das Problem abstrahieren, anschließend modularisieren". Ich habe viel gelesen und stoße dabei aber immer wieder auf genau das Gegenteil.

    Ein Beispiel: Jemand programmiert ein Blog mit Kommentarfunktion.

    Er schreibt also ein Modul "Blog" mit folgenden Methoden.

    public function index() //zeigt die letzten 10 Einträge an

    public function artikel( $slug ) //zeigt Artikel "$slug" an, sofern exisent, andernfalls Fehlerseite oder Standartartikel (nach Belieben)

    public function kategorie( $slug ) //zeigt letzten 10 Artikel der Kategorie "$slug" an falls gesetzt, anderfalls die letzten 2 Einträge jeder Kategorie


    Meine Frage ist nun, wie ich den Spass ein wenig abstrakter gestalten könnte.

    Denn ein Forum z. B. unterscheidet sich von einem Blog funktional gesehen nicht.

    Im Blog habe z. B. nur ich Schreibrechte.
    Im Forum hätten es auch meine User.

    Der Blog hat eine Kommentarfunktion.
    Das Forum eine Antwortfunktion.

    Beide Module wären aber gleich aufgebaut. Ich hätte also sowas, wie

    public function index() //zeigt Forum an

    public function forum($slug) //zeigt Themen im Forum "$slug" an, andernfalls index()

    public function topic($slug) //zeigt Topic $slug mit Antworten an, andernfalls Fehlerseite oder sonstwas

    Wie könnte ich es hinbekommen, diese beiden Module abstrakter zu schreiben, um nicht ständig zu wiederholen.

    Auch andere Module wären funktional gesehen, wie ein Blog oder ein Gästebuch.

    Ich habe mich für den Bereich "Frameworks" entschieden, weil ich hoffe vielleicht doch, dass jemand im Codeigniter-Style eine Lösung parat hat.

    Ansonsten gerne verschieben.

    LG

  • #2
    Moin,
    schöne Frage!

    Im Blog habe z. B. nur ich Schreibrechte.
    Im Forum hätten es auch meine User.
    Dazu ein kleines Beispiel für einen Proxy
    PHP-Code:

    Interface PostServiceInterface {

        public function 
    create (Post $post);

    }

    class 
    PostService implements PostServiceInterface {

        public function 
    create (Post $post)
        {
            
    // TODO: Implement create() method.
        
    }
    }

    class 
    BlogPostServiceProxy implements PostServiceInterface
    {

        
    /**
         * @var PostServiceInterface
         */
        
    private $postService;
        
    /**
         * @var int
         */
        
    private $userId;

        
    /**
         * BlogPostService constructor.
         *
         * @param PostServiceInterface $postService
         * @param $userId
         */
        
    public function __construct (PostServiceInterface $postService$userId)
        {
            
    $this->postService $postService;
            
    $this->userId $userId;
        }

        
    /**
         * @param Post $post
         *
         * @throws Exception
         */
        
    public function create (Post $post)
        {
            if (
    $this->userId !== SOMEWHERE::ADMIN_USER_ID)
            {
                throw new 
    Exception('Is not admin');
            }
            
    $this->postService->create($post);
        }

    Mit der Initialisierung z.B.
    PHP-Code:

    $forumPostService 
    = new PostService();
    $forumPostService->create(new Post());

    $blogPostService = new BlogPostServiceProxy(
        new 
    PostService(),
        
    SOMEWHERE::ADMIN_USER_ID
    );
    $blogPostService->create(new Post()); 
    Der Proxy würde in diesem Beispiel also prüfen ob die vorher übergebene UserId einem Admin gehört und anschließend den anzulegenden Post an den üblichen Postservice weitergeben oder eine Exception werfen.
    Dazu gehören dann noch Factory, entsprechende Repositories und Konfigurationen und der ganze Spaß, aber wenn man Implementationen für Blog und Forum teilen möchte, könnte man es so machen.
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar

    Lädt...
    X