Каковы преимущества соглашений об именах сообщества rails для именования модели соединения?

В этой Railscast Райан Бейтс упоминает, что использование слов, оканчивайтесь на -tion, -ment или -ship при именовании модели соединения. Каковы преимущества этой конвенции?

Например, что, если бы у меня было две модели под названием «Альбомы» и «Песни» соответственно, где песня могла бы появиться на многих альбомах, а в альбоме было бы много песен? Какое имя было бы хорошим для таблицы соединений, необходимой для этого? Список треков? Треклисты?


person Lee McAlilly    schedule 12.03.2013    source источник
comment
действительно ли песня принадлежит более чем одному альбому? почти уверен, что это сборник или микстейп   -  person AJcodez    schedule 13.03.2013
comment
@AJcodez Да, данное событие записи может принадлежать нескольким альбомам (и некоторые люди явно заботятся о таких вещах). Помимо этого, я не вижу существенной разницы между альбомом и компиляцией, но если бы он был, то, похоже, флага/статуса было бы достаточно.   -  person Dave Newton    schedule 13.03.2013
comment
@DaveNewton интересно, не знал   -  person AJcodez    schedule 13.03.2013
comment
Например, одна и та же запись (или песня) Like a Rolling Stone появляется на Highway 61 Revisted, а также на Greatest Hits Vol. 1.   -  person Lee McAlilly    schedule 13.03.2013


Ответы (2)


Соглашение состоит в том, чтобы назвать это что-то, что имеет смысл.

Эти отношения часто заканчиваются этими концовками. Суть в том, чтобы следовать некоем соглашению и быть последовательным, а не в том, что все будет аккуратно вписываться в одни и те же три концовки.

Для меня это звучит как Tracks, AlbumTracks и т. д. Если вы хотите следовать его идее составления слова, возможно, Trackation или Trackination (процесс добавления треков в альбом), Albumship (например, "членство", но с песнями из альбома) и т. д.

Также обратите внимание, что, надеюсь, у вас нет моделей с именами Albums и Songs, а скорее Album и Song. ИМО, самая четкая связь - это просто AlbumSongs, потому что это именно то, что есть.

Вы можете пойти другим путем и тоже назвать их Mixes.

person Dave Newton    schedule 12.03.2013
comment
Спасибо, Дэйв. Треки имеют для меня большой смысл, хотя на самом деле треки — это песни с альбома, так что в этом смысле это немного сбивает с толку. Альбомные песни мне кажутся приемлемыми, но Райан Бейтс посоветовал не использовать это соглашение, потому что он сказал, что это может быстро запутать. Итак, в этом случае Tracklist будет лучшим? Причина, по которой мне нужна таблица соединений, заключается в том, что мне нужно хранить дополнительные данные о взаимосвязи между песнями и альбомами, например порядок появления песни в альбоме. В противном случае я бы просто использовал отношение has_and_belongs_to_many для обоих. - person Lee McAlilly; 13.03.2013
comment
@LeeMcAlilly Я думаю, что с TrackList все в порядке, я бы, вероятно, назвал таблицу track_lists. Однако я не уверен, что AlbumSongs сбивает с толку. Я также не стал бы так зацикливаться на этом, чтобы прогресс остановился — маловероятно, что стоимость или возможность внесения изменений станут решающим фактором при разработке. - person Dave Newton; 13.03.2013
comment
В итоге я пошел с albumization. Сначала я попробовал track_lists, но когда я начал устанавливать отношения, концептуально было более разумно говорить об альбоме has_many :songs, :through => :albumization, а также о той песне has_many :albums, :through => albumization. Процесс добавления песни в альбом и размещения ее в этом альбоме — это действительно то, что делает эта модель соединения. Так что я думаю, что выдуманное слово здесь имеет смысл. - person Lee McAlilly; 14.03.2013
comment
@LeeMcAlilly Кажется разумным; это похоже на отслеживание, но при отражении, которое потенциально может быть обратным, в то время как у вас нет. - person Dave Newton; 14.03.2013

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

person BlackHatSamurai    schedule 12.03.2013
comment
Спасибо, Блейн. Это хороший обзор ценности соглашений об именах. Но я предполагаю, что важно держать их в поле зрения и не использовать соглашение ради следования соглашению, когда оно не имеет смысла для вашей конкретной проблемы. - person Lee McAlilly; 13.03.2013