Общего ответа у меня лично нет. Я думаю все зависит от конкретной ситуации. Простой полнотекстовый поиск сейчас есть у многих БД (mongodb, postres). Руками в конце концов (кстати, в большинстве случаев самый оптимальный способ, легко адаптируется и легко выбрасывается). И даже люцена может быть не оверкилл. В случае если есть прошаренный в ней человек, который может ее за пять минут подключить и четко знает где и как ее настраивать.
Вы не колесо, вы ракетный двигатель на велосипед ставите. Реактивный двигатель тоже «готовое, проверенное решение с существенным запасом для роста» ;) Вот только на велосипед лучше что-то другое приделать… Ну и остальные доводы — классический overengineering, как по книжке :)
Дело не в том, проба это или нет. Просто то, что вы делаете — это типичный overengineering. Вы пытаетесь использовать сложную и тяжелую библиотеку, там где можно обойтись чем-то маленьким и конкретным. Люцена предназначена для полнотекстового поиска по большому объему (мегабайты, гигабайты) слабоструктурированной информации. Вам же нужен кастомный парсер распознающий небольшое количество редко меняющихся ключевых слов и каких-то личных данных. Любое наколеночное решение будет проще и скорее всего быстрее.
з.ы. Поймите меня правильно, я не для того чтобы задеть вас это пишу, просто сам лично не раз пытался заюзать что-то такое мощное и прикольное, а потом понимал что оно не нужно. Ну и могу ошибаться, не зная какой-то внутренней специфики.
В простых случаях, когда не нужна сложная валидация с сообщениями на каждую ошибку на Option и for можно городить вот такие чудные конструкции (вроде бы и без комментариев должно быть читаемо):
case class User(login: String, password: String, blocked: Boolean)
def getParam(name: String): Option[String]
def isSecure(password: String): Boolean
def checkUser(login: String, password: String): Option[User]
def changePassword(user: User, newPassword: String)
for {
login <- getParam("login") if !login.isEmpty
password <- getParam("password") if isSecure(password)
newPassword <- getParam("new_password")
confirmPassword <- getParam("confirm_password") if confirmPassword == newPassword
user <- checkUser(login, password) if !user.blocked
} changePassword(user, newPassword)
В более сложных случаях уже надо на Either переходить или что-то подобное.
з.ы. в примере с Partial Functions достаточно фигурных скобок:
iterable.map {
case Some(value) => whenValue(value)
case None => whenNothing()
}
Agile-методы, на мой взгляд, являются очень прогрессивными практиками как разработки, так и менеджмента, и могут быть использованы в других отраслях экономики.
Ivy может использовать репозитории мавена, при чем тут сам мавен? Просто они есть, их много, и глупо их не использовать.
Да некоторые простые вещи в sbt делаются для новичка не совсем просто. Но это все скорее детские болезни, typesafe обещают все заполировать. Вы лучше расскажите как, допустим, в мавене подключить все либы из произвольной локальной папки без плясок с бубном? Хотя может, наконец, запили… Или что-то нетривиальное сделать с файлами. В мавен надо искать плагины, разбираться в документации к ним, если она есть вообще, ну или подключать ант и делать им. В sbt просто пишешь на скале все, что тебе нужно было сделать, и вот свой плагин готов.
з.ы. Поймите меня правильно, я не для того чтобы задеть вас это пишу, просто сам лично не раз пытался заюзать что-то такое мощное и прикольное, а потом понимал что оно не нужно. Ну и могу ошибаться, не зная какой-то внутренней специфики.
++ это метод для сложения 2-х коллекций
В более сложных случаях уже надо на Either переходить или что-то подобное.
з.ы. в примере с Partial Functions достаточно фигурных скобок:
Чур меня, чур!
Да некоторые простые вещи в sbt делаются для новичка не совсем просто. Но это все скорее детские болезни, typesafe обещают все заполировать. Вы лучше расскажите как, допустим, в мавене подключить все либы из произвольной локальной папки без плясок с бубном? Хотя может, наконец, запили… Или что-то нетривиальное сделать с файлами. В мавен надо искать плагины, разбираться в документации к ним, если она есть вообще, ну или подключать ант и делать им. В sbt просто пишешь на скале все, что тебе нужно было сделать, и вот свой плагин готов.