Как представить список в Datamapper - PullRequest
0 голосов
/ 14 марта 2011

У меня есть следующая модель datamapper:

class List 
    include DataMapper::Resource
    property :id, Serial
    property :author, String, :required => true, 
      :default => lambda { |r, p| @user_nick }
    property :name, String, :required => true, :length => 1..255
    property :created_at, DateTime, :default => lambda{ |r, p| Time.now }

    has n, :items
end

class Item
    include DataMapper::Resource
    property :id, Serial
    property :text, String, :required => true, :length => 1..255

    belongs_to :list
end

Другими словами, список, содержащий ноль или более элементов.

Список еще не упорядочен.Мой вопрос: как мне это сделать?Я вижу два очевидных решения:

(a) увеличить Item целым числом index или

(b) увеличить Item с помощью previous и next field, IOW реализует двусвязный список

Оба решения кажутся мне неэффективными и подверженными ошибкам (я годами не реализовывал связанный список или операции обхода и модификации, и даже тогда это было школьное упражнение).

Естьесть лучший способ?(Я не особо отношусь к производительности, это всего лишь прототип, а не реальное приложение, но я бы хотел получить «правильное» решение как с точки зрения надежности, так и с точки зрения производительности).Если это имеет значение, я использую бэкэнд AppEngine от Datamapper, но мне бы хотелось что-то, что также могло бы хорошо работать на СУБД.

Cheers

1 Ответ

0 голосов
/ 23 марта 2011

(а) Хотя я согласен с тем, что при ручной настройке это может привести к ошибкам, dm-is-list позаботится о некоторых деталях.Требуется тщательное кодирование при одновременном обновлении нескольких элементов (см. Оптимальный сценарий).

(b) Хотя я не могу комментировать, как это относится к AppEngine, системы СУБД предоставляют вам произвольный доступ и, как таковые,двусвязный список не требуется.Кстати, сортировка, переупорядочивание и навигация по двусвязному списку в СУБД меня пугают.Я предпочитаю, чтобы мое приложение зависало, а не создавало бесконечный цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...