2009-12-31 2 views
2

Я хочу использовать хорошее соглашение об именах mvc для форума im, создающего.Соответствующая структура MVC для форума

интересно, я должен использовать эту структуру:

controller: threads 
model: threads_model (eg. $threads_model->get_all_threads, $threads_model->add_thread, $threads_model->add_post, $threads_model->add_comment) 

controller: tags 
model: tags_model (eg. $tags_model->get_all_tags, $tags_model->add_tag) 

controller: users 
model: users_model (eg. $users_model->get_all_users, $users_model->add_user) 

или

controller: content 
model: content_model (eg. $content_model->get_all_tags, $content_model->get_all threads...) 

controller: users 
model: users_model (eg. $users_model->get_all_users, $users_model->add_user) 

это мой первый раз, используя MVC, так что я хочу знать, что это лучшая практика для этого. должен ли я в первом примере разделять каждую «вещь» (теги, потоки, пользователи ...), или я должен использовать вторую? еще больше, должен ли я в первом примере разделить комментарии и сообщения так, чтобы они были их собственными контроллерами/моделями?

было бы хорошо, если бы кто-нибудь дал мне хороший шаблон mvc для форумов.

+0

thats to уродливый, обычно программисты работают один месяц, чтобы запланировать mvc для форума, и вы хотите, чтобы мы отправляли что-то, что даже неправильно, и непригодно. для меня этот вопрос не может быть дан. – streetparade

+0

это никогда не предназначалось для того, чтобы укладывать часы работы, чтобы дать мне полное описание. я просто хотел обсудить это в целом, поэтому я не был в стороне от правильного мышления .. im новичок в mvc, а также программирование контроллеров – ajsie

ответ

4

В течение 2 вы опубликовали, скажем, 1-я структура лучше всего. Подумайте о своей системе как о отдельных сущностях и о взаимоотношениях между ними. В качестве простого примера

Thread 
Reply 
User 
Tag 

В этом случае сома соответствующие ассоциации будет ..

User can create many threads 
User can create many replies 

Reply Belongs to a User 
Reply Belongs to a thread 

Thread belongs to a user 
Thread has many replies 
Thread has many tags 

Tag has many threads 

После объединения сделаны его немного яснее думать о методах, необходимых, таких как:

**User** 
Get Threads: Returns all threads created by this user 
Get Replies: Returns all replies created by this user 

**Thread** 
Get User: Returns the User that created this thread 
Get Replies: Return all replies to this thread 

**Reply** 
Get User: Returns the User that created this reply 
Get Thread: Returns the Thread that this user belongs to 

Очевидно, что в модели пользователя может быть больше методов, например, вы можете захотеть вернуть конкретный поток по id, чтобы у вас также был метод GetThread, который вы передали бы id.

Надеюсь, это заставит вас немного подумать!

Еще один момент заключается в том, что в ваших моделях, таких как ваша модель тегов, у вас есть метод addTag, насколько я знаю, вы бы не хотели этого метода в своей модели, так как тогда это могло быть вызываемый тегом. Если вам нужно было создать тег, чтобы добавить тег, вы наверняка застряли. Id переместите это в контроллер.

+0

выглядит логичным – streetparade

+0

thx для отличного описания. только один вопрос. если я хочу, например, создать поток. лучше всего сделать это с помощью $ threads_model-> create_thread ($ user_id) или $ users_model-> create_thread? – ajsie

+0

Нет проблем. Создание, обновление и удаление моделей обычно передается контроллером. Вы можете поместить метод create() внутри контроллера или, если вы используете классы, сделать его методом класса Thread. Затем в контроллере просто вызовите Thread.create() и передайте нужные вам параметры, такие как title, body, user_id. То, как я думаю о MVC, состоит в том, что модели определяют объекты данных, Контроллеры выполняют действия с/на этих объектах, а Views отображает объекты. Надеюсь, поможет. – cast01

2

Ваша первая структура будет лучше, отделить все это с самого начала, вы никогда не знаете, когда будущей функции понадобятся некоторые теги index json или что-то в этом роде.

Каждый (большинство) контроллер имеет свой индекс CRUD действия, просматривать, редактировать, новый, сохранить и т.д.

РНР функция автоматической загрузки может занять название модели, а затем заглянуть в каталог моделей для файла требовать ().

Дайте отдельные комментарии и сообщения в разных моделях и контроллерах, пост-контроллер будет иметь представление/показать действие, чтобы отобразить сообщение, которое может иметь форму с действием = "", указывающим на действие сохранения/создания комментарии контроллер.

«Обычная» структура файловой системы MVC может быть:

/app/ 
    controllers/ 
       content/    <- controller name 
         home.php   <- actions that require(../../views/content/home.php) 
         view.php 
       users/ 
         index.php 
         view.php 
       tags/ 
         edit.php 
    models/ 
       content.php    <- class Content{ } 
       user.php 
       tag.php 
    helpers/ 
       application.php  <- grouped up functions for areas of the system 
       tag_helper.php 
       content_helper.php 
    views/        <- templates 
       users/ 
         index.php 
         user.php 
         views.php 
    public/ 
       css/ 
         layout.css 
         typography.css 
         style.css 
       images/ 
         logo.png 
       js/ 
         global.js 
         content.js 
       assets/ 
         users/ 
           000234.png  <- e.g. profile images 

Эта структура в основном взяты из структуры Rails, которая очень организованной.

+0

не имеют просмотров – streetparade

+0

@streetparade, конечно, они не то, о чем вы говорите? –

+0

ваш контроллер имеет контент и имеет домашний вид – streetparade

Смежные вопросы