По необходимости, как доказывают, масштабируем к 5 000 + пользователи на единственном сервере в Google, видит: Жизнь на Краю: Контроль и Выполнение Очень Большого По необходимости Установка
казалось бы, что многие крупнейшие компании-разработчики программного обеспечения используют По необходимости или исключительно или как их основной SCM. Например: Adobe, Cisco, SAP, Symantec, EA, Ubisoft и Autodesk - все По необходимости пользователи. Это не прекрасно, но это все еще превосходит SVN или TFS (Ни один из которых не плох в своем собственном праве)
I would use records:
-record(post, {title, date_created, body, comments = []}).
-record(comment, {created_by, date_created, content}).
Then if you want to use mnesia as database:
Post = #post{title = "", body = "", date_created = erlang:universaltime()},
mnesia:transaction(fun() -> mnesia:write(Post) end).
To add a comment:
Comment = #comment{created_by = "", content = "", date_created = erlang:universaltime()},
mnesia:transaction(fun() ->
[Post] = mnesia:read(post, Title),
PostWithNewComment = Post#post{comments = [Comment | Post#post.comments]},
mnesia:write(PostWithNewComment)
end).
I haven't tested the code, but this is what I would do. Also I assumed that each title is unique.
Эрланг - это объектно-ориентированный язык. Это утверждение имеет большую силу, если вы посмотрите на ООП так, как его описал Алан Кей:
ООП для меня означает только обмен сообщениями, локальный сохранение и защита и сокрытие состояние-процесс и крайний позднее связывание всех вещей.
Как вы должны знать, Erlang продвигает стиль программирования, называемый Параллельно-ориентированное программирование , в котором вы абстрагируете объекты как независимые процессы, которые общаются посредством передачи сообщений. У каждого процесса есть свое локальное состояние, они живут в своем параллельном мире. Динамический полиморфизм достигается тем, что вы можете определить класс процессов, которые могут отвечать на общий набор сообщений. Поскольку «объекты» Erlang живут в своем собственном крошечном процессе, он становится естественной средой для моделирования реального мира. Вы можете использовать свои навыки ООП в Erlang лучше, чем в любом другом языке.
Невозможно дать полное описание ООП в Erlang на таком маленьком пространстве. Предлагаю вам прочитать книгу Программирование на Erlang: Программное обеспечение для параллельного мира .
Также см. Эти ссылки:
Ваш пример на самом деле не представляет хорошего объектно-ориентированного стиля. Комментарии появляются к уже опубликованным сообщениям в блогах, поэтому к тому времени у вас будет просто какая-то ссылка на идентификатор сообщения, на который размещен комментарий.
Для объектно-ориентированного программирования было бы разумнее иметь какой-то объект BlogDb, который отправляет сообщение и комментировать объекты. Объект комментария должен знать, к какому идентификатору поста он относится. Вы не должны создавать объекты сообщений и комментариев с помощью оператора 'new', вместо этого интерфейс BlogDb имеет методы, возвращающие их свежие экземпляры.
Внезапно у вас есть приемлемый способ реализовать то же самое в Erlang. Запустите gen_server, который является blog_db. Делайте такие вещи, как
Post = myblog:post(Title, Body),
{ok, Result} = myblog:add_post(BlogDb, Post),
...
. Вам не нужно знать детали значения Post, поэтому то, как оно создается, скрыто в «конструкторе» для него в другом модуле.