LINUX.ORG.RU

Написать свой веб-фреймворк

 ,


0

1

Первое правило написания своего веб-фреймворка - не пишите его.

Согласны ли вы с этим? Писали ли вы свой веб-фреймворк и почему?

Вопрос навеян веб-фреймворками для Scala, ни один из них не соответствовал моим критериям. Начал хотеть странного и ловить себя на мыслях, о которых запрещено думать... :)

★★★★★

веб

Scala

Двумя ненужными фиговинами ты уже занимаешься, почему бы и не заняться третьей.

anonymous
()
Ответ на: комментарий от anonymous

Согласен, тем более что это лучше чем воровать на базаре

vertexua ★★★★★
() автор топика

ни один из них не соответствовал моим критериям

сразу видно опытного программиста и архитектора, одного уровня с Фаулером, Бучем, Блохом
однако при реализации вы вполне можете сломаться уже на этапе разбора uri и генерации страниц ошибок

anonymous
()

Писали ли вы свой веб-фреймворк и почему?

Да. Дважды. На Perl и на PHP. Потому что готовых решений не было :)

Вопрос навеян веб-фреймворками для Scala, ни один из них не соответствовал моим критериям

А в Play framework что не нравится?

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous

сразу видно опытного программиста и архитектора, одного уровня с Фаулером, Бучем, Блохом

ООП-шники такие пафосные. У них, чтобы просто написать удобную и полезную программу, нужно быть великим архитектором, рождающимся раз в сто лет.

однако при реализации вы вполне можете сломаться уже на этапе разбора uri и генерации страниц ошибок

Ну да, если делать это через жООПу, то лучше и не начинать.

anonymous
()
Ответ на: комментарий от anonymous

сразу видно опытного программиста и архитектора, одного уровня с Фаулером, Бучем, Блохом

Нигде нет одновременно Cake Pattern, DRY, statically typed parsing, composite view.

Уже написал базовую реализацию, запросы парсит, связывается через cake, параметр указывается оди раз

  trait BookController{ self: Controller with BookRepository =>

  implicit def bookProvider = booksDao

  route /"store"/string/"books"/classOf[Book]/"view" -> { (storeName, book)=>
      view("index", book, "store"->storeName, new Date)
  }

  route /"compose" -> compose("page1")
}

Первое парсит запрос по шаблону, в замыкании типы storeName и book вычислены автоматически их того как написан запрос. Обратите внимание, функция строго (String,Book)=>Unit. Иначе ошибка компиляции. Book получен из своего id, который был в запросе. Если его нет, то 404. Способ конвертации кастомный, мол «используй вот это dao». Если использовать Option, то не будет 404.

view покажет jsp. Имя атрибута book вычислено из типа, для store указано явно.

Интересная штука compose. С нуля через scala xml и scala xpath написан композитинг визуально похожий facelets. Особенностью будет то, что если ваша страница статическая, то она будет собрана один раз, сжата в gzip и будет отдаваться с памяти с поддержкой Etag.

vertexua ★★★★★
() автор топика
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от KRoN73

А в Play framework что не нравится?

Здоровенный, не совсем понятно как применить IoC, кажется нет поддержки GAE

vertexua ★★★★★
() автор топика

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

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

Поверх голых сервлетов же, значит фреймворк )

vertexua ★★★★★
() автор топика

Не писал ни свою CMS, ни свой фреймворк, ни что-либо своё велосипедное при наличии готового, чего и всем советую.

resurtm ★★★
()
Ответ на: комментарий от vertexua

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

Eddy_Em ☆☆☆☆☆
()

Вопрос навеян веб-фреймворками для Scala, ни один из них не соответствовал моим критериям.

Pull request'ы с патчами делал?

resurtm ★★★
()

На заре своей карьеры писал свою CMS для одного из проектов поверх CodeIgniter. Много дало опыта в построении таких систем. Хотя бы для обучения полезно, я считаю.

Wizard_ ★★★★★
()
Ответ на: комментарий от vertexua

Ну спорить не буду по поводу FUBARности, но если мне чего-то не хватает, то стараюсь допилить и отправить в апстрим. А в апстриме есть уже спроектированная и рабочая платформа, хорошие проектировщики, да и вообще помогут фичу пропихнуть правильно. :-)

resurtm ★★★
()

Написал и выкинул несколько, не считая ad hoc велисипедов для реальных проектов. Если есть много времени - почему нет, всяко лучше редакторов и плееров :)

zz ★★★★
()

Первое правило написания своего веб-фреймворка - не пишите его.

Согласны ли вы с этим? Писали ли вы свой веб-фреймворк и почему?

Попробуй представить себя на месте создателей Play! или Struts и подумай как они бы ответили на этот вопрос перед тем как начали ваять свои поделия :) Конечно, существуют случаи, когда создание фреймворка оправдано. Вопрос только в том, что это за случаи.

По своему опыту скажу, что у меня сложилось представление о good design как о наборе эффективных, но частных решений. Мысли глобально, действуй локально (с). Так вот часто выгодно разменять изучение, адаптацию и поддержку универсального фреймворка на написание за пару вечеров своего микро-фреймворка (точнее прото-фреймворка, по моему опыту такие решения в других проектах сложно применить, так как там уже свои частные случаи). Например мне когда-то захотелось делать неблокирующие вызовы по хттп, но внутри колбеков иметь возможность делать инъекции Guice. Пришлось выкинуть Jersey и поверх Grizzly накатать микро-фреймворк с интеграцией с Guice. Получилось прикольно. Ничего и близко подобного из готового я не нашел.

На тему велосипедов очень порадовал пост: http://habrahabr.ru/company/odnoklassniki/blog/148139/

Ребята придумали реально эффективное решение. Обратите внимание на фрустациии быдлокодеров в комментариях на тему «а как же не готовое, зачем велосипед». А вот так, что нужно мозги включать и искать решения, а не думать что какие-то дяди за тебя уже подумали.е

dizza ★★★★★
()
Последнее исправление: dizza (всего исправлений: 1)
Ответ на: комментарий от dizza

У меня было именно так. Да, относительно Scala я упоролся, признаю, но с сильнейшим настроем использовать «замечательные scala фреймворки» я разбил лицо об ладонь много раз. Я не шел их критиковать, я шел их использовать. Но когда в 21 веке дядя Одерски распинается о cake pattern, все городят фреймворки не на базе IoC, то что тут поделаешь. Есть или монстр Play2, или что хочу то и горожу Lift или очередные недо-«Rails» Scalatra и Circumflex. В том время когда Scala позволяет сделать простой тестируемый, эффективный, легкий и типобезопасный фреймворк, в котором Akka будет родной, но при этом хорошо decoupled, в котором будут rest и comet вместе. Это достигается, но большим Франкенштейном из 5-10 библиотек, которые и рядом не валялись с идиоматической Scala.

vertexua ★★★★★
() автор топика
Ответ на: комментарий от moscwich

День рождения: 29 ноября 1996 г.

anonymous
()
Ответ на: комментарий от AndreyKl

Громадный набор хелперов который фиг его знает как работает. Плюс основная фича - Comet в случае деплоя на GAE не будет работать.

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

Чтобы уточнить, я совсем не считаю Lift говном, это очень инновационный фреймворк. Но я очень хочу cake-pattern и понятность что происходит. Тем более привязанность к папкам view и т.д. - пошло и удел Ruby и PHP

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

не мужик, пдф-ка что-то большая и не по теме. я прочитал 3 страницы, но до моего вопроса по ходу там он не дойдёт даже в конце... пойду погуглю чуток..

AndreyKl ★★★★★
()

Ну писал. И отвечу даже и больше, хотя Вы и не задавали. Писал и даже написал. И очень даже сделанным доволен. А правило Ваше имеет смысл, но я бы его уточнил: ... не пишите его первые семь лет после того как захотелось.

А почему свой писал - потому что все остальные достали.

AlexSerov
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.