Должны блоки проверки допустимости в пружинном доступе база данных?

Есть множество способов сделать это, и важно выбрать правильный. Вероятно, одно из самых важных архитектурных решений заключается в том, каким образом код модели будет доступен или доступен во всем приложении.

Некоторое время назад я написал сообщение в блоге об этом: Совместное использование кода модели . Вот краткое резюме:

Общие данные

Один из подходов состоит в том, чтобы делиться указателями на объекты модели между контроллерами представления.

  • Итерация грубой силы на контроллерах представления (в контроллере навигации или панели вкладок) для установки данных
  • Установка данных в prepareForSegue (если раскадровки) или init (если программный)

Поскольку подготовка к переходу является наиболее распространенным, приведем пример:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var next = segue.destinationViewController as NextViewController
    next.dataSource = dataSource
}

Независимый доступ

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

Наиболее распространенный способ, которым я видел это, - это одноэлементный экземпляр. Поэтому, если ваш одноэлементный объект был DataAccess, вы могли бы сделать следующее в методе viewDidLoad UIViewController:

func viewDidLoad() {
    super.viewDidLoad()
    var data = dataAccess.requestData()
}

Существуют инструменты добавления, которые также помогают передавать данные:

  • Наблюдение значения ключа
  • NSNotification
  • Базовые данные
  • NSFetchedResultsController
  • Источник данных

Базовые данные

Приятно, что в Core Data есть обратные отношения. Поэтому, если вы хотите просто дать NotesViewController объект notes, вы можете это сделать, потому что он будет иметь обратную связь с чем-то другим, таким как блокнот. Если вам нужны данные на ноутбуке в NotesViewController, вы можете вернуться к графу объектов, выполнив следующие действия:

let notebookName = note.notebook.name

Подробнее об этом читайте в моем блоге: Совместное использование кода модели [1 125]

9
задан Vasil 25 June 2009 в 19:54
поделиться

5 ответов

Что ж, ваши валидаторы - это просто Spring beans, так что в них можно внедрить служебные объекты, которые обрабатывают доступ к данным. Вы можете заставить ваши валидаторы получать данные из базы данных без ущерба для дизайна.

12
ответ дан 4 December 2019 в 08:52
поделиться

нет, валидаторы IMHO должны быть небольшими и не иметь побочных эффектов , чтобы их можно было легко комбинировать. Окончательно валидатор должен быть отделен от уровня сохранения.

3
ответ дан 4 December 2019 в 08:52
поделиться

Это во многом будет зависеть от того, как вы определяете валидацию. Подумайте вот о чем: вы что-то покупаете и вводите номер своей кредитной карты. Если контрольная цифра не совпадает, вы не прошли проверку. Никакой транзакции не было. Если, однако, это действительный номер кредитной карты, но он не соответствует вашему почтовому индексу (требуется взаимодействие с БД / третьей стороной), то это ошибка платежа.

Теперь учтите следующее: вы вводите свой адрес, и вы введите Mastiffica как свою страну. Почему система даже позволила вам ввести это - они должны были ограничить интерфейс только действительными записями (запись в БД не требуется).

Или вы вводите «пятьдесят» в поле суммы на экране банковского платежа. Почему он разрешает буквы там - это не проходит проверку (нет необходимости в БД). Но затем вы вводите 50 в поле суммы, и оказывается, на вашем счету нет пятидесяти фунтов. Это ошибка проверки? Или это неудачная транзакция?

Теперь предположим, что вы прошли все основные проверки ввода (контрольная сумма кредитной карты, страна, цифры, почтовый индекс), и транзакция не удалась, потому что срок действия вашей кредитной карты истек. Это ошибка валидации или неудачная транзакция?

Вы можете думать о валидации как о базовой гарантии того, что пользователи не будут вводить совершенно непонятные данные, или вы можете думать о валидации как «Я могу завершить эту транзакцию с данными, которые у меня есть. было дано". Я бы лично предпочел первое, но опять же, это вопрос определения.

Затем есть аспект проверки первой строки в качестве меры безопасности - дикие данные, которые были приняты за пределами вашего верхнего уровня пользовательского интерфейса, могут представлять угрозу безопасности (SQL-инъекция , например)

На вашем счету пятьдесят фунтов. Это ошибка проверки? Или это неудачная транзакция?

Теперь предположим, что вы прошли все основные проверки ввода (контрольная сумма кредитной карты, страна, цифры, почтовый индекс), и транзакция не удалась, потому что срок действия вашей кредитной карты истек. Это ошибка валидации или неудачная транзакция?

Вы можете думать о валидации как о базовой гарантии того, что пользователи не будут вводить совершенно непонятные данные, или вы можете думать о валидации как «Я могу завершить эту транзакцию с данными, которые у меня есть. было дано". Я бы лично предпочел первое, но опять же, это вопрос определения.

Затем есть аспект проверки первой строки в качестве меры безопасности - дикие данные, которые были приняты за пределами вашего верхнего уровня пользовательского интерфейса, могут представлять угрозу безопасности (SQL-инъекция , например)

На вашем счету пятьдесят фунтов. Это ошибка проверки? Или это неудачная транзакция?

Теперь предположим, что вы прошли все основные проверки ввода (контрольная сумма кредитной карты, страна, цифры, почтовый индекс), и транзакция не удалась, потому что срок действия вашей кредитной карты истек. Это ошибка валидации или неудачная транзакция?

Вы можете думать о валидации как о базовой гарантии того, что пользователи не будут вводить совершенно непонятные данные, или вы можете думать о валидации как «Я могу завершить эту транзакцию с данными, которые у меня есть. было дано". Я бы лично предпочел первое, но опять же, это вопрос определения.

Затем есть аспект проверки первой строки в качестве меры безопасности - дикие данные, которые были приняты за пределами вашего верхнего уровня пользовательского интерфейса, могут представлять угрозу безопасности (SQL-инъекция , например)

Это ошибка проверки? Или это неудачная транзакция?

Теперь предположим, что вы прошли все основные проверки ввода (контрольная сумма кредитной карты, страна, цифры, почтовый индекс), и транзакция не удалась, потому что срок действия вашей кредитной карты истек. Это ошибка валидации или неудачная транзакция?

Вы можете думать о валидации как о базовой гарантии того, что пользователи не будут вводить совершенно непонятные данные, или вы можете думать о валидации как «Я могу завершить эту транзакцию с данными, которые у меня есть. было дано". Я бы лично предпочел первое, но опять же, это вопрос определения.

Затем есть аспект проверки первой строки в качестве меры безопасности - дикие данные, которые были приняты за пределами вашего верхнего уровня пользовательского интерфейса, могут представлять угрозу безопасности (SQL-инъекция , например)

Это ошибка проверки? Или это неудачная транзакция?

Теперь предположим, что вы прошли все основные проверки ввода (контрольная сумма кредитной карты, страна, цифры, почтовый индекс), и транзакция не удалась, потому что срок действия вашей кредитной карты истек. Это ошибка валидации или неудачная транзакция?

Вы можете думать о валидации как о базовой гарантии того, что пользователи не будут вводить совершенно непонятные данные, или вы можете думать о валидации как «Я могу завершить эту транзакцию с данными, которые у меня есть. было дано". Я бы лично предпочел первое, но опять же, это вопрос определения.

Затем есть аспект проверки первой строки в качестве меры безопасности - дикие данные, которые были приняты за пределами вашего верхнего уровня пользовательского интерфейса, могут представлять угрозу безопасности (SQL-инъекция , например)

считайте, что вы прошли все основные проверки ввода (контрольная сумма кредитной карты, страна, цифры, почтовый индекс), и транзакция не удалась, потому что срок действия вашей кредитной карты истек. Это ошибка валидации или неудачная транзакция?

Вы можете думать о валидации как о базовой гарантии того, что пользователи не будут вводить совершенно непонятные данные, или вы можете думать о валидации как «Я могу завершить эту транзакцию с данными, которые у меня есть. было дано". Я бы лично предпочел первое, но опять же, это вопрос определения.

Затем есть аспект проверки первой строки в качестве меры безопасности - дикие данные, которые были приняты за пределами вашего верхнего уровня пользовательского интерфейса, могут представлять угрозу безопасности (SQL-инъекция , например)

считайте, что вы прошли все основные проверки ввода (контрольная сумма кредитной карты, страна, цифры, почтовый индекс), и транзакция не удалась, потому что срок действия вашей кредитной карты истек. Это ошибка валидации или неудачная транзакция?

Вы можете думать о валидации как о базовой гарантии того, что пользователи не будут вводить совершенно непонятные данные, или вы можете думать о валидации как «Я могу завершить эту транзакцию с данными, которые у меня есть. было дано". Я бы лично предпочел первое, но опять же, это вопрос определения.

Затем есть аспект проверки первой строки в качестве меры безопасности - дикие данные, которые были приняты за пределами вашего верхнего уровня пользовательского интерфейса, могут представлять угрозу безопасности (SQL-инъекция , например)

или неудачная транзакция?

Вы можете думать о валидации как о базовой гарантии того, что пользователи не будут вводить совершенно необъяснимые данные, или о валидации как о «Я могу завершить эту транзакцию с данными, которые мне были предоставлены». Я бы лично предпочел первое, но опять же, это вопрос определения.

Затем есть аспект проверки первой строки в качестве меры безопасности - дикие данные, которые были приняты за пределами вашего верхнего уровня пользовательского интерфейса, могут представлять угрозу безопасности (SQL-инъекция , например)

или неудачная транзакция?

Вы можете думать о валидации как о базовой гарантии того, что пользователи не будут вводить совершенно необъяснимые данные, или о валидации как о «Я могу завершить эту транзакцию с данными, которые мне были предоставлены». Я бы лично предпочел первое, но опять же, это вопрос определения.

Затем есть аспект проверки первой строки в качестве меры безопасности - дикие данные, которые были приняты за пределами вашего верхнего уровня пользовательского интерфейса, могут представлять угрозу безопасности (SQL-инъекция , например)

7
ответ дан 4 December 2019 в 08:52
поделиться

Я проверил один из своих и вызываю уровень сервиса из валидатора:

@Service
public final class StartFormValidator {
private FacilityService facilityService;
private AdminService adminService;

/**
 * Verify that they've selected a facility. Verify that they've selected a
 * valid facility. Verify that they've selected a view and that it's a valid
 * view.
 * 
 * @param startForm
 * @param errors
 * @return true if no errors were set
 */
public boolean isValid(final StartForm startForm, final Errors errors) {
    if (startForm.getFacilityId() == 0) {
        errors.rejectValue("facilityId", "facilityIdEmpty",
                "Select a facility.");
    }

    if (!this.facilityService.isFacilWaitlistEnabled(startForm
            .getFacilityId())) {
        errors.rejectValue("facilityId", "facilityInvalid",
                "Invalid facility");
    }

    if (StringUtils.isBlank(startForm.getPassword())) {
        errors.rejectValue("password", "passwordEmpty",
                "Enter the password.");

        return (false);
    }

    if (!this.adminService.validateAdmin(startForm.getPassword()))
        errors.rejectValue("password", "passwordInvalid",
                "Incorrect password");

    return (!errors.hasErrors());
}

/**
 * @param _facilityService
 */
@Autowired
public void setFacilityService(final FacilityService _facilityService) {
    this.facilityService = _facilityService;
}

/**
 * @param _adminService
 */
@Autowired
public void setAdminService(final AdminService _adminService) {
    this.adminService = _adminService;
}

}

1
ответ дан 4 December 2019 в 08:52
поделиться

Если вы действительно верите в "MVC", то я так не думаю, что вы бы хотели, чтобы ваши валидаторы переходили в базу данных. Проверка - это этап, который по существу проверяет данные из бизнес-логики точки зрения.

База данных не должна знать, как валидаторы будут ее использовать, и валидаторы не должны знать, что собой представляет база данных. Это просто не вписывается в модель MVC. Завтра, если у вас есть данные, поступающие из нескольких источников, вы все равно скажете своим валидаторам, к какому конкретно источнику он должен получить доступ при каких условиях. Это само по себе составляет логику, которая даже не требуется. в приложении.

Тип проверки, которую вы ищете, будет рассматриваться как часть бизнес-объектов, которая гарантирует, что еще до вызова служебных объектов; такой комбинации еще не существует.

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

Короче говоря, я считаю, что весенние валидаторы предназначены для базовых проверок, а не для бизнес-проверок.

Я чувствую, что весенние валидаторы предназначены для базовых проверок, а не для бизнес-проверок.

Я чувствую, что весенние валидаторы предназначены для базовых проверок, а не для бизнес-проверок.

1
ответ дан 4 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: