Возможно, вам нужно создать отдельный ярлык для билетов? Snaplet infrasructure предназначен для многоразового использования компонентов, таких как управление сессиями, аутентификация, доступ к базам данных, администратора панели, управление пользователями и т.д.
Вы собираетесь использовать билеты на автономный модуль через несколько веб-приложений? Если это так, то непременно вперед и создайте привязку.
В любом случае, это звучит так, как будто вы, по крайней мере, частично спрашиваете, как организовать проект с несколькими «модулями» или «частями» при использовании оснастки. Я попытаюсь обратиться к этому ниже. Пожалуйста, дайте мне знать, если вы чувствуете, что я пропустил отметку.
Предполагая, что вам не нужно создавать отдельный snaplet для Билеты:
Для функциональности, специфичной к одному сайту, я думаю, вы бы лучше создать несколько модулей и разработки кода для функциональности прямо внутри пакета вашего текущего приложения и иерархии модулей. Вот несколько моментов, о том, как я организовывал мои поспешные проекты поздно:
Я кладу базы данных, связанные коды под модулями в MyApp.DB.
именах. У вас может быть MyApp.DB.Tickets
, который содержит все вызовы базы данных , необходимые для работы в вашем модуле Tickets.
Я поместил всю функциональность, связанную с пользовательским интерфейсом, под доменом MyApp.UI.
. Вы можете поставить модуль MyApp.UI.Tickets
, который содержит Handlers
, ваш Splices
, ваш Forms
и так далее.
Для обработки форм я использую отличную библиотеку digestive-functors. Вы можете найти это blog post полезным, если вы не знаете их уже.
Обычно у меня есть общая библиотека вспомогательного интерфейса под MyApp.UI.Helpers
, где я размещаю общий код, используемый для всех/большинства модулей пользовательского интерфейса.
Я обычно имеют общую форму вспомогательную библиотеку под MyApp.UI.Forms
Любой код по касательной к тому, что мое приложение выставляет веб-интерфейс выходит за пределы MyApp.UI.
имен. Поэтому, если моему приложению необходимо выполнить некоторые автономные анализы, я могу разместить их под пространством имен MyApp.Analysis.
.
После того, как вы определяете и экспортировать Обработчик под MyApp.UI.Tickets
, вы можете пойти в файл Site.hs
и подключить их в приложение на конкретных маршрутах.
Для вдохновения о том, как обращаться с соединениями с базой данных, вы можете проверить postgresql-simple snaplet.
Однако, если вам нужно создать snaplet:
snaplet это просто автономное приложение, которое использует Snap.Snaplet
инфраструктуру, (обычно) имеет свой собственный .cabal
файл и (обычно) является его собственный пакет Haskell. Snap затем дает вам путь к embed или гнездо это повторно используемое автономное приложение в еще одном приложении для оснастки. Подумайте об иерархии Russian dolls.
Предполагая, что вы выполнили что-то похожее на то, что я описал в разделе выше, вы теперь готовы на 95% для преобразования в привязку. Просто назовите свое приложение snaplet-tickets, выставьте SnapletInit
, используя makeSnaplet
, и используйте nestSnaplet
в другом приложении для привязки, чтобы включить эту функцию многократного использования.
Так что, если я хочу создать привязку, я бы создал новое приложение * snaplet-tickets * и выставил его с помощью 'makeSnaplet'. Как я буду использовать его в своем основном приложении? Я устанавливаю его с помощью cabal, а затем «импортирую» его? –
Да, если у вас действительно есть многоразовый компонент, который вы хотите сделать в snaplet, я бы поместил его в свой собственный проект. Мои снимки [snaplet-postgresql-simple] (https://github.com/mightybyte/snaplet-postgresql-simple) (еще не взломанный) и [snaplet-acid-state] (https://github.com/mightybyte/snaplet-acid-state) - примеры того, как это сделать. – mightybyte