Я довольно новичок в функциональном программировании и пытаюсь работать в рамках очень императивной базы кода, поэтому я пытаюсь написать код, который в основном FP, но не может быть полностью.
I необходимо написать переопределение для следующего метода ...
protected override string CreateEntity(XElement xe)
... где xe
содержит два фрагмента данных, необходимых для обновления базы данных. Метод должен проверить содержимое xe
, затем выполнить обновление, возвращая "" в случае успеха или список ошибок, разделенных символом канала, если нет.
Я взял сигнал с кредитной карты проверочный пример в тестах language-ext и написал несколько вспомогательных методов, таких как следующие (реализация очень похожа на пример, поэтому опущен) ...
private Validation<string, int> ValidateRegionID(XElement xe)
В этом примере он использовал Apply на их коллекции, которая возвратила Validation
, который был новым объектом кредитной карты, если все прошло нормально, или Error
, если нет. В моем случае мне нечего возвращать, если все прошло хорошо (так как я делаю обновление базы данных, а не создаю новый объект), так что дошли до этого ...
Validation<string, Unit> validation = (ValidateRegionID(xe), ValidateClinAppsID(xe))
.Apply((regionID, clinAppsID) =>
{
// Do the database update (yes, impure code)...
return Unit.Default;
});
Я не знаю, является ли это лучшим способом сделать это, поэтому любые предложения будут приветствоваться.
Моя большая проблема заключается в том, что делать дальше. Следующее работает, но выглядит не очень элегантно или FP для меня ...
return validation.IsFail
? string.Join("|", validation.FailAsEnumerable())
: "";
Есть ли лучший способ сделать это?