Как мне разделить мою систему Clojure на изменяемые / неизменные части? - PullRequest
2 голосов
/ 02 января 2011

Что из нижеперечисленного имеет смысл при разделении моего приложения Clojure на неизменяемые части?

  • Разделите в разные пространства имен изменяемые / неизменяемые части
  • Добавьте префиксы к определению, котороеесть побочные эффекты
  • Используйте Clojure "doc", чтобы объяснить это
  • Смешивайте и подбирайте по своему усмотрению

Мне нужно знать это, так как у меня есть приложение Clojureкоторый взаимодействует с базами данных, серверами приложений и веб-средой с отслеживанием состояния, поэтому я хочу, чтобы мое приложение было максимально простым в обслуживании / чтении

Ответы [ 2 ]

3 голосов
/ 02 января 2011

Некоторые техники, которые сработали для меня:

  • Разделите ваши пространства имен и файлы по модулю / назначению, а не по чему-либо еще. Это имеет более логичный смысл и помогает поддерживать чистоту вашего дизайна и зависимостей.
  • Используйте "!" чтобы указать функции, которые имеют побочные эффекты, например, "своп!". Обычно вам следует избегать побочных эффектов в максимально возможной степени, поэтому если вы видите, что это происходит слишком часто, то это немного от дизайнерского запаха
  • Старайтесь избегать любого изменяемого состояния в ваших функциях библиотеки / утилиты. Мало того, что это обычно дает вам лучший дизайн API, это также намного проще для тестирования ....
  • Сохранять изменяемое состояние конкретного приложения для небольшого числа определений верхнего уровня. Например, можно использовать только одну ссылку верхнего уровня на неизменяемую карту для хранения всех ваших изменяемых данных
  • Полезно документировать с примерами, которые вы можете вырезать и вставить в REPL, чтобы вы могли быстро протестировать или настроить для более сложного варианта использования. Опять же, это намного проще, если все чисто.
2 голосов
/ 02 января 2011

Вот мой подход:

  1. Не делите пространства имен по изменчивости / неизменности, если вы не пишете библиотеку коллекций или что-то подобное.Используйте пространства имен для обозначения логических разделов вашего кода, например ui, core, util и т. Д.
  2. По умолчанию все функции остаются чистыми и, следовательно, по умолчанию не используют префиксыСостояние должно обычно храниться в ref с и atom с, определенных как def с.Используйте имена, которые указывают на насыщенность, например userNameStore.
  3. Документируйте все, все функции и переменные.Или, по крайней мере, общедоступные.
  4. Смешивайте и сопоставляйте, но не делайте это на разовой основе.Четко структурируйте свой код так, чтобы изменяемое состояние было ограниченным и хорошо сфокусированным.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...