Как Вы делаете веб-приложение в Clojure? [закрытый]

private является предпочтительным для данных элемента. По умолчанию членами класса C ++ являются private.

public является предпочтительным для функций-членов, хотя это вопрос мнения. По крайней мере, некоторые методы должны быть доступны. public доступен для всех. Это самый гибкий вариант и наименее безопасный. Любой может использовать их, и кто-то может их неправильно использовать.

private недоступен вообще. Никто не может использовать их вне класса, и никто не может злоупотреблять ими. Даже в производных классах.

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

MFC - это C ++-оболочка для Windows API, она предпочитает public и protected. Классы, созданные мастером Visual Studio, имеют уродливое сочетание элементов protected, public и private. Но есть некоторые логики для самих классов MFC.

Членами, такими как SetWindowText, являются public, потому что вам часто приходится обращаться к этим членам.

Члены, такие как OnLButtonDown, обрабатывать уведомления, полученные окном. Они не должны быть доступны, поэтому они protected. Вы можете получить к ним доступ в производном классе, чтобы переопределить эти функции.

Некоторые члены должны выполнять потоки и контуры сообщений, им не следует обращаться или переопределять, поэтому они объявляются как private

В структурах C ++ члены public по умолчанию. Структуры обычно используются только для данных, а не для методов, поэтому декларация public считается безопасной.

215
задан Kara 1 May 2014 в 09:37
поделиться

4 ответа

Безусловно лучшей веб-платформой Clojure, с которой я все же встретился, является Compojure: http://github.com/weavejester/compojure/tree/master

Это является маленьким, но мощным, и имеет красиво изящный синтаксис. (Это использует Причал под капотом, но это скрывает API Сервлета от Вас, если Вы не хотите его, который часто не будет). Пойдите посмотреть на README в том URL, затем загрузите снимок и начните играть.

103
ответ дан 23 November 2019 в 04:21
поделиться

Webjure, платформа веб-программирования для Clojure.

Функции: сервлет Отправки вызывает функции Clojure. Поколение Динамического HTML. Интерфейс SQL-запроса (через JDBC).

Этот ответ предназначен как заполнитель для получения информации о Webjure.

11
ответ дан pupeno 23 November 2019 в 04:21
поделиться

Compojure, что я раньше создавал крошечное приложение блоггинга. Это смоделировано на Sinatra, который является минимальной, легкой веб-платформой для Ruby. Я главным образом просто использовал маршрутизацию, которая является точно так же, как Sinatra. Это похоже:

(GET "/post/:id/:slug"
  (some-function-that-returns-html :id :slug))

нет никакой библиотеки ORM или шаблонной обработки, но это действительно имеет функции, которые превращают векторы в HTML.

8
ответ дан Joe W. 23 November 2019 в 04:21
поделиться

Compojure больше не является полноценным фреймворком для разработки веб-приложений. Начиная с релиза 0.4, compojure был разделен на несколько проектов.

Ring обеспечивает основу, абстрагируясь от процесса HTTP-запроса и ответа. Ring анализирует входящий запрос и генерирует карту, содержащую все части запроса, такие как uri, имя сервера и метод запроса. Затем приложение обрабатывает запрос и на его основе генерирует ответ. Ответ представляется в виде карты, содержащей следующие ключи: status, headers и body. Таким образом, простое приложение будет выглядеть следующим образом:

(def app [req]
  (if (= "/home" (:uri req))
    {:status 200
     :body "<h3>Welcome Home</h3>"}
    {:status 200 
     :body "<a href='/home'>Go Home!</a>"}))

Еще одной частью Ring является концепция промежуточного программного обеспечения. Это код, который располагается между обработчиком и входящим запросом и/или исходящим ответом. Некоторые встроенные промежуточные программы включают сессии и stacktrace. Посредническое ПО сессий добавляет ключ :session в карту запроса, который содержит всю информацию о сессии пользователя, делающего запрос. Если ключ :session присутствует в карте ответа, он будет сохранен для следующего запроса, сделанного текущим пользователем. В то время как промежуточное ПО для трассировки стека будет фиксировать любые исключения, возникающие при обработке запроса, и генерировать трассировку стека, которая будет отправлена обратно в качестве ответа, если возникнут какие-либо исключения.

Работа непосредственно с Ring может быть утомительной, поэтому Compojure построен поверх Ring, абстрагируясь от деталей. Теперь приложение может быть выражено в терминах маршрутизации, поэтому вы можете получить что-то вроде этого:

(defroutes my-routes
  (GET "/" [] "<h1>Hello all!</h1>")
  (GET "/user/:id" [id] (str "<h1>Hello " id "</h1>")))

Compojure все еще работает с картами запросов/ответов, поэтому вы всегда можете получить к ним доступ при необходимости:

(defroutes my-routes
  (GET "*" {uri :uri} 
           {:staus 200 :body (str "The uri of the current page is: " uri)}))

В данном случае часть {uri :uri} получает доступ к ключу :uri в карте запросов и устанавливает uri в это значение.

Последний компонент - это Hiccup, который облегчает генерацию html. Различные html-теги представлены в виде векторов, первый элемент которых представляет собой имя тега, а остальные - тело тега. "

Заголовок

" становится [:h2 "Заголовок"]. Атрибуты тега находятся в необязательной карте. "Log In Page" становится [:a {:href "/login"}"Log In Page"]. Вот небольшой пример с использованием шаблона для генерации html.

(defn layout [title & body]
  (html
    [:head [:title title]]
    [:body [:h1.header title] body])) 

(defn say-hello [name]
  (layout "Welcome Page" [:h3 (str "Hello " name)]))

(defn hiccup-routes
  (GET "/user/:name" [name] (say-hello name)))

Вот ссылка на черновой вариант документации, которую в настоящее время пишет автор compojure, и которая может оказаться вам полезной: Compojure Doc

178
ответ дан 23 November 2019 в 04:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: