Я борюсь с использованием шаблона экстрактора в определенном прецеденте, где кажется, что он может быть очень мощным.scala extractor pattern для комплексной проверки, но с хорошим выходом ошибки
Я начинаю с ввода карты [String, String], исходящей из веб-запроса. Это либо searchRequest, либо countRequest для нашего api.
SearchRequest имеет ключи
- запроса (требуется)
- FromDate (факультативно-дефолт)
- Todate (факультативно-дефолт)
- nextToken (необязательный)
- maxResults (факультативно-дефолтных)
countRequest имеет ключи
- запроса (обязательно)
- FromDate (факультативно-дефолт)
- Todate (опция-дефолт)
- ведра (опция-дефолт)
Тогда, я хочу, чтобы преобразовать как из них для такой структуры композиционного типа
protected case class CommonQueryRequest(
originalQuery: String,
fromDate: DateTime,
toDate: DateTime
)
case class SearchQueryRequest(
commonRequest: CommonQueryRequest,
maxResults: Int,
nextToken: Option[Long])
case class CountRequest(commonRequest: CommonQueryRequest, bucket: String)
As yo U может видеть, я как бы превращаю строки в DateTimes и Int, Long и т. д. Моя проблема в том, что мне действительно нужны ошибки для недопустимого fromDate или недопустимого формата toDate против недопустимых значений maxResults или недопустимого следующего токена IF.
В то же время мне нужно придерживаться значений по умолчанию (которые зависят от того, является ли это поиском или запросом на подсчет).
Естественно, что с переданной картой вы можете указать поиск по счету, поэтому в первый раз при этом я добавил ключ = «тип» со значением поиска или подсчета, чтобы я мог совместить, по крайней мере, что.
Я даже иду по правильному пути? Я думал, что, возможно, использование совпадения может быть более чистым, чем наша существующая реализация, но, тем не менее, я иду по этому пути, кажется, становится немного уродливым.
спасибо, Дин
+1 довольно хороший ответ, но сказаз почему-то не разрешен в наших библиотеках, хотя это дает мне, по крайней мере, хорошие идеи. –
вы можете скопировать код проверки из scalaz в свой проект и притвориться, что это вовсе не скалаз. когда у вас будет 50% скаляз в вашем проекте, вы можете смело представить его как зависимость;) –