webForumDet fria alternativet

Behöver en funktion från modellen i modellen. Anropa från controller eller model?

PHP

1 svar · 849 visningar · startad av xtreme

Medlem sedan juli 20002 056 inlägg
Frågan#1

En funktion i modellen måste få data från en annan funktion i modellen. Bör man gå tillbaka till kontrollern eller anropa den direkt från modellen?

Anropa generate från kontrollern

class Inventory extends Controller {

	function add_stock()
	{
		$generate = $this->model->generate(); //call generate from controller
		$this->model->current_stock($generate);
	}
}

class Model {
    public function current_stock($generate)
    {
    	//do something
    }

    public function generate()
    {
    	//do something
    	return
    }
}

ELLER LÖSNING 2

Anropa generate från modellen

class Inventory extends Controller {

	function add_stock()
	{
		$this->model->current_stock();
	}
}

class Model {
    public function current_stock()
    {
		$generate =	$this->generate(); //call generate from model
    	//do something
    }

    public function generate()
    {
    	//do something
    	return
    }
}

ELLER LÖSNING 3

Ett tredje alternativ är att anropa en funktion vars enda uppgift är att deligera till andra funktioner i modellen, dvs såhär. Hur ser det ut?

class Inventory extends Controller
{
    function add_stock()
    {
        $this->model->add_stock();
    }
}
class Model
{
    public function current_stock($generate)
    {
        //do something with information from generate
    }

    public function generate()
    {
        //do something
        return;
    }

    function add_stock()
    {
        $generate = $this->generate();
        $this->current_stock($generate);
    }
}

Alla lösningar fungerar men vilken är bästa lösningen?

OBS! Detta är bara kodexemel och kan innehålla något fel, bara för att illustrera hur jag menar.

Medlem sedan feb. 20005 891 inlägg
#2

Utan att veta precis vad current_stock() och generate() gör så skulle jag ändå luta åt alternativ 1. Anledningen är att det borde vara uppenbart av att läsa koden i Controller-klassen vad den gör, om man nu kan tänka sig en situation där man antingen anropar current_stock() eller generate().

Men om current_stock() alltid och endast använder sig av generate() så fungerar alternativ 2...

251 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)