Вход на сайт
Абасс... обсудите рахитекурту
3762 просмотров
Перейти к просмотру всей ветки
в ответ alex445 21.05.24 16:53
Кстати, нашёл ещё один минус в единственном методе Validate на весь класс. Если свойства взаимозависимы, то нужно соблюдать порядок их валидации и присвоений. Если это всё в одном методе, а свойств много, то надо перетасовывать валидации ВСЕХ свойств. А если взаимозависимые свойства сгруппированы в отдельные методы валидации, то перетасовывать надо будет только в этих методах, что куда проще. Сами же эти отдельные методы валидации могут быть применены для всего объекта в любом порядке.
В твоей логике есть один изъян :)
Предположим у нас есть 3 своства: A, B и C. При этом A и B зависят от C.
С твои подходом нужно сделать 3 + 1 функцию: ValidateA, ValidateB, ValidateC и Validate
Выглядеть это будет так:
private void ValidateA () { ValidateC(); a = .... } private void ValidateB () { ValidateC(); b = .... } private void ValidateC () { c = .... } public void Validate () { ValidateC(); ValidateA(); ValidateB(); }
Очевидно, что ValidateC будет вызвана аж целых 3 раза :) Можно сократить количество вызовов ValidateC до двух, но тогда будет неявная валидация С.
Можно конечно пойти еще дальше и сократить количество вызовов до 1, но тогда придется писать дополнительный код.
Ну и все это безобразие должно конкурировать с этим:
public void Validate () { // a and b depends on c. Thats'y c must be validated before!!! c = .... <span class="redactor-invisible-space"></span> a = .... <span class="redactor-invisible-space"></span> b = .... }
Я не знаю что тут надо перетасовывать, но простота кода при моем подходе, как мне кажется, очевидна :)