Классы в модели или это безобразие.

Обсуждаем, как правильно строить приложения
Ответить
Vladbara705
Сообщения: 10
Зарегистрирован: 2019.02.23, 22:55

Классы в модели или это безобразие.

Сообщение Vladbara705 » 2019.02.23, 23:02

Здравствуйте.
Никак не могу найти ответ на свой вопрос.
Допустим, есть задание :
Определить по введенным в поле цифрам через запятую геометрическая это прогрессия или нет.

Дак вот, в модели мне нужно следовать канонам ООП (создание классов, которые отвечают каждый за свое) или же умещать все а разные методы под одним классом, который наследован от model?
Нужно ли в моделе вообще создавать классы или это делается где то в другом месте?
Прошу натолкнуть на правильный путь.

Аватара пользователя
samdark
Администратор
Сообщения: 9172
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Классы в модели или это безобразие.

Сообщение samdark » 2019.02.23, 23:36

Следовать ООП.

Vladbara705
Сообщения: 10
Зарегистрирован: 2019.02.23, 22:55

Re: Классы в модели или это безобразие.

Сообщение Vladbara705 » 2019.02.24, 10:05

Это значит, что другие классы должны работать (вызываться) классом, который наследуется от model? А класс наследуемый от model в свою очередь работает с контроллером. Правильно?

И прошу объяснить в каком случае используется репозиторий?

anton_z
Сообщения: 436
Зарегистрирован: 2017.01.15, 15:01

Re: Классы в модели или это безобразие.

Сообщение anton_z » 2019.02.24, 11:28

Код: Выделить всё


class ProgressionInput 
{
    /**
     * @var string
     */
    private $input;

    public function __construct(string $input)
    {
         $this->input = $input;
    }

    public function isProgression() : bool
    {
        //здесь будет код, который определяет, прогрессия это или нет, если прогессия return true, нет return false
    } 


}

Далее этот класс можно использовать в классе формы (или где угодно, зависит от задачи), для определения, является ли строка $input прогрессией.

Vladbara705
Сообщения: 10
Зарегистрирован: 2019.02.23, 22:55

Re: Классы в модели или это безобразие.

Сообщение Vladbara705 » 2019.02.24, 15:56

Ничего не понимаю))
Вот есть у нас например модель:

Код: Выделить всё

<?php
namespace app\models;
use Yii;
use yii\base\Model;
class Geometry extends Model
{
    public $progression;
    public function rules()
    {
        return [
            [['progression'], 'required','message' => 'Заполните поле'],
            [['progression'],  'match', 'pattern' => '~^(?:|(?:\d+\,*)*\d+)$~', 'message' => 'Поле может содержать только цифры и запятые']
        ];
    }
}
Могу ли я сделать так:

Код: Выделить всё

<?php
namespace app\models;
use Yii;
use yii\base\Model;
class Geometry extends Model
{
    public $progression;
    public function rules()
    {
        return [
            [['progression'], 'required','message' => 'Заполните поле'],
            [['progression'],  'match', 'pattern' => '~^(?:|(?:\d+\,*)*\d+)$~', 'message' => 'Поле может содержать только цифры и запятые']
        ];
    }
    
    public function GeometryFinish()
    {
    	$GeometryDefine= new GeometryDefine();
    	return $GeometryDefine->GeometryDefine();
    }
}

class GeometryArray
{
	public function GeometryArray()
	{
		//здесь код, который будет разбивать текст из поле ввода на массив
	}
}

class GeometryDefine
{
	public function GeometryDefine()
	{
		//здесь код, который будет определять прогрессия это или нет
	}
	
	// здесь, например, другие нужные методы
}
То есть, в модели я создал несколько других классов, которые отвечают каждый за свое.
Затем, в классе Geometry, который наследуется от model я буду передавать все в контроллер.
Прошу не смотреть на правильность кода, писал здесь, в редакторе.

Вопрос в том, можно ли в модели создавать другие классы и бизнес-логику хранить там ?
Или это делается в другом месте ?

anton_z
Сообщения: 436
Зарегистрирован: 2017.01.15, 15:01

Re: Классы в модели или это безобразие.

Сообщение anton_z » 2019.02.27, 14:29

Vladbara705 писал(а):
2019.02.24, 15:56
Вопрос в том, можно ли в модели создавать другие классы и бизнес-логику хранить там ?
Или это делается в другом месте ?
Конечно, можете. Главное чтобы было тестируемо.

Ответить