Как Вы обрабатываете управление версиями на веб-приложении?

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

Предположим, что существует lensProd. Достаточно взять одну и ту же линзу дважды:

_1 :: Lens' (a, b) a -- Simpler type

badLens :: Lens' (a, b) (a, a)
badLens = lensProd _1 _1

Тогда закон «Вы вернете то, что вы положили» не имеет. Это должно быть:

view badLens (set badLens (1, 2) (3, 4)) ≡ (1, 2)

Но это не может быть правдой, поскольку view badLens pair возвращает некоторое значение дважды: (x, x) для всех pair s.

@dfeuer дает пример, как определить lensProd.


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

{-# LANGUAGE RankNTypes #-}

import Control.Applicative
import Control.Lens

-- |
-- >>> :t sumPrism _Just _Nothing :: Prism' (Maybe a) (Either a ())
-- sumPrism _Just _Nothing :: Prism' (Maybe a) (Either a ())
--  :: (Applicative f, Choice p) =>
--     p (Either a ()) (f (Either a ())) -> p (Maybe a) (f (Maybe a))
--
sumPrism :: Prism' a b -> Prism' a c -> Prism' a (Either b c)
sumPrism ab ac = prism' build match where
    build (Left b)  = ab # b
    build (Right c) = ac # c

    match x = Left <$> x ^? ab <|> Right <$>  x ^? ac

-- The law
--
-- @
-- preview l (review l b) ≡ Just b
-- @
--
-- breaks with
--
-- >>> preview badPrism (review badPrism (Right 'x'))
-- Just (Left 'x')
-- 
badPrism :: Prism' a (Either a a)
badPrism = sumPrism id id

Как вы можете видеть, мы помещаем Right, но выходим из Left.

12
задан Sameer 4 April 2017 в 00:42
поделиться

5 ответов

Я думаю, что Вы ищете, что-то вроде этого: Как к автоинкрементной версии блока с помощью пользовательской задачи MSBuild. Это немного старо, но я думаю, что это будет работать.

4
ответ дан 2 December 2019 в 22:52
поделиться

Для моих больших приложений я просто использую идентификатор номера версии постепенного увеличения (1.0, 1.1...), что я храню в комментарии основного файла (обычно index.php).
Для просто веб-сайтов у меня обычно просто есть число пересмотра (1,2,3...).

2
ответ дан 2 December 2019 в 22:52
поделиться

У меня есть тенденция придерживаться основных целых чисел в первом (1,2,3), переходя на рациональные числа (2.1, 3.13), когда вещи становятся больше...

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

К сожалению, беспорядок начал начинаться, когда группа разработчиков выросла, действительно ли это - Апельсин, или Мандарин или Tangelo? Это смотрит хорошо. Что Вы имеете в виду "гнилой на внутренней части?"

... но во всей честности. Установите отдельный репозиторий как ведущее устройство, разработка продолжается в различных репозиториях. Для каждого запланированного выпуска все проверяется в главный репозиторий так, чтобы можно было быстро откатывать, когда что-то идет не так, как надо. (Я предполагаю, что dev/test/production являются всеми отдельными серверами, и dev никогда не позволяют коснуться производства или главного репозитория....),

2
ответ дан 2 December 2019 в 22:52
поделиться

Я обслуживаю систему веб-приложений с различными компонентами, которые живут в отдельном SVN repos. Чтобы смочь присвоить версию отслеживают систему в целом, у меня есть другой SVN repo, который содержит весь другой repos как внешние ссылки. Это также содержит установку / сценарий (сценарии) установки для развертывания всего этого. С той установкой количество пересмотра SVN "метарепозитория" могло возможно использоваться для управления версиями полная система.

В другом случае я включаю пересмотр SVN через ключевые слова SVN в файле класса, который не служит никакой другой цели (для предотвращения риска замены ключевого слова, взламывающей мой код). Класс в том файле содержит строковую переменную, которой управляет SVN и анализирует метод класса.

Неудобство с обоими подходами - то, что число пересмотра автоматически не обновляется изменениями во внешнем облике (приблизьтесь 1), или остальная часть кода (приближаются 2).

0
ответ дан 2 December 2019 в 22:52
поделиться

Во время внутренней разработки я использую эпохальные числа (M1, M2, M3...). После выпуска я, вероятно, просто обновлю даты ("обновление в январе 2009").

0
ответ дан 2 December 2019 в 22:52
поделиться
Другие вопросы по тегам:

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