Прочитайте много книг о Laravel 4 и это структурирование с использованием интерфейсов и реализаций через контейнер IoC. Так что теперь из всей этой информации я ничего не понимаю.Структура приложения Laravel 4: как организовать пользовательские и его профильные модели с использованием принципов SOLID
В примере я иметь такую структуру:
app
-- config
-- database
-- lang
-- ...
-- logic
-- -- MyAPP
-- -- -- Controllers
-- -- -- Interfaces
-- -- -- Libraries
-- -- -- Models
-- -- -- -- User
-- -- -- -- -- Profile.php
-- -- -- -- -- User.php
-- -- -- Repositories
-- -- -- ServiceProviders
У меня модель пользователя и модель профиля, которая не может существовать без пользовательской модели, потому что она имеет отношение один к одному.
В примере я пользовательский интерфейс:
interface UserInterface
{
public function find($userId);
public function findProfile($userId);
public function replace($userId, $attributes, $profileAttributes);
}
И реализация, которая выглядит следующим образом:
class UserRepository implements UserInterface
{
protected $user;
protected $profile;
public function __construct(Model $user, Model $profile)
{
$this->user = $user;
$this->profile = $profile;
}
public function find($userId)
{
return $this->user->find($userId);
}
public function findProfile($userId)
{
return $this->profile->where('user_id', $userId)->first();
}
public function replace($userId, $attributes, $profileAttributes)
{
//
}
}
Так что мой вопрос, что это хорошая практика, если я пытаюсь реализовать SOLID принципов, UserRepository вводит две модели User и Profile, или это был бы правильный способ создать ProfileInterface и ввести его в UserRepository, чтобы было что-то вроде этого:
public function __construct(Model $user, ProfileInterface $profile)
Вещь, которую я не могу понять, является правильным способом организации зависимостей. Потому что я думаю, что ProfileInterface должен иметь всю функциональность профиля, но с другой стороны он не может существовать без Пользователя, потому что мы создаем пользователя в таблице, а затем добавляем во вторую таблицу user_profiles его детали.
Где лучше хранить функциональность. пользователя и его функции UserProfile в одном интерфейсе - UserInterface или в отдельных интерфейсах: UserInterface и ProfileInterface, которые вводятся в UserInterface?
И если ProfileInterface вводится в UserInterface, как я должен создать нового пользователя (используя Eloquent)?
Вы когда-нибудь загружаете пользователя без загрузки своего профиля? –
Нет, я всегда получаю доступ к $ user и получаю доступ к его профилю через такие отношения; $ user-> profile-> some_profile_field, где profile - это метод отношений, который указывает на модель профиля – user991